diff --git a/jscomp/outcome_printer/tweaked_reason_oprint.ml b/jscomp/outcome_printer/tweaked_reason_oprint.ml index 69a6678160..c9008e87db 100644 --- a/jscomp/outcome_printer/tweaked_reason_oprint.ml +++ b/jscomp/outcome_printer/tweaked_reason_oprint.ml @@ -6,9 +6,9 @@ other printer called reason_pprint_ast, our actual, main pretty-printer. Why is this one separated from reason_pprint_ast? Because the outcome printer's use-case is a bit different and needs different entry points blablabla... - These are mostly excuses. But for example, currently, `Js.t {. foo: bar}` by + These are mostly excuses. But for example, currently, `Js.t({. foo: bar})` by itself is *invalid syntax* for a pretty printer (the correct, minimal valid - code would be `type myObject = Js.t {. foo: bar}`), but the terminal error + code would be `type myObject = Js.t({. foo: bar})`), but the terminal error report do want to provide just that snippet and have you print it. Hopefully OCaml can unify actual code pretty-printing and terminal type info pretty- printing one day. @@ -76,9 +76,64 @@ let parenthesized_ident name = false | _ -> true) +#if defined BS_NO_COMPILER_PATCH then +let ml_to_reason_swap = Syntax_util.ml_to_reason_swap +#else + +(* please keep this section in sync with Reason repo's Syntax_util file's + helpers of the same names *) + +let string_add_suffix x = x ^ "_" +let string_drop_suffix x = String.sub x 0 (String.length x - 1) +(** Check to see if the string `s` is made up of `keyword` and zero or more + trailing `_` characters. *) +let potentially_conflicts_with ~keyword s = + let s_length = String.length s in + let keyword_length = String.length keyword in + (* It can't be a match if s is shorter than keyword *) + s_length >= keyword_length && ( + try + (* Ensure s starts with keyword... *) + for i = 0 to keyword_length - 1 do + if keyword.[i] <> s.[i] then raise Exit; + done; + (* ...and contains nothing else except trailing _ characters *) + for i = keyword_length to s_length - 1 do + if s.[i] <> '_' then raise Exit; + done; + (* If we've made it this far there's a potential conflict *) + true + with + | Exit -> false + ) +let ml_to_reason_swap = function + | "not" -> "!" + | "!" -> "^" + | "^" -> "++" + | "==" -> "===" + | "=" -> "==" + (* ===\/ and !==\/ are not representable in OCaml but + * representable in Reason + *) + | "!==" -> "\\!==" + | "===" -> "\\===" + | "<>" -> "!=" + | "!=" -> "!==" + | x when ( + potentially_conflicts_with ~keyword:"match_" x + || potentially_conflicts_with ~keyword:"method_" x + || potentially_conflicts_with ~keyword:"private_" x) -> string_drop_suffix x + | x when ( + potentially_conflicts_with ~keyword:"switch" x + || potentially_conflicts_with ~keyword:"pub" x + || potentially_conflicts_with ~keyword:"pri" x) -> string_add_suffix x + | everything_else -> everything_else + +#end + let value_ident ppf name = if parenthesized_ident name then - fprintf ppf "( %s )" name + fprintf ppf "( %s )" (ml_to_reason_swap name) else pp_print_string ppf name @@ -227,7 +282,7 @@ let rec print_out_type ppf = pr_vars sl print_out_type ty | ty -> - print_out_type_1 ppf ty + print_out_type_1 ~uncurried:false ppf ty and print_arg ppf (lab, typ) = let suffix = @@ -247,7 +302,7 @@ and print_arg ppf (lab, typ) = print_out_type_2 ppf typ; pp_print_string ppf suffix; -and print_out_type_1 ppf = +and print_out_type_1 ~uncurried ppf = function Otyp_arrow (lab, ty1, ty2) -> let rec collect_args args typ = match typ with @@ -255,13 +310,23 @@ and print_out_type_1 ppf = | _ -> (args, typ) in pp_open_box ppf 0; - pp_print_string ppf "("; let (args, result) = collect_args [(lab, ty1)] ty2 in + let should_wrap_with_parens = match (uncurried, args) with + (* single argument should not be wrapped *) + (* though uncurried type are always wrapped in parens. `. a => 1` isn't supported *) + | (false, [(_, Otyp_tuple _)]) -> true + | (false, [("", typ)]) -> false + | (_, args) -> true + in + + if should_wrap_with_parens then pp_print_string ppf "("; + if uncurried then fprintf ppf ".@ "; print_list print_arg (fun ppf -> fprintf ppf ",@ ") ppf args; - pp_print_string ppf ")"; + if should_wrap_with_parens then pp_print_string ppf ")"; + pp_print_string ppf " =>"; pp_print_space ppf (); - print_out_type_1 ppf result; + print_out_type_1 ~uncurried ppf result; pp_close_box ppf () | ty -> print_out_type_2 ppf ty and print_out_type_2 ppf = @@ -278,8 +343,8 @@ and print_simple_out_type ppf = (* BuckleScript-specific external. See the manual for the usage of [@bs]. This [@bs] is processed into a type that looks like `Js.Internal.fn ...`. This leaks during error reporting, where the type is printed. Here, we print it - back from `Js.Internal.fn [ `Arity_2 ('c, 'd) ] 'e` into `('a => 'b => int) [@bs]` *) - (* same for `Js_internal.fn ...`. Either might shown *) + back from `Js.Internal.fn([ `Arity_2 ('c, 'd) ], 'e)` into `('a => 'b => int) [@bs]` *) + (* same for `Js_internal.fn(...)`. Either might shown *) | Otyp_constr ( (Oide_dot ( (Oide_dot ((Oide_ident "Js"), "Internal") | Oide_ident "Js_internal"), @@ -313,8 +378,8 @@ and print_simple_out_type ppf = end | res -> begin match name with - | "fn" -> fprintf ppf "@[<0>(%a)@ [@bs]@]" print_out_type_1 res - | "meth" -> fprintf ppf "@[<0>(%a)@ [@bs.meth]@]" print_out_type_1 res + | "fn" -> print_out_type_1 ~uncurried:true ppf res + | "meth" -> fprintf ppf "@[<0>(%a)@ [@bs.meth]@]" (print_out_type_1 ~uncurried:false) res | _ -> assert false end end @@ -346,8 +411,18 @@ and print_simple_out_type ppf = pp_close_box ppf () end | res -> - fprintf ppf "@[<0>(%a)@ [@bs.this]@]" print_out_type_1 res + fprintf ppf "@[<0>(%a)@ [@bs.this]@]" (print_out_type_1 ~uncurried:false) res end + (* also BuckleScript-specific. Turns Js.t({. foo: bar}) into {. "foo": bar} *) + | Otyp_constr ( + (Oide_dot ((Oide_ident "Js"), "t")), + [Otyp_object (fields, rest)] + ) -> + let dot = match rest with + Some non_gen -> (if non_gen then "_" else "") ^ ".." + | None -> "." + in + fprintf ppf "@[<2>{%s %a}@]" dot (print_object_fields ~quote_fields:true) fields | Otyp_constr (id, tyl) -> pp_open_box ppf 0; @@ -363,7 +438,7 @@ and print_simple_out_type ppf = Some non_gen -> (if non_gen then "_" else "") ^ ".." | None -> "." in - fprintf ppf "@[<2>{%s %a }@]" dot print_object_fields fields + fprintf ppf "@[<2>{%s %a}@]" dot (print_object_fields ~quote_fields:false) fields | Otyp_stuff s -> pp_print_string ppf s | Otyp_var (ng, s) -> fprintf ppf "'%s%s" (if ng then "_" else "") s | Otyp_variant (non_gen, row_fields, closed, tags) -> @@ -407,22 +482,30 @@ and print_simple_out_type ppf = fprintf ppf "@[<1>(%a [@@%s])@]" print_out_type t attr.oattr_name #end -and print_object_fields ppf = +and print_object_fields ~quote_fields ppf = function [] -> () - | [s, t] -> - fprintf ppf "%s : %a" s print_out_type t; - print_object_fields ppf [] - | (s, t) :: l -> - fprintf ppf "%s : %a,@ %a" s print_out_type t print_object_fields l + | [field, typ] -> + let field = (if quote_fields then "\"" ^ field ^ "\"" else field) in + fprintf ppf "%s: %a" field print_out_type typ; + (print_object_fields ~quote_fields) ppf [] + | (field, typ) :: rest -> + let field = (if quote_fields then "\"" ^ field ^ "\"" else field) in + fprintf ppf "%s: %a,@ %a" field print_out_type typ (print_object_fields ~quote_fields) rest and print_row_field ppf (l, opt_amp, tyl) = let pr_of ppf = if opt_amp then fprintf ppf " &@ " - else if tyl <> [] then fprintf ppf " " - else fprintf ppf "" - in - fprintf ppf "@[`%s%t%a@]" l pr_of (print_typlist print_out_type " &") - tyl + else fprintf ppf "" in + let parens = match tyl with + | [ (Otyp_tuple _) ] -> false (* tuples already have parentheses *) + | [ _ ] -> true + | _ -> false in + fprintf ppf "@[`%s%t%s%a%s@]" + l + pr_of + (if parens then "(" else "") + (print_typlist print_out_type " &") tyl + (if parens then ")" else "") and print_typlist print_elem sep ppf = function [] -> () @@ -620,42 +703,40 @@ and print_out_sig_item ppf = | Orec_next -> "and") ppf td #if defined BS_NO_COMPILER_PATCH then - | Osig_value {oval_name; oval_type; oval_prims; oval_attributes} -> - let kwd = if oval_prims = [] then "let" else "external" in - let pr_prims ppf = - function - [] -> () - | s :: sl -> - fprintf ppf "@ = \"%s\"" s; - List.iter (fun s -> fprintf ppf "@ \"%s\"" s) sl - in - fprintf ppf "@[<2>%s %a:@ %a%a%a@]" kwd value_ident oval_name - !out_type oval_type pr_prims oval_prims - (fun ppf -> List.iter (fun a -> fprintf ppf "@ [@@@@%s]" a.oattr_name)) - oval_attributes | Osig_ellipsis -> fprintf ppf "..." + | Osig_value {oval_name; oval_type; oval_prims; oval_attributes} -> + let printAttributes ppf = List.iter (fun a -> fprintf ppf "[@@%s]" a.oattr_name) in #else | Osig_value(oval_name, oval_type, oval_prims) -> - let kwd = if oval_prims = [] then "let" else "external" in - let pr_prims ppf = + let printAttributes ppf attrs = () in + let oval_attributes = [] in +#end + let keyword = if oval_prims = [] then "let" else "external" in + let (hackyBucklescriptExternalAnnotation, rhsValues) = List.partition (fun item -> + (* "BS:" is considered as a bucklescript external annotation, `[@bs.module]` and the sort. + + "What's going on here? Isn't [@bs.foo] supposed to be an attribute in oval_attributes?" + Usually yes. But here, we're intercepting things a little too late. BuckleScript already + finished its pre/post-processing work before we get to print anything. The original + attribute is already gone, replaced by a "BS:asdfasdfasd" thing here. + *) + String.length item >= 3 && item.[0] = 'B' && item.[1] = 'S' && item.[2] = ':' + ) oval_prims in + let print_right_hand_side ppf = function [] -> () | s :: sl -> fprintf ppf "@ = \"%s\"" s; - List.iter (fun s -> - (* TODO: in general, we should print bs attributes, some attributes like - bs.splice does need it *) - let len = String.length s in - if len >= 3 && s.[0] = 'B' && s.[1] = 'S' && s.[2] = ':' then - fprintf ppf "@ \"BuckleScript External\"" - else - fprintf ppf "@ \"%s\"" s - ) sl + List.iter (fun s -> fprintf ppf "@ \"%s\"" s) sl in - fprintf ppf "@[<2>%s %a:@ %a%a@]" kwd value_ident oval_name - !out_type oval_type pr_prims oval_prims -#end + fprintf ppf "@[<2>%a%a%s %a:@ %a%a@]" + (fun ppf -> List.iter (fun _ -> fprintf ppf "[@@bs...]@ ")) hackyBucklescriptExternalAnnotation + printAttributes oval_attributes + keyword + value_ident oval_name + !out_type oval_type + print_right_hand_side rhsValues and print_out_type_decl kwd ppf td = let print_constraints ppf = diff --git a/lib/refmt_main3.ml b/lib/refmt_main3.ml index bced24dbeb..298ca506c0 100644 --- a/lib/refmt_main3.ml +++ b/lib/refmt_main3.ml @@ -35358,8285 +35358,2936 @@ module Compiler_libs = struct end end -module Easy_format : sig -#1 "easy_format.mli" -(** - Easy_format: indentation made easy. -*) +module Reason_comment += struct +#1 "reason_comment.ml" +open Location -(** - This module provides a functional, simplified layer over - the Format module of the standard library. +type category = + | EndOfLine + | SingleLine + | Regular - Input data must be first modelled as a tree using 3 kinds of nodes: - - atoms - - lists - - labelled nodes +let string_of_category = function + | Regular -> "Regular" + | EndOfLine -> "End of Line" + | SingleLine -> "SingleLine" - Atoms represent any text that is guaranteed to be printed as-is. - Lists can model any sequence of items such as arrays of data - or lists of definitions that are labelled with something - like "int main", "let x =" or "x:". -*) +type t = { + location: Location.t; + category: category; + text: string; +} -type wrap = - [ `Wrap_atoms - | `Always_wrap - | `Never_wrap - | `Force_breaks - | `Force_breaks_rec - | `No_breaks ] -(** List wrapping conditions: - - [`Wrap_atoms]: wrap if the list contains only atoms - - [`Always_wrap]: always wrap when needed - - [`Never_wrap]: never wrap, - i.e. the list is either horizontal or vertical - - [`Force_breaks]: align vertically, - i.e. always break line between list items and - align the left edge of each item. - - [`Force_breaks_rec]: same as [`Force_breaks] but turns - any wrappable ancestor node's wrap property ([`Wrap_atoms] - or [`Always_wrap]) into [`Force_breaks]. - - [`No_breaks]: align horizontally, - i.e. never break line between list items -*) +let category t = t.category -type label_break = [ - | `Auto - | `Always - | `Always_rec - | `Never -] -(** When to break the line after a [Label]: - - [Auto]: break after the label if there's not enough room - - [Always]: always break after the label - - [Always_rec]: always break after the label and force breaks in all parent - lists and labels, similarly to [`Force_breaks_rec] for lists. - - [Never]: never break after the label -*) +let location t = t.location -type style_name = string +let dump ppf t = + let open Lexing in + Format.fprintf ppf "%d (%d:%d)-%d (%d:%d) -- %s:||%s||" + t.location.loc_start.pos_cnum + t.location.loc_start.pos_lnum + (t.location.loc_start.pos_cnum - t.location.loc_start.pos_bol) + t.location.loc_end.pos_cnum + t.location.loc_end.pos_lnum + (t.location.loc_end.pos_cnum - t.location.loc_end.pos_bol) + (string_of_category t.category) + t.text + +let dump_list ppf list = + List.iter (Format.fprintf ppf "%a\n" dump) list + +let wrap t = + match t.text with + | "" | "*" -> "/***/" + | txt when txt.[0] = '*' && txt.[1] <> '*' -> "/**" ^ txt ^ "*/" + | txt -> "/*" ^ txt ^ "*/" -type style = { - tag_open : string; - tag_close : string -} - (** Pair of opening and closing tags that are inserted around - text after pretty-printing. *) +let is_doc t = + String.length t.text > 0 && t.text.[0] == '*' -type atom_param = { - atom_style : style_name option; (** Default: [None] *) -} +let make ~location category text = + { text; category; location } -val atom : atom_param +end +module Printer_maker += struct +#1 "printer_maker.ml" +open Migrate_parsetree +open Ast_404 +type parse_itype = [ `ML | `Reason | `Binary | `BinaryReason | `Auto ] +type print_itype = [ `ML | `Reason | `Binary | `BinaryReason | `AST | `None ] -(** List-formatting parameters. - Always derive a new set of parameters from an existing record. - See {!Easy_format.list}. -*) -type list_param = { - space_after_opening : bool; (** Whether there must be some whitespace - after the opening string. - Default: [true] *) - space_after_separator : bool; (** Whether there must be some whitespace - after the item separators. - Default: [true] *) - space_before_separator : bool; (** Whether there must be some whitespace - before the item separators. - Default: [false] *) - separators_stick_left : bool; (** Whether the separators must - stick to the item on the left. - Default: [true] *) - space_before_closing : bool; (** Whether there must be some whitespace - before the closing string. - Default: [true] *) - stick_to_label : bool; (** Whether the opening string should be fused - with the preceding label. - Default: [true] *) - align_closing : bool; (** Whether the beginning of the - closing string must be aligned - with the beginning of the opening string - (stick_to_label = false) or - with the beginning of the label if any - (stick_to_label = true). - Default: [true] *) - wrap_body : wrap; (** Defines under which conditions the list body - may be wrapped, i.e. allow several lines - and several list items per line. - Default: [`Wrap_atoms] *) - indent_body : int; (** Extra indentation of the list body. - Default: [2] *) +exception Invalid_config of string - list_style : style_name option; (** Default: [None] *) - opening_style : style_name option; (** Default: [None] *) - body_style : style_name option; (** Default: [None] *) - separator_style : style_name option; (** Default: [None] *) - closing_style : style_name option; (** Default: [None] *) -} +module type PRINTER = + sig + type t -val list : list_param - (** Default list-formatting parameters, using the default values - described in the type definition above. + val parse : use_stdin:bool -> + parse_itype -> + string -> + ((t * Reason_comment.t list) * bool) - In order to make code compatible with future versions of the library, - the record inheritance syntax should be used, e.g. - [ { list with align_closing = false } ]. - If new record fields are added, the program would still compile - and work as before. - *) -(** Label-formatting parameters. - Always derive a new set of parameters from an existing record. - See {!Easy_format.label}. -*) -type label_param = { - label_break: label_break; - (** Whether to break the line after the label. - Introduced in version 1.2.0. - Default: [`Auto] *) + val print : print_itype -> + string -> + bool -> + out_channel -> + Format.formatter -> + ((t * Reason_comment.t list) -> unit) + end - space_after_label : bool; - (** Whether there must be some whitespace after the label. - Default: [true] *) +let err s = raise (Invalid_config s) - indent_after_label : int; - (** Extra indentation before the item that comes after a label. - Default: [2] - *) +let prepare_output_file = function + | Some name -> open_out_bin name + | None -> set_binary_mode_out stdout true; stdout - label_style : style_name option; - (** Default: [None] *) -} +let close_output_file output_file output_chan = + match output_file with + | Some _ -> close_out output_chan + | None -> () -val label : label_param - (** Default label-formatting parameters, using the default values - described in the type definition above. +let ocamlBinaryParser use_stdin filename = + let chan = + match use_stdin with + | true -> stdin + | false -> + let file_chan = open_in filename in + seek_in file_chan 0; + file_chan + in + match Ast_io.from_channel chan with + | Result.Error err -> assert false + | Result.Ok (_, Ast_io.Impl ((module Version), ast)) -> + let module Convert = Convert(Version)(OCaml_404) in + ((Obj.magic (Convert.copy_structure ast), []), true, false) + | Result.Ok (_, Ast_io.Intf ((module Version), ast)) -> + let module Convert = Convert(Version)(OCaml_404) in + ((Obj.magic (Convert.copy_signature ast), []), true, true) - In order to make code compatible with future versions of the library, - the record inheritance syntax should be used, e.g. - [ { label with indent_after_label = 0 } ]. - If new record fields are added, the program would still compile - and work as before. +let reasonBinaryParser use_stdin filename = + let chan = + match use_stdin with + | true -> stdin + | false -> + let file_chan = open_in filename in + seek_in file_chan 0; + file_chan + in + let (magic_number, filename, ast, comments, parsedAsML, parsedAsInterface) = input_value chan in + ((ast, comments), parsedAsML, parsedAsInterface) + +end +module Reason_config += struct +#1 "reason_config.ml" +(** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. *) + +let recoverable = ref false +let configure ~r = ( + recoverable := r; +) +end +module MenhirLib : sig +#1 "menhirLib.mli" +module General : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -type t = - Atom of string * atom_param (** Plain string normally - without line breaks. *) +(* This module offers general-purpose functions on lists and streams. *) - | List of - ( - string (* opening *) - * string (* separator *) - * string (* closing *) - * list_param - ) - * t list - (** [List ((opening, separator, closing, param), nodes)] *) +(* As of 2017/03/31, this module is DEPRECATED. It might be removed in + the future. *) - | Label of (t * label_param) * t - (** [Label ((label, param), node)]: labelled node. *) +(* --------------------------------------------------------------------------- *) - | Custom of (Format.formatter -> unit) - (** User-defined printing function that allows to use the - Format module directly if necessary. It is responsible - for leaving the formatter in a clean state. *) -(** The type of the tree to be pretty-printed. Each node contains - its own formatting parameters. +(* Lists. *) - Detail of a list node - [List ((opening, separator, closing, param), nodes)]: +(* [take n xs] returns the [n] first elements of the list [xs]. It is + acceptable for the list [xs] to have length less than [n], in + which case [xs] itself is returned. *) - - [opening]: opening string such as ["\{"] ["\["] ["("] ["begin"] [""] etc. - - [separator]: node separator such as [";"] [","] [""] ["+"] ["|"] etc. - - [closing]: closing string such as ["\}"] ["\]"] [")"] ["end"] [""] etc. - - [nodes]: elements of the list. +val take: int -> 'a list -> 'a list -*) +(* [drop n xs] returns the list [xs], deprived of its [n] first elements. + It is acceptable for the list [xs] to have length less than [n], in + which case an empty list is returned. *) -type escape = - [ `None - | `Escape of - ((string -> int -> int -> unit) -> string -> int -> int -> unit) - | `Escape_string of (string -> string) ] +val drop: int -> 'a list -> 'a list -type styles = (style_name * style) list +(* [uniq cmp xs] assumes that the list [xs] is sorted according to the + ordering [cmp] and returns the list [xs] deprived of any duplicate + elements. *) -(** The regular pretty-printing functions *) -module Pretty : -sig - val define_styles : Format.formatter -> escape -> styles -> unit - val to_formatter : Format.formatter -> t -> unit +val uniq: ('a -> 'a -> int) -> 'a list -> 'a list - val to_buffer : ?escape:escape -> ?styles:styles -> Buffer.t -> t -> unit - val to_string : ?escape:escape -> ?styles:styles -> t -> string - val to_channel : ?escape:escape -> ?styles:styles -> out_channel -> t -> unit - val to_stdout : ?escape:escape -> ?styles:styles -> t -> unit - val to_stderr : ?escape:escape -> ?styles:styles -> t -> unit -end +(* [weed cmp xs] returns the list [xs] deprived of any duplicate elements. *) -(** No spacing or newlines other than those in the input data - or those produced by [Custom] printing. *) -module Compact : -sig - val to_buffer : Buffer.t -> t -> unit - val to_string : t -> string - val to_channel : out_channel -> t -> unit - val to_stdout : t -> unit - val to_stderr : t -> unit - val to_formatter : Format.formatter -> t -> unit - end +val weed: ('a -> 'a -> int) -> 'a list -> 'a list +(* --------------------------------------------------------------------------- *) -(**/**) +(* A stream is a list whose elements are produced on demand. *) -(** Deprecated. Predefined sets of parameters *) -module Param : -sig - val list_true : list_param - (** Deprecated. All boolean fields set to true. indent_body = 2. *) +type 'a stream = + 'a head Lazy.t - val label_true : label_param - (** Deprecated. All boolean fields set to true. indent_after_label = 2. *) +and 'a head = + | Nil + | Cons of 'a * 'a stream - val list_false : list_param - (** Deprecated. All boolean fields set to false. indent_body = 2. *) +(* The length of a stream. *) - val label_false : label_param - (** Deprecated. All boolean fields set to false. indent_after_label = 2. *) +val length: 'a stream -> int + +(* Folding over a stream. *) + +val foldr: ('a -> 'b -> 'b) -> 'a stream -> 'b -> 'b end +module Convert : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) +(* An ocamlyacc-style, or Menhir-style, parser requires access to + the lexer, which must be parameterized with a lexing buffer, and + to the lexing buffer itself, where it reads position information. *) -end = struct -#1 "easy_format.ml" -open Format +(* This traditional API is convenient when used with ocamllex, but + inelegant when used with other lexer generators. *) -type wrap = [ - | `Wrap_atoms - | `Always_wrap - | `Never_wrap - | `Force_breaks - | `Force_breaks_rec - | `No_breaks -] +type ('token, 'semantic_value) traditional = + (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value -type label_break = [ - | `Auto - | `Always - | `Always_rec - | `Never -] +(* This revised API is independent of any lexer generator. Here, the + parser only requires access to the lexer, and the lexer takes no + parameters. The tokens returned by the lexer may contain position + information. *) -type style_name = string -type style = { - tag_open : string; - tag_close : string -} +type ('token, 'semantic_value) revised = + (unit -> 'token) -> 'semantic_value -type atom_param = { - atom_style : style_name option; -} +(* --------------------------------------------------------------------------- *) -let atom = { - atom_style = None -} +(* Converting a traditional parser, produced by ocamlyacc or Menhir, + into a revised parser. *) -type list_param = { - space_after_opening : bool; - space_after_separator : bool; - space_before_separator : bool; - separators_stick_left : bool; - space_before_closing : bool; - stick_to_label : bool; - align_closing : bool; - wrap_body : wrap; - indent_body : int; - list_style : style_name option; - opening_style : style_name option; - body_style : style_name option; - separator_style : style_name option; - closing_style : style_name option; -} +(* A token of the revised lexer is essentially a triple of a token + of the traditional lexer (or raw token), a start position, and + and end position. The three [get] functions are accessors. *) -let list = { - space_after_opening = true; - space_after_separator = true; - space_before_separator = false; - separators_stick_left = true; - space_before_closing = true; - stick_to_label = true; - align_closing = true; - wrap_body = `Wrap_atoms; - indent_body = 2; - list_style = None; - opening_style = None; - body_style = None; - separator_style = None; - closing_style = None; -} +(* We do not require the type ['token] to actually be a triple type. + This enables complex applications where it is a record type with + more than three fields. It also enables simple applications where + positions are of no interest, so ['token] is just ['raw_token] + and [get_startp] and [get_endp] return dummy positions. *) -type label_param = { - label_break: label_break; - space_after_label : bool; - indent_after_label : int; - label_style : style_name option; -} +val traditional2revised: + ('token -> 'raw_token) -> + ('token -> Lexing.position) -> + ('token -> Lexing.position) -> + ('raw_token, 'semantic_value) traditional -> + ('token, 'semantic_value) revised -let label = { - label_break = `Auto; - space_after_label = true; - indent_after_label = 2; - label_style = None; -} +(* --------------------------------------------------------------------------- *) -type t = - Atom of string * atom_param - | List of (string * string * string * list_param) * t list - | Label of (t * label_param) * t - | Custom of (formatter -> unit) +(* Converting a revised parser back to a traditional parser. *) -type escape = - [ `None - | `Escape of - ((string -> int -> int -> unit) -> string -> int -> int -> unit) - | `Escape_string of (string -> string) ] +val revised2traditional: + ('raw_token -> Lexing.position -> Lexing.position -> 'token) -> + ('token, 'semantic_value) revised -> + ('raw_token, 'semantic_value) traditional -type styles = (style_name * style) list +(* --------------------------------------------------------------------------- *) -(* - Transform a tree starting from the leaves, propagating and merging - accumulators until reaching the root. -*) -let propagate_from_leaf_to_root - ~init_acc (* create initial accumulator for a leaf *) - ~merge_acc (* merge two accumulators coming from child nodes *) - ~map_node (* (node, acc) -> (node, acc) *) - x = +(* Simplified versions of the above, where concrete triples are used. *) - let rec aux x = - match x with - | Atom _ -> - let acc = init_acc x in - map_node x acc - | List (param, children) -> - let new_children, accs = List.split (List.map aux children) in - let acc = List.fold_left merge_acc (init_acc x) accs in - map_node (List (param, new_children)) acc - | Label ((x1, param), x2) -> - let acc0 = init_acc x in - let new_x1, acc1 = aux x1 in - let new_x2, acc2 = aux x2 in - let acc = merge_acc (merge_acc acc0 acc1) acc2 in - map_node (Label ((new_x1, param), new_x2)) acc - | Custom _ -> - let acc = init_acc x in - map_node x acc - in - aux x +module Simplified : sig -(* - Convert wrappable lists into vertical lists if any of their descendants - has the attribute wrap_body = `Force_breaks_rec. -*) -let propagate_forced_breaks x = - (* acc = whether to force breaks in wrappable lists or labels *) - let init_acc = function - | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _) - | Label ((_, { label_break = `Always_rec }), _) -> true - | Atom _ - | Label _ - | Custom _ - | List _ -> false - in - let merge_acc force_breaks1 force_breaks2 = - force_breaks1 || force_breaks2 - in - let map_node x force_breaks = - match x with - | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _) -> x, true - | List ((_, _, _, { wrap_body = `Force_breaks }), _) -> x, force_breaks + val traditional2revised: + ('token, 'semantic_value) traditional -> + ('token * Lexing.position * Lexing.position, 'semantic_value) revised - | List ((op, sep, cl, ({ wrap_body = (`Wrap_atoms - | `Never_wrap - | `Always_wrap) } as p)), - children) -> - if force_breaks then - let p = { p with wrap_body = `Force_breaks } in - List ((op, sep, cl, p), children), true - else - x, false + val revised2traditional: + ('token * Lexing.position * Lexing.position, 'semantic_value) revised -> + ('token, 'semantic_value) traditional - | Label ((a, ({ label_break = `Auto } as lp)), b) -> - if force_breaks then - let lp = { lp with label_break = `Always } in - Label ((a, lp), b), true - else - x, false +end +end +module IncrementalEngine : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - | List ((_, _, _, { wrap_body = `No_breaks }), _) - | Label ((_, { label_break = (`Always | `Always_rec | `Never) }), _) - | Atom _ - | Custom _ -> x, force_breaks - in - let new_x, forced_breaks = - propagate_from_leaf_to_root - ~init_acc - ~merge_acc - ~map_node - x - in - new_x +type position = Lexing.position -module Pretty = -struct - (* - Rewrite the tree to be printed. - Currently, this is used only to handle `Force_breaks_rec. - *) - let rewrite x = propagate_forced_breaks x +open General - (* - Relies on the fact that mark_open_tag and mark_close_tag - are called exactly once before calling pp_output_string once. - It's a reasonable assumption although not guaranteed by the - documentation of the Format module. - *) - let set_escape fmt escape = - let print0, flush0 = pp_get_formatter_output_functions fmt () in - let tagf0 = pp_get_formatter_tag_functions fmt () in +(* This signature describes the incremental LR engine. *) - let is_tag = ref false in +(* In this mode, the user controls the lexer, and the parser suspends + itself when it needs to read a new token. *) - let mot tag = - is_tag := true; - tagf0.mark_open_tag tag - in +module type INCREMENTAL_ENGINE = sig - let mct tag = - is_tag := true; - tagf0.mark_close_tag tag - in + type token - let print s p n = - if !is_tag then - (print0 s p n; - is_tag := false) - else - escape print0 s p n - in + (* A value of type [production] is (an index for) a production. The start + productions (which do not exist in an \mly file, but are constructed by + Menhir internally) are not part of this type. *) - let tagf = { - tagf0 with - mark_open_tag = mot; - mark_close_tag = mct - } - in - pp_set_formatter_output_functions fmt print flush0; - pp_set_formatter_tag_functions fmt tagf + type production + (* The type ['a checkpoint] represents an intermediate or final state of the + parser. An intermediate checkpoint is a suspension: it records the parser's + current state, and allows parsing to be resumed. The parameter ['a] is + the type of the semantic value that will eventually be produced if the + parser succeeds. *) - let set_escape_string fmt esc = - let escape print s p n = - let s0 = String.sub s p n in - let s1 = esc s0 in - print s1 0 (String.length s1) - in - set_escape fmt escape + (* [Accepted] and [Rejected] are final checkpoints. [Accepted] carries a + semantic value. *) + (* [InputNeeded] is an intermediate checkpoint. It means that the parser wishes + to read one token before continuing. *) - let define_styles fmt escape l = - if l <> [] then ( - pp_set_tags fmt true; - let tbl1 = Hashtbl.create (2 * List.length l) in - let tbl2 = Hashtbl.create (2 * List.length l) in - List.iter ( - fun (style_name, style) -> - Hashtbl.add tbl1 style_name style.tag_open; - Hashtbl.add tbl2 style_name style.tag_close - ) l; - let mark_open_tag style_name = - try Hashtbl.find tbl1 style_name - with Not_found -> "" - in - let mark_close_tag style_name = - try Hashtbl.find tbl2 style_name - with Not_found -> "" - in + (* [Shifting] is an intermediate checkpoint. It means that the parser is taking + a shift transition. It exposes the state of the parser before and after + the transition. The Boolean parameter tells whether the parser intends to + request a new token after this transition. (It always does, except when + it is about to accept.) *) - let tagf = { - (pp_get_formatter_tag_functions fmt ()) with - mark_open_tag = mark_open_tag; - mark_close_tag = mark_close_tag - } - in - pp_set_formatter_tag_functions fmt tagf - ); + (* [AboutToReduce] is an intermediate checkpoint. It means that the parser is + about to perform a reduction step. It exposes the parser's current + state as well as the production that is about to be reduced. *) - (match escape with - `None -> () - | `Escape esc -> set_escape fmt esc - | `Escape_string esc -> set_escape_string fmt esc) + (* [HandlingError] is an intermediate checkpoint. It means that the parser has + detected an error and is currently handling it, in several steps. *) + (* A value of type ['a env] represents a configuration of the automaton: + current state, stack, lookahead token, etc. The parameter ['a] is the + type of the semantic value that will eventually be produced if the parser + succeeds. *) - let pp_open_xbox fmt p indent = - match p.wrap_body with - `Always_wrap - | `Never_wrap - | `Wrap_atoms -> pp_open_hvbox fmt indent - | `Force_breaks - | `Force_breaks_rec -> pp_open_vbox fmt indent - | `No_breaks -> pp_open_hbox fmt () + (* In normal operation, the parser works with checkpoints: see the functions + [offer] and [resume]. However, it is also possible to work directly with + environments (see the functions [pop], [force_reduction], and [feed]) and + to reconstruct a checkpoint out of an environment (see [input_needed]). + This is considered advanced functionality; its purpose is to allow error + recovery strategies to be programmed by the user. *) - let extra_box p l = - let wrap = - match p.wrap_body with - `Always_wrap -> true - | `Never_wrap - | `Force_breaks - | `Force_breaks_rec - | `No_breaks -> false - | `Wrap_atoms -> - List.for_all (function Atom _ -> true | _ -> false) l - in - if wrap then - ((fun fmt -> pp_open_hovbox fmt 0), - (fun fmt -> pp_close_box fmt ())) - else - ((fun fmt -> ()), - (fun fmt -> ())) + type 'a env + type 'a checkpoint = private + | InputNeeded of 'a env + | Shifting of 'a env * 'a env * bool + | AboutToReduce of 'a env * production + | HandlingError of 'a env + | Accepted of 'a + | Rejected - let pp_open_nonaligned_box fmt p indent l = - match p.wrap_body with - `Always_wrap -> pp_open_hovbox fmt indent - | `Never_wrap -> pp_open_hvbox fmt indent - | `Wrap_atoms -> - if List.for_all (function Atom _ -> true | _ -> false) l then - pp_open_hovbox fmt indent - else - pp_open_hvbox fmt indent - | `Force_breaks - | `Force_breaks_rec -> pp_open_vbox fmt indent - | `No_breaks -> pp_open_hbox fmt () + (* [offer] allows the user to resume the parser after it has suspended + itself with a checkpoint of the form [InputNeeded env]. [offer] expects the + old checkpoint as well as a new token and produces a new checkpoint. It does not + raise any exception. *) + val offer: + 'a checkpoint -> + token * position * position -> + 'a checkpoint - let open_tag fmt = function - None -> () - | Some s -> pp_open_tag fmt s + (* [resume] allows the user to resume the parser after it has suspended + itself with a checkpoint of the form [AboutToReduce (env, prod)] or + [HandlingError env]. [resume] expects the old checkpoint and produces a new + checkpoint. It does not raise any exception. *) - let close_tag fmt = function - None -> () - | Some _ -> pp_close_tag fmt () + val resume: + 'a checkpoint -> + 'a checkpoint - let tag_string fmt o s = - match o with - None -> pp_print_string fmt s - | Some tag -> - pp_open_tag fmt tag; - pp_print_string fmt s; - pp_close_tag fmt () + (* A token supplier is a function of no arguments which delivers a new token + (together with its start and end positions) every time it is called. *) - let rec fprint_t fmt = function - Atom (s, p) -> - tag_string fmt p.atom_style s; + type supplier = + unit -> token * position * position - | List ((_, _, _, p) as param, l) -> - open_tag fmt p.list_style; - if p.align_closing then - fprint_list fmt None param l - else - fprint_list2 fmt param l; - close_tag fmt p.list_style + (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) - | Label (label, x) -> fprint_pair fmt label x - | Custom f -> f fmt + val lexer_lexbuf_to_supplier: + (Lexing.lexbuf -> token) -> + Lexing.lexbuf -> + supplier - and fprint_list_body_stick_left fmt p sep hd tl = - open_tag fmt p.body_style; - fprint_t fmt hd; - List.iter ( - fun x -> - if p.space_before_separator then - pp_print_string fmt " "; - tag_string fmt p.separator_style sep; - if p.space_after_separator then - pp_print_space fmt () - else - pp_print_cut fmt (); - fprint_t fmt x - ) tl; - close_tag fmt p.body_style + (* The functions [offer] and [resume] are sufficient to write a parser loop. + One can imagine many variations (which is why we expose these functions + in the first place!). Here, we expose a few variations of the main loop, + ready for use. *) - and fprint_list_body_stick_right fmt p sep hd tl = - open_tag fmt p.body_style; - fprint_t fmt hd; - List.iter ( - fun x -> - if p.space_before_separator then - pp_print_space fmt () - else - pp_print_cut fmt (); - tag_string fmt p.separator_style sep; - if p.space_after_separator then - pp_print_string fmt " "; - fprint_t fmt x - ) tl; - close_tag fmt p.body_style + (* [loop supplier checkpoint] begins parsing from [checkpoint], reading + tokens from [supplier]. It continues parsing until it reaches a + checkpoint of the form [Accepted v] or [Rejected]. In the former case, it + returns [v]. In the latter case, it raises the exception [Error]. *) - and fprint_opt_label fmt = function - None -> () - | Some (lab, lp) -> - open_tag fmt lp.label_style; - fprint_t fmt lab; - close_tag fmt lp.label_style; - if lp.space_after_label then - pp_print_string fmt " " + val loop: supplier -> 'a checkpoint -> 'a - (* Either horizontal or vertical list *) - and fprint_list fmt label ((op, sep, cl, p) as param) = function - [] -> - fprint_opt_label fmt label; - tag_string fmt p.opening_style op; - if p.space_after_opening || p.space_before_closing then - pp_print_string fmt " "; - tag_string fmt p.closing_style cl + (* [loop_handle succeed fail supplier checkpoint] begins parsing from + [checkpoint], reading tokens from [supplier]. It continues parsing until + it reaches a checkpoint of the form [Accepted v] or [HandlingError env] + (or [Rejected], but that should not happen, as [HandlingError _] will be + observed first). In the former case, it calls [succeed v]. In the latter + case, it calls [fail] with this checkpoint. It cannot raise [Error]. - | hd :: tl as l -> + This means that Menhir's traditional error-handling procedure (which pops + the stack until a state that can act on the [error] token is found) does + not get a chance to run. Instead, the user can implement her own error + handling code, in the [fail] continuation. *) - if tl = [] || p.separators_stick_left then - fprint_list_stick_left fmt label param hd tl l - else - fprint_list_stick_right fmt label param hd tl l + val loop_handle: + ('a -> 'answer) -> + ('a checkpoint -> 'answer) -> + supplier -> 'a checkpoint -> 'answer + (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair + of checkpoints to the failure continuation. - and fprint_list_stick_left fmt label (op, sep, cl, p) hd tl l = - let indent = p.indent_body in - pp_open_xbox fmt p indent; - fprint_opt_label fmt label; + The first (and oldest) checkpoint is the last [InputNeeded] checkpoint that + was encountered before the error was detected. The second (and newest) + checkpoint is where the error was detected, as in [loop_handle]. Going back + to the first checkpoint can be thought of as undoing any reductions that + were performed after seeing the problematic token. (These reductions must + be default reductions or spurious reductions.) - tag_string fmt p.opening_style op; + [loop_handle_undo] must initially be applied to an [InputNeeded] checkpoint. + The parser's initial checkpoints satisfy this constraint. *) - if p.space_after_opening then - pp_print_space fmt () - else - pp_print_cut fmt (); + val loop_handle_undo: + ('a -> 'answer) -> + ('a checkpoint -> 'a checkpoint -> 'answer) -> + supplier -> 'a checkpoint -> 'answer - let open_extra, close_extra = extra_box p l in - open_extra fmt; - fprint_list_body_stick_left fmt p sep hd tl; - close_extra fmt; + (* [shifts checkpoint] assumes that [checkpoint] has been obtained by + submitting a token to the parser. It runs the parser from [checkpoint], + through an arbitrary number of reductions, until the parser either + accepts this token (i.e., shifts) or rejects it (i.e., signals an error). + If the parser decides to shift, then [Some env] is returned, where [env] + is the parser's state just before shifting. Otherwise, [None] is + returned. *) - if p.space_before_closing then - pp_print_break fmt 1 (-indent) - else - pp_print_break fmt 0 (-indent); - tag_string fmt p.closing_style cl; - pp_close_box fmt () + (* It is desirable that the semantic actions be side-effect free, or that + their side-effects be harmless (replayable). *) - and fprint_list_stick_right fmt label (op, sep, cl, p) hd tl l = - let base_indent = p.indent_body in - let sep_indent = - String.length sep + (if p.space_after_separator then 1 else 0) - in - let indent = base_indent + sep_indent in + val shifts: 'a checkpoint -> 'a env option - pp_open_xbox fmt p indent; - fprint_opt_label fmt label; + (* The function [acceptable] allows testing, after an error has been + detected, which tokens would have been accepted at this point. It is + implemented using [shifts]. Its argument should be an [InputNeeded] + checkpoint. *) - tag_string fmt p.opening_style op; + (* For completeness, one must undo any spurious reductions before carrying out + this test -- that is, one must apply [acceptable] to the FIRST checkpoint + that is passed by [loop_handle_undo] to its failure continuation. *) - if p.space_after_opening then - pp_print_space fmt () - else - pp_print_cut fmt (); + (* This test causes some semantic actions to be run! The semantic actions + should be side-effect free, or their side-effects should be harmless. *) - let open_extra, close_extra = extra_box p l in - open_extra fmt; + (* The position [pos] is used as the start and end positions of the + hypothetical token, and may be picked up by the semantic actions. We + suggest using the position where the error was detected. *) - fprint_t fmt hd; - List.iter ( - fun x -> - if p.space_before_separator then - pp_print_break fmt 1 (-sep_indent) - else - pp_print_break fmt 0 (-sep_indent); - tag_string fmt p.separator_style sep; - if p.space_after_separator then - pp_print_string fmt " "; - fprint_t fmt x - ) tl; + val acceptable: 'a checkpoint -> token -> position -> bool - close_extra fmt; + (* The abstract type ['a lr1state] describes the non-initial states of the + LR(1) automaton. The index ['a] represents the type of the semantic value + associated with this state's incoming symbol. *) - if p.space_before_closing then - pp_print_break fmt 1 (-indent) - else - pp_print_break fmt 0 (-indent); - tag_string fmt p.closing_style cl; - pp_close_box fmt () + type 'a lr1state + (* The states of the LR(1) automaton are numbered (from 0 and up). *) + val number: _ lr1state -> int - (* align_closing = false *) - and fprint_list2 fmt (op, sep, cl, p) = function - [] -> - tag_string fmt p.opening_style op; - if p.space_after_opening || p.space_before_closing then - pp_print_string fmt " "; - tag_string fmt p.closing_style cl + (* Productions are numbered. *) - | hd :: tl as l -> - tag_string fmt p.opening_style op; - if p.space_after_opening then - pp_print_string fmt " "; + (* [find_production i] requires the index [i] to be valid. Use with care. *) - pp_open_nonaligned_box fmt p 0 l ; - if p.separators_stick_left then - fprint_list_body_stick_left fmt p sep hd tl - else - fprint_list_body_stick_right fmt p sep hd tl; - pp_close_box fmt (); + val production_index: production -> int + val find_production: int -> production - if p.space_before_closing then - pp_print_string fmt " "; - tag_string fmt p.closing_style cl + (* An element is a pair of a non-initial state [s] and a semantic value [v] + associated with the incoming symbol of this state. The idea is, the value + [v] was pushed onto the stack just before the state [s] was entered. Thus, + for some type ['a], the state [s] has type ['a lr1state] and the value [v] + has type ['a]. In other words, the type [element] is an existential type. *) + type element = + | Element: 'a lr1state * 'a * position * position -> element - (* Printing a label:value pair. + (* The parser's stack is (or, more precisely, can be viewed as) a stream of + elements. The type [stream] is defined by the module [General]. *) - The opening bracket stays on the same line as the key, no matter what, - and the closing bracket is either on the same line - or vertically aligned with the beginning of the key. - *) - and fprint_pair fmt ((lab, lp) as label) x = - match x with - List ((op, sep, cl, p), l) when p.stick_to_label && p.align_closing -> - fprint_list fmt (Some label) (op, sep, cl, p) l + (* As of 2017/03/31, the types [stream] and [stack] and the function [stack] + are DEPRECATED. They might be removed in the future. An alternative way + of inspecting the stack is via the functions [top] and [pop]. *) - | _ -> - let indent = lp.indent_after_label in - pp_open_hvbox fmt 0; + type stack = (* DEPRECATED *) + element stream - open_tag fmt lp.label_style; - fprint_t fmt lab; - close_tag fmt lp.label_style; + (* This is the parser's stack, a stream of elements. This stream is empty if + the parser is in an initial state; otherwise, it is non-empty. The LR(1) + automaton's current state is the one found in the top element of the + stack. *) - (match lp.label_break with - | `Auto -> - if lp.space_after_label then - pp_print_break fmt 1 indent - else - pp_print_break fmt 0 indent - | `Always - | `Always_rec -> - pp_force_newline fmt (); - pp_print_string fmt (String.make indent ' ') - | `Never -> - if lp.space_after_label then - pp_print_char fmt ' ' - else - () - ); - fprint_t fmt x; - pp_close_box fmt () + val stack: 'a env -> stack (* DEPRECATED *) - let to_formatter fmt x = - let x = rewrite x in - fprint_t fmt x; - pp_print_flush fmt () + (* [top env] returns the parser's top stack element. The state contained in + this stack element is the current state of the automaton. If the stack is + empty, [None] is returned. In that case, the current state of the + automaton must be an initial state. *) - let to_buffer ?(escape = `None) ?(styles = []) buf x = - let fmt = Format.formatter_of_buffer buf in - define_styles fmt escape styles; - to_formatter fmt x + val top: 'a env -> element option - let to_string ?escape ?styles x = - let buf = Buffer.create 500 in - to_buffer ?escape ?styles buf x; - Buffer.contents buf + (* [pop_many i env] pops [i] cells off the automaton's stack. This is done + via [i] successive invocations of [pop]. Thus, [pop_many 1] is [pop]. The + index [i] must be nonnegative. The time complexity is O(i). *) - let to_channel ?(escape = `None) ?(styles = []) oc x = - let fmt = formatter_of_out_channel oc in - define_styles fmt escape styles; - to_formatter fmt x + val pop_many: int -> 'a env -> 'a env option - let to_stdout ?escape ?styles x = to_channel ?escape ?styles stdout x - let to_stderr ?escape ?styles x = to_channel ?escape ?styles stderr x + (* [get i env] returns the parser's [i]-th stack element. The index [i] is + 0-based: thus, [get 0] is [top]. If [i] is greater than or equal to the + number of elements in the stack, [None] is returned. The time complexity + is O(i). *) -end + val get: int -> 'a env -> element option + (* [current_state_number env] is (the integer number of) the automaton's + current state. This works even if the automaton's stack is empty, in + which case the current state is an initial state. This number can be + passed as an argument to a [message] function generated by [menhir + --compile-errors]. *) + val current_state_number: 'a env -> int + (* [equal env1 env2] tells whether the parser configurations [env1] and + [env2] are equal in the sense that the automaton's current state is the + same in [env1] and [env2] and the stack is *physically* the same in + [env1] and [env2]. If [equal env1 env2] is [true], then the sequence of + the stack elements, as observed via [pop] and [top], must be the same in + [env1] and [env2]. Also, if [equal env1 env2] holds, then the checkpoints + [input_needed env1] and [input_needed env2] must be equivalent. The + function [equal] has time complexity O(1). *) -module Compact = -struct - open Printf + val equal: 'a env -> 'a env -> bool - let rec fprint_t buf = function - Atom (s, _) -> Buffer.add_string buf s - | List (param, l) -> fprint_list buf param l - | Label (label, x) -> fprint_pair buf label x - | Custom f -> - (* Will most likely not be compact *) - let fmt = formatter_of_buffer buf in - f fmt; - pp_print_flush fmt () + (* These are the start and end positions of the current lookahead token. If + invoked in an initial state, this function returns a pair of twice the + initial position. *) - and fprint_list buf (op, sep, cl, _) = function - [] -> bprintf buf "%s%s" op cl - | x :: tl -> - Buffer.add_string buf op; - fprint_t buf x; - List.iter ( - fun x -> - Buffer.add_string buf sep; - fprint_t buf x - ) tl; - Buffer.add_string buf cl + val positions: 'a env -> position * position - and fprint_pair buf (label, _) x = - fprint_t buf label; - fprint_t buf x + (* When applied to an environment taken from a checkpoint of the form + [AboutToReduce (env, prod)], the function [env_has_default_reduction] + tells whether the reduction that is about to take place is a default + reduction. *) + val env_has_default_reduction: 'a env -> bool - let to_buffer buf x = fprint_t buf x + (* [state_has_default_reduction s] tells whether the state [s] has a default + reduction. This includes the case where [s] is an accepting state. *) - let to_string x = - let buf = Buffer.create 500 in - to_buffer buf x; - Buffer.contents buf + val state_has_default_reduction: _ lr1state -> bool - let to_formatter fmt x = - let s = to_string x in - Format.fprintf fmt "%s" s; - pp_print_flush fmt () + (* [pop env] returns a new environment, where the parser's top stack cell + has been popped off. (If the stack is empty, [None] is returned.) This + amounts to pretending that the (terminal or nonterminal) symbol that + corresponds to this stack cell has not been read. *) - let to_channel oc x = - let buf = Buffer.create 500 in - to_buffer buf x; - Buffer.output_buffer oc buf + val pop: 'a env -> 'a env option + + (* [force_reduction prod env] should be called only if in the state [env] + the parser is capable of reducing the production [prod]. If this + condition is satisfied, then this production is reduced, which means that + its semantic action is executed (this can have side effects!) and the + automaton makes a goto (nonterminal) transition. If this condition is not + satisfied, [Invalid_argument _] is raised. *) + + val force_reduction: production -> 'a env -> 'a env + + (* [input_needed env] returns [InputNeeded env]. That is, out of an [env] + that might have been obtained via a series of calls to the functions + [pop], [force_reduction], [feed], etc., it produces a checkpoint, which + can be used to resume normal parsing, by supplying this checkpoint as an + argument to [offer]. *) + + (* This function should be used with some care. It could "mess up the + lookahead" in the sense that it allows parsing to resume in an arbitrary + state [s] with an arbitrary lookahead symbol [t], even though Menhir's + reachability analysis (menhir --list-errors) might well think that it is + impossible to reach this particular configuration. If one is using + Menhir's new error reporting facility, this could cause the parser to + reach an error state for which no error message has been prepared. *) + + val input_needed: 'a env -> 'a checkpoint - let to_stdout x = to_channel stdout x - let to_stderr x = to_channel stderr x end +(* This signature is a fragment of the inspection API that is made available + to the user when [--inspection] is used. This fragment contains type + definitions for symbols. *) +module type SYMBOLS = sig + (* The type ['a terminal] represents a terminal symbol. The type ['a + nonterminal] represents a nonterminal symbol. In both cases, the index + ['a] represents the type of the semantic values associated with this + symbol. The concrete definitions of these types are generated. *) -(* Obsolete *) -module Param = -struct - let list_true = { - space_after_opening = true; - space_after_separator = true; - space_before_separator = true; - separators_stick_left = true; - space_before_closing = true; - stick_to_label = true; - align_closing = true; - wrap_body = `Wrap_atoms; - indent_body = 2; - list_style = None; - opening_style = None; - body_style = None; - separator_style = None; - closing_style = None; - } + type 'a terminal + type 'a nonterminal - let list_false = { - space_after_opening = false; - space_after_separator = false; - space_before_separator = false; - separators_stick_left = false; - space_before_closing = false; - stick_to_label = false; - align_closing = false; - wrap_body = `Wrap_atoms; - indent_body = 2; - list_style = None; - opening_style = None; - body_style = None; - separator_style = None; - closing_style = None; - } + (* The type ['a symbol] represents a terminal or nonterminal symbol. It is + the disjoint union of the types ['a terminal] and ['a nonterminal]. *) - let label_true = { - label_break = `Auto; - space_after_label = true; - indent_after_label = 2; - label_style = None; - } + type 'a symbol = + | T : 'a terminal -> 'a symbol + | N : 'a nonterminal -> 'a symbol - let label_false = { - label_break = `Auto; - space_after_label = false; - indent_after_label = 2; - label_style = None; - } -end + (* The type [xsymbol] is an existentially quantified version of the type + ['a symbol]. This type is useful in situations where the index ['a] + is not statically known. *) + + type xsymbol = + | X : 'a symbol -> xsymbol end -module Syntax_util -= struct -#1 "syntax_util.ml" -open Ast_404 -open Asttypes -open Ast_mapper -open Parsetree -open Longident +(* This signature describes the inspection API that is made available to the + user when [--inspection] is used. *) +module type INSPECTION = sig -(** [is_prefixed prefix i str] checks if prefix is the prefix of str - * starting from position i - *) -let is_prefixed prefix str i = - let len = String.length prefix in - let j = ref 0 in - while !j < len && String.unsafe_get prefix !j = - String.unsafe_get str (i + !j) do - incr j - done; - (!j = len) + (* The types of symbols are described above. *) -(** - * pick_while returns a tuple where first element is longest prefix (possibly empty) of the list of elements that satisfy p - * and second element is the remainder of the list - *) -let rec pick_while p = function - | [] -> [], [] - | hd::tl when p hd -> - let (satisfied, not_satisfied) = pick_while p tl in - hd :: satisfied, not_satisfied - | l -> ([], l) + include SYMBOLS + (* The type ['a lr1state] is meant to be the same as in [INCREMENTAL_ENGINE]. *) -(** [find_substring sub str i] - returns the smallest [j >= i] such that [sub = str.[j..length sub - 1]] - raises [Not_found] if there is no such j - behavior is not defined if [sub] is the empty string -*) -let find_substring sub str i = - let len = String.length str - String.length sub in - let found = ref false and i = ref i in - while not !found && !i <= len do - if is_prefixed sub str !i then - found := true - else - incr i; - done; - if not !found then - raise Not_found; - !i + type 'a lr1state -(** [replace_string old_str new_str str] replaces old_str to new_str in str *) -let replace_string old_str new_str str = - match find_substring old_str str 0 with - | exception Not_found -> str - | occurrence -> - let buffer = Buffer.create (String.length str + 15) in - let rec loop i j = - Buffer.add_substring buffer str i (j - i); - Buffer.add_string buffer new_str; - let i = j + String.length old_str in - match find_substring old_str str i with - | j -> loop i j - | exception Not_found -> - Buffer.add_substring buffer str i (String.length str - i) - in - loop 0 occurrence; - Buffer.contents buffer + (* The type [production] is meant to be the same as in [INCREMENTAL_ENGINE]. + It represents a production of the grammar. A production can be examined + via the functions [lhs] and [rhs] below. *) -(* This is lifted from https://github.com/bloomberg/bucklescript/blob/14d94bb9c7536b4c5f1208c8e8cc715ca002853d/jscomp/ext/ext_string.ml#L32 - Thanks @bobzhang and @hhugo! *) -let split_by ?(keep_empty=false) is_delim str = - let len = String.length str in - let rec loop acc last_pos pos = - if pos = -1 then - if last_pos = 0 && not keep_empty then - (* - {[ split " test_unsafe_obj_ffi_ppx.cmi" ~keep_empty:false ' ']} - *) - acc - else - String.sub str 0 last_pos :: acc - else - if is_delim str.[pos] then - let new_len = (last_pos - pos - 1) in - if new_len <> 0 || keep_empty then - let v = String.sub str (pos + 1) new_len in - loop ( v :: acc) - pos (pos - 1) - else loop acc pos (pos - 1) - else loop acc last_pos (pos - 1) - in - loop [] len (len - 1) + type production -let rec trim_right_idx str idx = - if idx = -1 then 0 - else - match String.get str idx with - | '\t' | ' ' | '\n' | '\r' -> trim_right_idx str (idx - 1) - | _ -> idx + 1 + (* An LR(0) item is a pair of a production [prod] and a valid index [i] into + this production. That is, if the length of [rhs prod] is [n], then [i] is + comprised between 0 and [n], inclusive. *) -let trim_right str = - let length = String.length str in - if length = 0 then "" - else - let index = trim_right_idx str (length - 1) in - if index = 0 then "" - else if index = length then str - else String.sub str 0 index + type item = + production * int -let strip_trailing_whitespace str = - split_by ~keep_empty:true (fun x -> x = '\n') str - |> List.map trim_right - |> String.concat "\n" - |> String.trim + (* Ordering functions. *) -module StringMap = Map.Make (String) + val compare_terminals: _ terminal -> _ terminal -> int + val compare_nonterminals: _ nonterminal -> _ nonterminal -> int + val compare_symbols: xsymbol -> xsymbol -> int + val compare_productions: production -> production -> int + val compare_items: item -> item -> int + (* [incoming_symbol s] is the incoming symbol of the state [s], that is, + the symbol that the parser must recognize before (has recognized when) + it enters the state [s]. This function gives access to the semantic + value [v] stored in a stack element [Element (s, v, _, _)]. Indeed, + by case analysis on the symbol [incoming_symbol s], one discovers the + type ['a] of the value [v]. *) -(** Generate a suitable extension node for Merlin's consumption, - for the purposes of reporting a syntax error - only used - in recovery mode. - *) -let syntax_error_extension_node loc message = - let str = Location.mkloc "merlin.syntax-error" loc in - let payload = PStr [{ - pstr_loc = Location.none; - pstr_desc = - Pstr_eval ( - { - pexp_loc = Location.none; - pexp_desc = Pexp_constant (Parsetree.Pconst_string (message, None)); - pexp_attributes = []; - }, - [] - ); - }] - in - (str, payload) + val incoming_symbol: 'a lr1state -> 'a symbol -(** Check to see if the string `s` is made up of `keyword` and zero or more - trailing `_` characters. *) -let potentially_conflicts_with ~keyword s = - let s_length = String.length s in - let keyword_length = String.length keyword in - (* It can't be a match if s is shorter than keyword *) - s_length >= keyword_length && ( - try - (* Ensure s starts with keyword... *) - for i = 0 to keyword_length - 1 do - if keyword.[i] <> s.[i] then raise Exit; - done; - (* ...and contains nothing else except trailing _ characters *) - for i = keyword_length to s_length - 1 do - if s.[i] <> '_' then raise Exit; - done; - (* If we've made it this far there's a potential conflict *) - true - with - | Exit -> false - ) + (* [items s] is the set of the LR(0) items in the LR(0) core of the LR(1) + state [s]. This set is not epsilon-closed. This set is presented as a + list, in an arbitrary order. *) -(** Add/remove an appropriate suffix when mangling potential keywords *) -let string_add_suffix x = x ^ "_" -let string_drop_suffix x = String.sub x 0 (String.length x - 1) + val items: _ lr1state -> item list -(** What do these *_swap functions do? Here's an example: Reason code uses `!` - for logical not, while ocaml uses `not`. So, for converting between reason - and ocaml syntax, ocaml `not` converts to `!`, reason `!` converts to - `not`. + (* [lhs prod] is the left-hand side of the production [prod]. This is + always a non-terminal symbol. *) - In more complicated cases where a reserved keyword exists in one syntax but - not the other, these functions translate any potentially conflicting - identifier into the same identifier with a suffix attached, or remove the - suffix when converting back. Two examples: + val lhs: production -> xsymbol - reason to ocaml: + (* [rhs prod] is the right-hand side of the production [prod]. This is + a (possibly empty) sequence of (terminal or nonterminal) symbols. *) - pub: invalid in reason to begin with - pub_: pub - pub__: pub_ + val rhs: production -> xsymbol list - ocaml to reason: + (* [nullable nt] tells whether the non-terminal symbol [nt] is nullable. + That is, it is true if and only if this symbol produces the empty + word [epsilon]. *) - pub: pub_ - pub_: pub__ - pub__: pub___ + val nullable: _ nonterminal -> bool - ===== + (* [first nt t] tells whether the FIRST set of the nonterminal symbol [nt] + contains the terminal symbol [t]. That is, it is true if and only if + [nt] produces a word that begins with [t]. *) - reason to ocaml: + val first: _ nonterminal -> _ terminal -> bool - match: match_ - match_: match__ - match__: match___ + (* [xfirst] is analogous to [first], but expects a first argument of type + [xsymbol] instead of [_ terminal]. *) - ocaml to reason: + val xfirst: xsymbol -> _ terminal -> bool - match: invalid in ocaml to begin with - match_: match - match__: match_ -*) + (* [foreach_terminal] enumerates the terminal symbols, including [error]. + [foreach_terminal_but_error] enumerates the terminal symbols, excluding + [error]. *) -let reason_to_ml_swap = function - | "!" -> "not" - | "^" -> "!" - | "++" -> "^" - | "===" -> "==" - | "==" -> "=" - (* ===\/ and !==\/ are not representable in OCaml but - * representable in Reason - *) - | "\\!==" -> "!==" - | "\\===" -> "===" - | "!=" -> "<>" - | "!==" -> "!=" - | x when ( - potentially_conflicts_with ~keyword:"match" x - || potentially_conflicts_with ~keyword:"method" x - || potentially_conflicts_with ~keyword:"private" x) -> string_add_suffix x - | x when ( - potentially_conflicts_with ~keyword:"switch_" x - || potentially_conflicts_with ~keyword:"pub_" x - || potentially_conflicts_with ~keyword:"pri_" x) -> string_drop_suffix x - | everything_else -> everything_else + val foreach_terminal: (xsymbol -> 'a -> 'a) -> 'a -> 'a + val foreach_terminal_but_error: (xsymbol -> 'a -> 'a) -> 'a -> 'a -let ml_to_reason_swap = function - | "not" -> "!" - | "!" -> "^" - | "^" -> "++" - | "==" -> "===" - | "=" -> "==" - (* ===\/ and !==\/ are not representable in OCaml but - * representable in Reason - *) - | "!==" -> "\\!==" - | "===" -> "\\===" - | "<>" -> "!=" - | "!=" -> "!==" - | x when ( - potentially_conflicts_with ~keyword:"match_" x - || potentially_conflicts_with ~keyword:"method_" x - || potentially_conflicts_with ~keyword:"private_" x) -> string_drop_suffix x - | x when ( - potentially_conflicts_with ~keyword:"switch" x - || potentially_conflicts_with ~keyword:"pub" x - || potentially_conflicts_with ~keyword:"pri" x) -> string_add_suffix x - | everything_else -> everything_else + (* The type [env] is meant to be the same as in [INCREMENTAL_ENGINE]. *) -let swap_txt map txt = - if StringMap.mem txt map then - StringMap.find txt map - else - txt + type 'a env -(** identifier_mapper maps all identifiers in an AST with a mapping function f - this is used by swap_operator_mapper right below, to traverse the whole AST - and swapping the symbols listed above. - *) -let identifier_mapper f super = -{ super with - expr = begin fun mapper expr -> - let expr = - match expr with - | {pexp_desc=Pexp_ident ({txt} as id); - pexp_loc; - pexp_attributes} -> - let swapped = match txt with - | Lident s -> Lident (f s) - | Ldot(longPrefix, s) -> Ldot(longPrefix, f s) - | Lapply (y,s) -> Lapply (y, s) - in - {expr with pexp_desc=Pexp_ident ({id with txt=swapped})} - | _ -> expr - in - super.expr mapper expr - end; - pat = begin fun mapper pat -> - let pat = - match pat with - | {ppat_desc=Ppat_var ({txt} as id); - ppat_loc; - ppat_attributes} -> - {pat with ppat_desc=Ppat_var ({id with txt=(f txt)})} - | _ -> pat - in - super.pat mapper pat - end; - signature_item = begin fun mapper signatureItem -> - let signatureItem = - match signatureItem with - | {psig_desc=Psig_value ({pval_name} as name); - psig_loc} -> - {signatureItem with psig_desc=Psig_value ({name with pval_name=({pval_name with txt=(f name.pval_name.txt)})})} - | _ -> signatureItem - in - super.signature_item mapper signatureItem - end; -} + (* [feed symbol startp semv endp env] causes the parser to consume the + (terminal or nonterminal) symbol [symbol], accompanied with the semantic + value [semv] and with the start and end positions [startp] and [endp]. + Thus, the automaton makes a transition, and reaches a new state. The + stack grows by one cell. This operation is permitted only if the current + state (as determined by [env]) has an outgoing transition labeled with + [symbol]. Otherwise, [Invalid_argument _] is raised. *) -(** escape_stars_slashes_mapper escapes all stars and slases in an AST *) -let escape_stars_slashes_mapper = - let escape_stars_slashes str = - if String.contains str '/' then - replace_string "/*" "/\\*" @@ - replace_string "*/" "*\\/" @@ - replace_string "//" "/\\/" @@ - str - else - str - in - identifier_mapper escape_stars_slashes + val feed: 'a symbol -> position -> 'a -> position -> 'b env -> 'b env -(* To be used in parser, transform a token into an ast node with different identifier - *) -let reason_to_ml_swap_operator_mapper = identifier_mapper reason_to_ml_swap +end -(* To be used in printer, transform an ast node into a token with different identifier - *) -let ml_to_reason_swap_operator_mapper = identifier_mapper ml_to_reason_swap +(* This signature combines the incremental API and the inspection API. *) -(* attribute_equals tests an attribute is txt - *) -let attribute_equals to_compare = function - | ({txt; _}, _) -> txt = to_compare +module type EVERYTHING = sig -(* attribute_exists tests if an attribute exists in a list - *) -let attribute_exists txt attributes = List.exists (attribute_equals txt) attributes + include INCREMENTAL_ENGINE -(* conflicted_attributes tests if both attribute1 and attribute2 - * exist - *) -let attributes_conflicted attribute1 attribute2 attributes = - attribute_exists attribute1 attributes && - attribute_exists attribute2 attributes + include INSPECTION + with type 'a lr1state := 'a lr1state + with type production := production + with type 'a env := 'a env -(* normalized_attributes removes attribute from a list of attributes - *) -let normalized_attributes attribute attributes = - List.filter (fun x -> not (attribute_equals attribute x)) attributes +end +end +module EngineTypes : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -(* apply_mapper family applies an ast_mapper to an ast *) -let apply_mapper_to_structure s mapper = mapper.structure mapper s -let apply_mapper_to_signature s mapper = mapper.signature mapper s -let apply_mapper_to_type s mapper = mapper.typ mapper s -let apply_mapper_to_expr s mapper = mapper.expr mapper s -let apply_mapper_to_pattern s mapper = mapper.pat mapper s +(* This file defines several types and module types that are used in the + specification of module [Engine]. *) -let apply_mapper_to_toplevel_phrase toplevel_phrase mapper = - match toplevel_phrase with - | Ptop_def x -> Ptop_def (apply_mapper_to_structure x mapper) - | x -> x +(* --------------------------------------------------------------------------- *) -let apply_mapper_to_use_file use_file mapper = - List.map (fun x -> apply_mapper_to_toplevel_phrase x mapper) use_file +(* It would be nice if we could keep the structure of stacks and environments + hidden. However, stacks and environments must be accessible to semantic + actions, so the following data structure definitions must be public. *) -(* The following logic defines our own Error object - * and register it with ocaml so it knows how to print it - *) +(* --------------------------------------------------------------------------- *) -type error = Syntax_error of string +(* A stack is a linked list of cells. A sentinel cell -- which is its own + successor -- is used to mark the bottom of the stack. The sentinel cell + itself is not significant -- it contains dummy values. *) -exception Error of Location.t * error +type ('state, 'semantic_value) stack = { -let report_error ppf (Syntax_error err) = - Format.(fprintf ppf "%s" err) + (* The state that we should go back to if we pop this stack cell. *) -let () = - Location.register_error_of_exn - (function - | Error (loc, err) -> - Some (Location.error_of_printer loc report_error err) - | _ -> - None - ) + (* This convention means that the state contained in the top stack cell is + not the current state [env.current]. It also means that the state found + within the sentinel is a dummy -- it is never consulted. This convention + is the same as that adopted by the code-based back-end. *) + state: 'state; -type menhirMessagesError = { - msg: string; - loc: Location.t; -} + (* The semantic value associated with the chunk of input that this cell + represents. *) -type menhirError = - | NoMenhirMessagesError - | MenhirMessagesError of menhirMessagesError + semv: 'semantic_value; -let menhirMessagesError = ref [NoMenhirMessagesError] + (* The start and end positions of the chunk of input that this cell + represents. *) -let findMenhirErrorMessage loc = - let rec find messages = - match messages with - | MenhirMessagesError err :: tail when err.loc = loc -> MenhirMessagesError err - | _ :: tail -> find tail - | [] -> NoMenhirMessagesError - in find !menhirMessagesError + startp: Lexing.position; + endp: Lexing.position; -let add_error_message err = - let msg = try - ignore (find_substring "UNKNOWN SYNTAX ERROR" err.msg 0); - [MenhirMessagesError {err with msg = "A syntax error occurred. Help to improve this message: https://github.com/facebook/reason/blob/master/src/README.md#add-a-menhir-error-message"}] - with - | Not_found -> [MenhirMessagesError err] - in - menhirMessagesError := !menhirMessagesError @ msg; + (* The next cell down in the stack. If this is a self-pointer, then this + cell is the sentinel, and the stack is conceptually empty. *) -end -module Reason_pprint_ast -= struct -#1 "reason_pprint_ast.ml" -(* - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * Forked from OCaml, which is provided under the license below: - * - * Xavier Leroy, projet Cristal, INRIA Rocquencourt - * - * Copyright © 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Inria - * - * Permission is hereby granted, free of charge, to the Licensee obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense - * under any license of the Licensee's choice, and/or sell copies of the - * Software, subject to the following conditions: - * - * 1. Redistributions of source code must retain the above copyright notice - * and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * 3. All advertising materials mentioning features or use of the Software - * must display the following acknowledgement: This product includes all or - * parts of the Caml system developed by Inria and its contributors. - * 4. Other than specified in clause 3, neither the name of Inria nor the - * names of its contributors may be used to endorse or promote products - * derived from the Software without specific prior written permission. - * - * Disclaimer - * - * This software is provided by Inria and contributors “as is” and any express - * or implied warranties, including, but not limited to, the implied - * warranties of merchantability and fitness for a particular purpose are - * disclaimed. in no event shall Inria or its contributors be liable for any - * direct, indirect, incidental, special, exemplary, or consequential damages - * (including, but not limited to, procurement of substitute goods or - * services; loss of use, data, or profits; or business interruption) however - * caused and on any theory of liability, whether in contract, strict - * liability, or tort (including negligence or otherwise) arising in any way - * out of the use of this software, even if advised of the possibility of such - * damage. - * - *) + next: ('state, 'semantic_value) stack; -(* TODO more fine-grained precedence pretty-printing *) +} -open Ast_404 -open Asttypes -open Format -open Location -open Lexing -open Longident -open Parsetree -open Easy_format -open Syntax_util -open Ast_mapper +(* --------------------------------------------------------------------------- *) +(* A parsing environment contains all of the parser's state (except for the + current program point). *) -type commentCategory = - | EndOfLine - | SingleLine - | Regular +type ('state, 'semantic_value, 'token) env = { -(* (comment text, attachment_location, physical location) *) -type commentWithCategory = (String.t * commentCategory * Location.t) list + (* If this flag is true, then the first component of [env.triple] should + be ignored, as it has been logically overwritten with the [error] + pseudo-token. *) -let print_easy easyFormatted = - match easyFormatted with - | Atom (s,_) -> s - | List (_,_) -> "list" - | Label (_,_) -> "label" - | Custom _ -> "custom" + error: bool; -let (|>) = fun x f -> f x -let (<|) = fun f x -> f x + (* The last token that was obtained from the lexer, together with its start + and end positions. Warning: before the first call to the lexer has taken + place, a dummy (and possibly invalid) token is stored here. *) -exception NotPossible of string + triple: 'token * Lexing.position * Lexing.position; -let case_not_implemented msg loc (file, line, column) = - Format.fprintf Format.err_formatter - "Not Implemented Yet %s %a (from: %s:%s:%s)@." - msg - Location.print_loc loc - file - (string_of_int line) - (string_of_int column) - -let exprDescrString x = - x.pexp_loc.loc_start.Lexing.pos_fname ^ - "[" ^ - (string_of_int x.pexp_loc.loc_start.Lexing.pos_lnum) ^ - ", " ^ - (string_of_int x.pexp_loc.loc_end.Lexing.pos_lnum) ^ - "]" + (* The stack. In [CodeBackend], it is passed around on its own, + whereas, here, it is accessed via the environment. *) -type ruleInfoData = { - reducePrecedence: precedence; - shiftPrecedence: precedence; -} + stack: ('state, 'semantic_value) stack; -and ruleCategory = - (* Printing will be parsed with very high precedence, so not much need to - worry about ensuring it will reduce correctly. In short, you can put - `FunctionApplication` content anywhere around an infix identifier without - wrapping in parens. For example `myFunc x y z` or `if x {y} else {z}` - The layout is kept in list form only to allow for elegant wrapping rules - to take into consideration the *number* of high precedence parsed items. *) - | FunctionApplication of layoutNode list - (* Care should be taken to ensure the rule that caused it to be parsed will - reduce again on the printed output - context should carefully consider - wrapping in parens according to the ruleInfoData. *) - | SpecificInfixPrecedence of ruleInfoData * resolvedRule - (* Not safe to include anywhere between infix operators without wrapping in - parens. This describes expressions like `fun x => x` which doesn't fit into - our simplistic algorithm for printing function applications separated by infix. + (* The current state. In [CodeBackend], it is passed around on its + own, whereas, here, it is accessed via the environment. *) - It might be possible to include these in between infix, but there are - tricky rules to determining when these must be guarded by parens (it - depends highly on context that is hard to reason about). It's so nuanced - that it's easier just to always wrap them in parens. *) - | PotentiallyLowPrecedence of layoutNode - (* Simple means it is clearly one token (such as (anything) or [anything] or identifier *) - | Simple of layoutNode + current: 'state; -(* Represents a ruleCategory where the precedence has been resolved. - * The precedence of a ruleCategory gets resolved in `ensureExpression` or - * `ensureContainingRule`. The result is either a plain layoutNode (where - * parens probably have been applied) or an InfixTree containing the operator and - * a left & right resolvedRule. The latter indicates that the precedence has been resolved, - * but the actual formatting is deferred to a later stadium. - * Think `let x = foo |> f |> z |>`, which requires a certain formatting style when - * things break over multiple lines. *) -and resolvedRule = - | LayoutNode of layoutNode - | InfixTree of string * resolvedRule * resolvedRule +} -and associativity = - | Right - | Nonassoc - | Left +(* --------------------------------------------------------------------------- *) -and precedenceEntryType = - | TokenPrecedence - | CustomPrecedence +(* This signature describes the parameters that must be supplied to the LR + engine. *) -and precedence = - | Token of string - | Custom of string +module type TABLE = sig -(* Make a standard list *) -and whenToDoSomething = - | Never - | IfNeed - | Always - (* Always_rec not only will break, it will break recursively up to the root *) - | Always_rec + (* The type of automaton states. *) -(* Describes the "fixity" of a token, and stores its *printed* representation - should it be rendered as infix/prefix (This rendering may be different than - how it is stored in the AST). *) -and tokenFixity = - (* Such as !simple_expr and ~!simple_expr. These function applications are - considered *almost* "simple" because they may be allowed anywhere a simple - expression is accepted, except for when on the left hand side of a - dot/send. *) - | AlmostSimplePrefix of string - | UnaryPlusPrefix of string - | UnaryMinusPrefix of string - | UnaryNotPrefix of string - | UnaryPostfix of string - | Infix of string - | Normal + type state -and easyFormatLabelFormatter = Easy_format.t -> Easy_format.t -> Easy_format.t -and listConfig = { - (* Newlines above items that do not have any comments immediately above it. - Only really useful when used with break:Always/Always_rec *) - newlinesAboveItems: int; - (* Newlines above regular comments *) - newlinesAboveComments: int; - (* Newlines above doc comments *) - newlinesAboveDocComments: int; - (* If you are only grouping something for the sake of visual appearance, and - * not forming an actual conceptual sequence of items, then this is often - * useful. For example, if you're appending a semicolon etc. *) - interleaveComments: bool; - (* Whether or not to render the final separator *) - renderFinalSep: bool; - break: whenToDoSomething; - (* Break setting that becomes activated if a comment becomes interleaved into - * this list. Typically, if not specified, the behavior from [break] will be - * used. - *) - wrap: string * string; - inline: bool * bool; - sep: string; - indent: int; - sepLeft: bool; - preSpace: bool; - (* Really means space_after_separator *) - postSpace: bool; - pad: bool * bool; - (* A function, because the system might rearrange your previous settings, and - * a function allows you to not be locked into some configuration that is made - * out of date by the formatting system (suppose it removes the separator - * token etc.) Having a function allows you to instruct our formatter how to - * extend the "freshest" notion of the list config when comments are - * interleaved. *) - listConfigIfCommentsInterleaved: (listConfig -> listConfig) option; + (* States are numbered. *) - (* Formatting to use if an item in a list had an end-of-line comment appended *) - listConfigIfEolCommentsInterleaved: (listConfig -> listConfig) option; -} + val number: state -> int -(** - * These represent "intent to format" the AST, with some parts being annotated - * with original source location. The benefit of tracking this in an - * intermediate structure, is that we can then interleave comments throughout - * the tree before generating the final representation. That prevents the - * formatting code from having to thread comments everywhere. - * - * The final representation is rendered using Easy_format. - *) -and layoutNode = - | SourceMap of Location.t * layoutNode (* a layout with location info *) - | WithEOLComment of string * layoutNode (* a layout with comment attached *) - | Sequence of listConfig * (layoutNode list) - | Label of easyFormatLabelFormatter * layoutNode * layoutNode - | Easy of Easy_format.t + (* The type of tokens. These can be thought of as real tokens, that is, + tokens returned by the lexer. They carry a semantic value. This type + does not include the [error] pseudo-token. *) + type token -(* Type which represents a resolvedRule's InfixTree flattened *) -type infixChain = - | InfixToken of string - | Layout of layoutNode + (* The type of terminal symbols. These can be thought of as integer codes. + They do not carry a semantic value. This type does include the [error] + pseudo-token. *) -let print_comment_type = function - | Regular -> "Regular" - | EndOfLine -> "End of Line" - | SingleLine -> "SingleLine" + type terminal -let rec print_comments = function - | [] -> () - | ((s, t, loc)::tl) -> - printf "%d (%d:%d)-%d (%d:%d) -- %s:||%s||\n" - loc.loc_start.Lexing.pos_cnum - loc.loc_start.Lexing.pos_lnum - (loc.loc_start.Lexing.pos_cnum - loc.loc_start.Lexing.pos_bol) - loc.loc_end.Lexing.pos_cnum - loc.loc_end.Lexing.pos_lnum - (loc.loc_end.Lexing.pos_cnum - loc.loc_end.Lexing.pos_bol) - (print_comment_type t) - s; - print_comments tl; - () - -let rec print_easy_rec ?(indent=0) easyFormatted = - let space = Array.fold_left (^) "" (Array.make indent " ") in - match easyFormatted with - | Atom (s,_) -> - printf "%s Atom:'%s'\n" space s - | List ((opening, sep, closing, config), items) -> - let break = (match config.wrap_body with - | `No_breaks -> "No_breaks" - | `Wrap_atoms -> "Wrap_atoms" - | `Never_wrap -> "Never_wrap" - | `Force_breaks -> "Force_breaks" - | `Force_breaks_rec -> "Force_breaks_rec" - | `Always_wrap -> "Always_wrap") in - printf "%s List: open %s close %s sep %s break %s \n" space opening closing sep break; - let _ = List.map (print_easy_rec ~indent:(indent+2)) items in - () - | Label ((left, config), right) -> - let break = match config.label_break with - | `Never -> "Never" - | `Always_rec -> "Always_rec" - | `Auto -> "Auto" - | `Always -> "Always" in - printf "%s Label (break = %s): \n" space break; - printf " %s left \n" space; - print_easy_rec ~indent:(indent+2) left; - printf " %s right \n" space; - print_easy_rec ~indent:(indent+2) right; - | Custom _ -> printf "custom \n" - -let rec print_layout ?(indent=0) layout = - let space = Array.fold_left (^) "" (Array.make indent " ") in - match layout with - | SourceMap (loc, layout) -> - printf "%s [%d (%d:%d)-%d (%d:%d)]\n" space - loc.loc_start.Lexing.pos_cnum - loc.loc_start.Lexing.pos_lnum - (loc.loc_start.Lexing.pos_cnum - loc.loc_start.Lexing.pos_bol) - loc.loc_end.Lexing.pos_cnum - loc.loc_end.Lexing.pos_lnum - (loc.loc_end.Lexing.pos_cnum - loc.loc_end.Lexing.pos_bol); - print_layout ~indent:(indent+2) layout - | Sequence (config, layout_list) -> - let break = match config.break with - | Never -> "Never" - | IfNeed -> "if need" - | Always -> "Always" - | Always_rec -> "Always_rec" in - printf "%s Sequence of %d, sep: %s, finalSep: %s stick_to_left: %s break: %s\n" space (List.length layout_list) config.sep (string_of_bool config.renderFinalSep) (string_of_bool config.sepLeft) break; - let _ = List.map (print_layout ~indent:(indent+2)) layout_list in - () - | WithEOLComment (comment, layout) -> - printf "%s WithEOLComment: \n" space; - printf " %s node \n" space; - print_layout ~indent:(indent+2) layout; - printf " %s comments : \n" space; - printf " %s %s\n" space comment; - printf "\n"; - | Label (_, left, right) -> - printf "%s Label: \n" space; - printf " %s left \n" space; - print_layout ~indent:(indent+2) left; - printf " %s right \n" space; - print_layout ~indent:(indent+2) right; - | Easy e -> - printf "%s Easy: %s \n" space (print_easy e) - -let rec longIdentSame = function - | (Lident l1, Lident l2) -> String.compare l1 l2 == 0 - | (Ldot (path1, l1), Ldot (path2, l2)) -> - longIdentSame (path1, path2) && String.compare l1 l2 == 0 - | (Lapply (l11, l12), Lapply (l21, l22)) -> - longIdentSame (l11, l21) && longIdentSame (l12, l22) - | _ -> false + (* The type of nonterminal symbols. *) -let rec trueForEachPair l1 l2 tester = match (l1, l2) with - | ([], []) -> true - | ([], _::_) -> false - | (_::_, []) -> false - | (hd1::tl1, hd2::tl2) -> (tester hd1 hd2 && trueForEachPair tl1 tl2 tester) + type nonterminal -(* - Checks to see if two types are the same modulo the process of varification - which turns abstract types into type variables of the same name. - For example, [same_ast_modulo_varification] would consider (a => b) and ('a - => 'b) to have the same ast. This is useful in recovering syntactic sugar - for explicit polymorphic types with locally abstract types. + (* The type of semantic values. *) - Does not compare attributes, or extensions intentionally. + type semantic_value - TODO: This has one more issue: We need to compare only accepting t1's type - variables, to be considered compatible with t2's type constructors - not the - other way around. - *) -let same_ast_modulo_varification_and_extensions t1 t2 = - let rec loop t1 t2 = match (t1.ptyp_desc, t2.ptyp_desc) with - (* Importantly, cover the case where type constructors (of the form [a]) - are converted to type vars of the form ['a]. - *) - | (Ptyp_constr({txt=Lident s1}, []), Ptyp_var s2) -> String.compare s1 s2 == 0 - (* Now cover the case where type variables (of the form ['a]) are - converted to type constructors of the form [a]. - *) - | (Ptyp_var s1, Ptyp_constr({txt=Lident s2}, [])) -> String.compare s1 s2 == 0 - (* Now cover the typical case *) - | (Ptyp_constr(longident1, lst1), Ptyp_constr(longident2, lst2)) -> - longIdentSame (longident1.txt, longident2.txt) && - trueForEachPair lst1 lst2 loop - | (Ptyp_any, Ptyp_any) -> true - | (Ptyp_var x1, Ptyp_var x2) -> String.compare x1 x2 == 0 - | (Ptyp_arrow (label1, core_type1, core_type1'), Ptyp_arrow (label2, core_type2, core_type2')) -> - begin - match label1, label2 with - | Nolabel, Nolabel -> true - | Labelled s1, Labelled s2 -> String.compare s1 s2 == 0 - | Optional s1, Optional s2 -> String.compare s1 s2 == 0 - | _ -> false - end && - loop core_type1 core_type2 && - loop core_type1' core_type2' - | (Ptyp_tuple lst1, Ptyp_tuple lst2) -> trueForEachPair lst1 lst2 loop - | (Ptyp_object (lst1, o1), Ptyp_object (lst2, o2)) -> - let tester = fun (s1, attrs1, t1) (s2, attrs2, t2) -> - String.compare s1 s2 == 0 && - loop t1 t2 - in - trueForEachPair lst1 lst2 tester && - o1 == o2 - | (Ptyp_class (longident1, lst1), Ptyp_class (longident2, lst2)) -> - longIdentSame (longident1.txt, longident2.txt) && - trueForEachPair lst1 lst2 loop - | (Ptyp_alias(core_type1, string1), Ptyp_alias(core_type2, string2)) -> - loop core_type1 core_type2 && - String.compare string1 string2 == 0 - | (Ptyp_variant(row_field_list1, flag1, lbl_lst_option1), Ptyp_variant(row_field_list2, flag2, lbl_lst_option2)) -> - trueForEachPair row_field_list1 row_field_list2 rowFieldEqual && - flag1 == flag2 && - lbl_lst_option1 == lbl_lst_option2 - | (Ptyp_poly (string_lst1, core_type1), Ptyp_poly (string_lst2, core_type2))-> - trueForEachPair string_lst1 string_lst2 (fun s1 s2 -> String.compare s1 s2 == 0) && - loop core_type1 core_type2 - | (Ptyp_package(longident1, lst1), Ptyp_package (longident2, lst2)) -> - longIdentSame (longident1.txt, longident2.txt) && - trueForEachPair lst1 lst2 testPackageType - | (Ptyp_extension (s1, arg1), Ptyp_extension (s2, arg2)) -> - String.compare s1.txt s2.txt == 0 - | _ -> false - and testPackageType (lblLongIdent1, ct1) (lblLongIdent2, ct2) = - longIdentSame (lblLongIdent1.txt, lblLongIdent2.txt) && - loop ct1 ct2 - and rowFieldEqual f1 f2 = match (f1, f2) with - | ((Rtag(label1, attrs1, flag1, lst1)), (Rtag (label2, attrs2, flag2, lst2))) -> - String.compare label1 label2 == 0 && - flag1 == flag2 && - trueForEachPair lst1 lst2 loop - | (Rinherit t1, Rinherit t2) -> loop t1 t2 - | _ -> false - in - loop t1 t2 + (* A token is conceptually a pair of a (non-[error]) terminal symbol and + a semantic value. The following two functions are the pair projections. *) -let wrapLayoutWithLoc loc layout = - match loc with - | None -> layout - | Some loc -> SourceMap (loc, layout) + val token2terminal: token -> terminal + val token2value: token -> semantic_value -let expandLocation pos ~expand:(startPos, endPos) = - { pos with - loc_start = { - pos.loc_start with - Lexing.pos_cnum = pos.loc_start.Lexing.pos_cnum + startPos - }; - loc_end = { - pos.loc_end with - Lexing.pos_cnum = pos.loc_end.Lexing.pos_cnum + endPos - } - } + (* Even though the [error] pseudo-token is not a real token, it is a + terminal symbol. Furthermore, for regularity, it must have a semantic + value. *) -(** Kinds of attributes *) -type attributesPartition = { - arityAttrs : attributes; - docAttrs : attributes; - stdAttrs : attributes; - jsxAttrs : attributes -} + val error_terminal: terminal + val error_value: semantic_value -(** Partition attributes into kinds *) -let rec partitionAttributes attrs : attributesPartition = - match attrs with - | [] -> - {arityAttrs=[]; docAttrs=[]; stdAttrs=[]; jsxAttrs=[]} - | (({txt="JSX"; loc}, _) as jsx)::atTl -> - let partition = partitionAttributes atTl in - {partition with jsxAttrs=jsx::partition.jsxAttrs} - | (({txt="explicit_arity"; loc}, _) as arity_attr)::atTl - | (({txt="implicit_arity"; loc}, _) as arity_attr)::atTl -> - let partition = partitionAttributes atTl in - {partition with arityAttrs=arity_attr::partition.arityAttrs} - (*| (({txt="ocaml.text"; loc}, _) as doc)::atTl - | (({txt="ocaml.doc"; loc}, _) as doc)::atTl -> - let partition = partitionAttributes atTl in - {partition with docAttrs=doc::partition.docAttrs}*) - | atHd::atTl -> - let partition = partitionAttributes atTl in - {partition with stdAttrs=atHd::partition.stdAttrs} + (* [foreach_terminal] allows iterating over all terminal symbols. *) -let extractStdAttrs attrs = - (partitionAttributes attrs).stdAttrs + val foreach_terminal: (terminal -> 'a -> 'a) -> 'a -> 'a -let rec sequentialIfBlocks x = - match x with - | Some ({pexp_desc=Pexp_ifthenelse (e1, e2, els)}) -> ( - let (nestedIfs, finalExpression) = (sequentialIfBlocks els) in - ((e1, e2)::nestedIfs, finalExpression) - ) - | Some e -> ([], Some e) - | None -> ([], None) + (* The type of productions. *) -(* - TODO: IDE integration beginning with Vim: + type production - - Create recovering version of parser that creates regions of "unknown" - content in between let sequence bindings (anything between semicolons, - really). - - Use Easy_format's "style" features to tag each known node. - - Turn those style annotations into editor highlight commands. - - Editors have a set of keys that retrigger the parsing/rehighlighting - process (typically newline/semi/close-brace). - - On every parsing/rehighlighting, this pretty printer can be used to - determine the highlighting of recovered regions, and the editor plugin can - relegate highlighting of malformed regions to the editor which mostly does - so based on token patterns. + val production_index: production -> int + val find_production: int -> production -*) + (* If a state [s] has a default reduction on production [prod], then, upon + entering [s], the automaton should reduce [prod] without consulting the + lookahead token. The following function allows determining which states + have default reductions. *) -(* - @avoidSingleTokenWrapping + (* Instead of returning a value of a sum type -- either [DefRed prod], or + [NoDefRed] -- it accepts two continuations, and invokes just one of + them. This mechanism allows avoiding a memory allocation. *) - +-----------------------------+ - |+------+ | Another label - || let ( \ | - || a | Label | - || o | | The thing to the right of any label must be a - || p _+ label RHS | list in order for it to wrap correctly. Lists - || ): / v | will wrap if they need to/can. NON-lists will - |+--+ sixteenTuple = echoTuple|( wrap (indented) even though they're no lists! - +---/ 0,\---------------------+ To prevent a single item from wrapping, make - 0, an unbreakable list via ensureSingleTokenSticksToLabel. - 0 - ); In general, the best approach for indenting - let bindings is to keep building up labels from - the "let", always ensuring things that you want - to wrap will either be lists or guarded in - [ensureSingleTokenSticksToLabel]. - If you must join several lists together (via =) - (or colon), ensure that joining is done via - [makeList] (which won't break), and that new - list is always appended to the left - hand side of the label. (So that the right hand - side may always be the untouched list that you want - to wrap with aligned closing). - Always make sure rhs of the label are the + val default_reduction: + state -> + ('env -> production -> 'answer) -> + ('env -> 'answer) -> + 'env -> 'answer - Creating nested labels will preserve the original - indent location ("let" in this - case) as long as that nesting is - done on the left hand side of the labels. + (* An LR automaton can normally take three kinds of actions: shift, reduce, + or fail. (Acceptance is a particular case of reduction: it consists in + reducing a start production.) *) -*) + (* There are two variants of the shift action. [shift/discard s] instructs + the automaton to discard the current token, request a new one from the + lexer, and move to state [s]. [shift/nodiscard s] instructs it to move to + state [s] without requesting a new token. This instruction should be used + when [s] has a default reduction on [#]. See [CodeBackend.gettoken] for + details. *) -(* - Table 2.1. Precedence and associativity. - Precedence from highest to lowest: From RWOC, modified to include != - --------------------------------------- + (* This is the automaton's action table. It maps a pair of a state and a + terminal symbol to an action. *) - Operator prefix Associativity - !..., ?..., ~... Prefix - ., .(, .[ - - function application, constructor, assert, lazy Left associative - -, -. Prefix - **..., lsl, lsr, asr Right associative - *..., /..., %..., mod, land, lor, lxor Left associative - +..., -... Left associative - :: Right associative - @..., ^... Right associative ---- - != Left associative (INFIXOP0 listed first in lexer) - =..., <..., >..., |..., &..., $... Left associative (INFIXOP0) - =, <, > Left associative (IN SAME row as INFIXOP0 listed after) ---- - &, && Right associative - or, || Right associative - , - - :=, = Right associative - if - - ; Right associative + (* Instead of returning a value of a sum type -- one of shift/discard, + shift/nodiscard, reduce, or fail -- this function accepts three + continuations, and invokes just one them. This mechanism allows avoiding + a memory allocation. *) + (* In summary, the parameters to [action] are as follows: - Note: It would be much better if &... and |... were in separate precedence - groups just as & and | are. This way, we could encourage custom infix - operators to use one of the two precedences and no one would be confused as - to precedence (leading &, | are intuitive). Two precedence classes for the - majority of infix operators is totally sufficient. + - the first two parameters, a state and a terminal symbol, are used to + look up the action table; - TODO: Free up the (&) operator from pervasives so it can be reused for - something very common such as string concatenation or list appending. + - the next parameter is the semantic value associated with the above + terminal symbol; it is not used, only passed along to the shift + continuation, as explained below; - let x = tail & head; - *) + - the shift continuation expects an environment; a flag that tells + whether to discard the current token; the terminal symbol that + is being shifted; its semantic value; and the target state of + the transition; -(* "Almost Simple Prefix" function applications parse with the rule: + - the reduce continuation expects an environment and a production; - `PREFIXOP simple_expr %prec below_DOT_AND_SHARP`, which in turn is almost - considered a "simple expression" (it's acceptable anywhere a simple - expression is except in a couple of edge cases. + - the fail continuation expects an environment; - "Unary Prefix" function applications parse with the rule: + - the last parameter is the environment; it is not used, only passed + along to the selected continuation. *) - `MINUS epxr %prec prec_unary_minus`, which in turn is considered an - "expression" (not simple). All unary operators are mapped into an identifier - beginning with "~". + val action: + state -> + terminal -> + semantic_value -> + ('env -> bool -> terminal -> semantic_value -> state -> 'answer) -> + ('env -> production -> 'answer) -> + ('env -> 'answer) -> + 'env -> 'answer - TODO: Migrate all "almost simple prefix" to "unsary prefix". When `!` - becomes "not", then it will make more sense that !myFunc (arg) is parsed as - !(myFunc arg) instead of (!myFunc) arg. + (* This is the automaton's goto table. This table maps a pair of a state + and a nonterminal symbol to a new state. By extension, it also maps a + pair of a state and a production to a new state. *) - *) -let almost_simple_prefix_symbols = [ '!'; '?'; '~'] ;; -(* Subset of prefix symbols that have special "unary precedence" *) -let unary_minus_prefix_symbols = [ "~-"; "~-."] ;; -let unary_plus_prefix_symbols = ["~+"; "~+." ] ;; -let infix_symbols = [ '='; '<'; '>'; '@'; '^'; '|'; '&'; '+'; '-'; '*'; '/'; - '$'; '%'; '\\'; '#' ] -let operator_chars = [ '!'; '$'; '%'; '&'; '*'; '+'; '-'; '.'; '/'; - ':'; '<'; '='; '>'; '?'; '@'; '^'; '|'; '~' ] -let numeric_chars = [ '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9' ] + (* The function [goto_nt] can be applied to [s] and [nt] ONLY if the state + [s] has an outgoing transition labeled [nt]. Otherwise, its result is + undefined. Similarly, the call [goto_prod prod s] is permitted ONLY if + the state [s] has an outgoing transition labeled with the nonterminal + symbol [lhs prod]. The function [maybe_goto_nt] involves an additional + dynamic check and CAN be called even if there is no outgoing transition. *) -let special_infix_strings = - ["asr"; "land"; "lor"; "lsl"; "lsr"; "lxor"; "mod"; "or"; ":="; "!="; "!=="] + val goto_nt : state -> nonterminal -> state + val goto_prod: state -> production -> state + val maybe_goto_nt: state -> nonterminal -> state option -let updateToken = "=" -let requireIndentFor = [updateToken; ":="] + (* [is_start prod] tells whether the production [prod] is a start production. *) -let namedArgSym = "~" + val is_start: production -> bool + (* By convention, a semantic action is responsible for: -let getPrintableUnaryIdent s = - if List.mem s unary_minus_prefix_symbols || List.mem s unary_plus_prefix_symbols then - String.sub s 1 (String.length s -1) - else s + 1. fetching whatever semantic values and positions it needs off the stack; + 2. popping an appropriate number of cells off the stack, as dictated + by the length of the right-hand side of the production; -(* determines if the string is an infix string. - checks backwards, first allowing a renaming postfix ("_102") which - may have resulted from Pexp -> Texp -> Pexp translation, then checking - if all the characters in the beginning of the string are valid infix - characters. *) -let printedStringAndFixity = function - | s when List.mem s special_infix_strings -> Infix s - | "^" -> UnaryPostfix "^" - | s when List.mem s.[0] infix_symbols -> Infix s - (* Correctness under assumption that unary operators are stored in AST with - leading "~" *) - | s when List.mem s.[0] almost_simple_prefix_symbols && - not (List.mem s special_infix_strings) && - not (s = "?") -> ( - (* What *kind* of prefix fixity? *) - if List.mem s unary_plus_prefix_symbols then - UnaryPlusPrefix (getPrintableUnaryIdent s) - else if List.mem s unary_minus_prefix_symbols then - UnaryMinusPrefix (getPrintableUnaryIdent s) - else if s = "!" then - UnaryNotPrefix "!" - else - AlmostSimplePrefix s - ) - | _ -> Normal + 3. computing a new semantic value, as well as new start and end positions; + 4. pushing a new stack cell, which contains the three values + computed in step 3; -(* Also, this doesn't account for != and !== being infixop!!! *) -let isSimplePrefixToken s = match printedStringAndFixity s with - | AlmostSimplePrefix _ | UnaryPostfix "^" -> true - | _ -> false + 5. returning the new stack computed in steps 2 and 4. + Point 1 is essentially forced upon us: if semantic values were fetched + off the stack by this interpreter, then the calling convention for + semantic actions would be variadic: not all semantic actions would have + the same number of arguments. The rest follows rather naturally. *) -(* Convenient bank of information that represents the parser's precedence - rankings. Each instance describes a precedence table entry. The function - tests either a token string encountered by the parser, or (in the case of - `CustomPrecedence`) the string name of a custom rule precedence declared - using %prec *) -let rules = [ - [ - (TokenPrecedence, (fun s -> (Nonassoc, isSimplePrefixToken s))); - ]; - [ - (CustomPrecedence, (fun s -> (Nonassoc, s = "prec_unary"))); - ]; - (* Note the special case for "*\*", BARBAR, and LESSMINUS, AMPERSAND(s) *) - [ - (TokenPrecedence, (fun s -> (Right, String.length s > 1 && s.[0] == '*' && s.[1] == '\\' && s.[2] == '*'))); - (TokenPrecedence, (fun s -> (Right, s = "lsl"))); - (TokenPrecedence, (fun s -> (Right, s = "lsr"))); - (TokenPrecedence, (fun s -> (Right, s = "asr"))); - ]; - [ - (TokenPrecedence, (fun s -> (Left, s.[0] == '*' && (String.length s == 1 || s != "*\\*")))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '/'))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '%' ))); - (TokenPrecedence, (fun s -> (Left, s = "mod" ))); - (TokenPrecedence, (fun s -> (Left, s = "land" ))); - (TokenPrecedence, (fun s -> (Left, s = "lor" ))); - (TokenPrecedence, (fun s -> (Left, s = "lxor" ))); - ]; - [ - (* Even though these use the same *tokens* as unary plus/minus at parse - time, when unparsing infix -/+, the CustomPrecedence rule would be - incorrect to use, and instead we need a rule that models what infix - parsing would use - just the regular token precedence without a custom - precedence. *) - (TokenPrecedence, - (fun s -> ( - Left, - if String.length s > 1 && s.[0] == '+' && s.[1] == '+' then - (* - Explicitly call this out as false because the other ++ case below - should have higher *lexing* priority. ++operator_chars* is considered an - entirely different token than +(non_plus_operator_chars)* - *) - false - else - s.[0] == '+' - ))); - (TokenPrecedence ,(fun s -> (Left, s.[0] == '-' ))); - (TokenPrecedence ,(fun s -> (Left, s = "!" ))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s = "::"))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s.[0] == '@'))); - (TokenPrecedence, (fun s -> (Right, s.[0] == '^'))); - (TokenPrecedence, (fun s -> (Right, String.length s > 1 && s.[0] == '+' && s.[1] == '+'))); - ]; - [ - (TokenPrecedence, (fun s -> (Left, s.[0] == '=' && not (s = "=") && not (s = "=>")))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '<' && not (s = "<")))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '>' && not (s = ">")))); - (TokenPrecedence, (fun s -> (Left, s = "!="))); (* Not preset in the RWO table! *) - (TokenPrecedence, (fun s -> (Left, s = "!=="))); (* Not preset in the RWO table! *) - (TokenPrecedence, (fun s -> (Left, s = "=="))); - (TokenPrecedence, (fun s -> (Left, s = "==="))); - (TokenPrecedence, (fun s -> (Left, s = "<"))); - (TokenPrecedence, (fun s -> (Left, s = ">"))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '|' && not (s = "||")))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '&' && not (s = "&") && not (s = "&&")))); - (TokenPrecedence, (fun s -> (Left, s.[0] == '$'))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s = "&"))); - (TokenPrecedence, (fun s -> (Right, s = "&&"))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s = "or"))); - (TokenPrecedence, (fun s -> (Right, s = "||"))); - ]; - [ - (* The Left shouldn't ever matter in practice. Should never get in a - situation with two consecutive infix ? - the colon saves us. *) - (TokenPrecedence, (fun s -> (Left, s = "?"))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s = ":="))); - ]; - [ - (TokenPrecedence, (fun s -> (Right, s = updateToken))); - ]; - (* It's important to account for ternary ":" being lower precedence than "?" *) - [ - (TokenPrecedence, (fun s -> (Right, s = ":"))) - ]; - [ - (TokenPrecedence, (fun s -> (Nonassoc, s = "=>"))); - ]; -] + (* Semantic actions are allowed to raise [Error]. *) -(* remove all prefixing backslashes, e.g. \=== becomes === *) -let rec without_prefixed_backslashes str = - if str = "" then str - else if String.get str 0 = '\\' then String.sub str 1 (String.length str - 1) - else str + exception Error -let indexOfFirstMatch ~prec lst = - let rec indexOfFirstMatchN ~prec lst n = match lst with - | [] -> None - | []::tl -> indexOfFirstMatchN ~prec tl (n + 1) - | (hdHd::hdTl)::tl -> ( - let (kind, tester) = hdHd in - match (prec, kind) with - | (Token str, TokenPrecedence) - | (Custom str, CustomPrecedence) -> - let (associativity, foundMatch) = tester str in - if foundMatch then - Some (associativity, n) - else - indexOfFirstMatchN ~prec (hdTl::tl) (n) - | _ -> indexOfFirstMatchN ~prec (hdTl::tl) (n) - ) - in - indexOfFirstMatchN ~prec lst 0 + type semantic_action = + (state, semantic_value, token) env -> (state, semantic_value) stack -(* Assuming it's an infix function application. *) -let precedenceInfo ~prec = - (* Removes prefixed backslashes in order to do proper conversion *) - let normalizedCheck = - match prec with - | Token str -> Token (without_prefixed_backslashes str) - | Custom str -> prec - in - indexOfFirstMatch ~prec:normalizedCheck rules + val semantic_action: production -> semantic_action -let isLeftAssociative ~prec = match precedenceInfo ~prec with - | None -> false - | Some (Left, _) -> true - | Some (Right, _) -> false - | Some (Nonassoc, _) -> false + (* [may_reduce state prod] tests whether the state [state] is capable of + reducing the production [prod]. This function is currently costly and + is not used by the core LR engine. It is used in the implementation + of certain functions, such as [force_reduction], which allow the engine + to be driven programmatically. *) -let isRightAssociative ~prec = match precedenceInfo ~prec with - | None -> false - | Some (Right, _) -> true - | Some (Left, _) -> false - | Some (Nonassoc, _) -> false + val may_reduce: state -> production -> bool -let higherPrecedenceThan c1 c2 = match ((precedenceInfo c1), (precedenceInfo c2)) with - | (_, None) - | (None, _) -> - let (str1, str2) = match (c1, c2) with - | (Token s1, Token s2) -> ("Token " ^ s1, "Token " ^ s2) - | (Token s1, Custom s2) -> ("Token " ^ s1, "Custom " ^ s2) - | (Custom s1, Token s2) -> ("Custom " ^ s1, "Token " ^ s2) - | (Custom s1, Custom s2) -> ("Custom " ^ s1, "Custom " ^ s2) - in - raise (NotPossible ("Cannot determine precedence of two checks " ^ str1 ^ " vs. " ^ str2)) - | (Some (_, p1), Some (_, p2)) -> p1 < p2 + (* The LR engine requires a number of hooks, which are used for logging. *) + (* The comments below indicate the conventional messages that correspond + to these hooks in the code-based back-end; see [CodeBackend]. *) -let printedStringAndFixityExpr = function - | {pexp_desc = Pexp_ident {txt=Lident l}} -> printedStringAndFixity l - | _ -> Normal + (* If the flag [log] is false, then the logging functions are not called. + If it is [true], then they are called. *) -let is_predef_option = function - | (Ldot (Lident "*predef*","option")) -> true - | _ -> false + val log : bool -(* which identifiers are in fact operators needing parentheses *) -let needs_parens txt = - match printedStringAndFixity txt with - | Infix _ -> true - | UnaryPostfix _ -> true - | UnaryPlusPrefix _ -> true - | UnaryMinusPrefix _ -> true - | UnaryNotPrefix _ -> true - | AlmostSimplePrefix _ -> true - | Normal -> false + module Log : sig -(* some infixes need spaces around parens to avoid clashes with comment - syntax. This isn't needed for comment syntax /* */ *) -let needs_spaces txt = - txt.[0]='*' || txt.[String.length txt - 1] = '*' + (* State %d: *) -(* add parentheses to binders when they are in fact infix or prefix operators *) -let protect_ident ppf txt = - let format : (_, _, _) format = - if not (needs_parens txt) then "%s" - else if needs_spaces txt then "(@;%s@;)" - else "(%s)" - in fprintf ppf format txt - -let protect_longident ppf print_longident longprefix txt = - let format : (_, _, _) format = - if not (needs_parens txt) then "%a.%s" - else if needs_spaces txt then "(@;%a.%s@;)" - else "(%a.%s)" in - fprintf ppf format print_longident longprefix txt - -let rec longident f = function - | Lident s -> protect_ident f s - | Ldot(y,s) -> protect_longident f longident y s - | Lapply (y,s) -> - fprintf f "%a(%a)" longident y longident s + val state: state -> unit -let rec orList = function (* only consider ((A|B)|C)*) - | {ppat_desc = Ppat_or (p1, p2)} -> (orList p1) @ (orList p2) - | x -> [x] + (* Shifting () to state *) -type space_formatter = (unit, Format.formatter, unit) format + val shift: terminal -> state -> unit -let override = function - | Override -> "!" - | Fresh -> "" + (* Reducing a production should be logged either as a reduction + event (for regular productions) or as an acceptance event (for + start productions). *) -(* variance encoding: need to sync up with the [parser.mly] *) -let type_variance = function - | Invariant -> "" - | Covariant -> "+" - | Contravariant -> "-" + (* Reducing production / Accepting *) -type construct = - [ `cons of expression list - | `list of expression list - | `nil - | `normal - | `simple of Longident.t - | `tuple ] + val reduce_or_accept: production -> unit -type sequence_kind = - [ `Array - | `List - | `Tuple - | `ES6List - ] + (* Lookahead token is now (-) *) -let view_expr x = - match x.pexp_desc with - | Pexp_construct ( {txt= Lident "()"; _},_) -> `tuple - | Pexp_construct ( {txt= Lident "[]"},_) -> `nil - | Pexp_construct ( {txt= Lident"::"},Some _) -> - let rec loop exp acc = match exp with - | {pexp_desc=Pexp_construct ({txt=Lident "[]"},_)} -> - (List.rev acc,true) - | {pexp_desc= - Pexp_construct ({txt=Lident "::"}, - Some ({pexp_desc= Pexp_tuple([e1;e2])}))} -> - loop e2 (e1::acc) - | e -> (List.rev (e::acc),false) in - let (ls,b) = loop x [] in - if b then - `list ls - else `cons ls - | Pexp_construct (x,None) -> `simple (x.txt) - | _ -> `normal + val lookahead_token: terminal -> Lexing.position -> Lexing.position -> unit -let is_simple_list_expr x = - match view_expr x with - | `list _ | `cons _ -> true - | _ -> false + (* Initiating error handling *) -let is_simple_construct :construct -> bool = function - | `nil | `tuple | `list _ | `simple _ | `cons _ -> true - | `normal -> false + val initiating_error_handling: unit -> unit + (* Resuming error handling *) -(* Determines if a list of expressions contains a single unit construct - * e.g. used to check: MyConstructor() -> exprList == [()] - * useful to determine if MyConstructor(()) should be printed as MyConstructor() - * *) -let is_single_unit_construct exprList = - match exprList with - | x::[] -> - let view = view_expr x in - (match view with - | `tuple -> true - | _ -> false) - | _ -> false + val resuming_error_handling: unit -> unit -let pp = fprintf + (* Handling error in state *) -type funcReturnStyle = - | ReturnValOnSameLine + val handling_error: state -> unit -let detectTernary l = match l with - | [{ - pc_lhs={ppat_desc=Ppat_construct ({txt=Lident "true"}, _)}; - pc_guard=None; - pc_rhs=ifTrue - }; - { - pc_lhs={ppat_desc=Ppat_construct ({txt=Lident "false"}, _)}; - pc_guard=None; - pc_rhs=ifFalse - }] -> Some (ifTrue, ifFalse) - | _ -> None -type funcApplicationLabelStyle = - (* No attaching to the label, but if the entire application fits on one line, - the entire application will appear next to the label as you 'd expect. *) - | NeverWrapFinalItem - (* Attach the first term if there are exactly two terms involved in the - application. + end - let x = firstTerm (secondTerm_1 secondTerm_2) thirdTerm; +end - Ideally, we'd be able to attach all but the last argument into the label any - time all but the last term will fit - and *not* when (attaching all but - the last term isn't enough to prevent a wrap) - But there's no way to tell - ahead of time if it would prevent a wrap. +(* --------------------------------------------------------------------------- *) - However, the number two is somewhat convenient. This models the - indentation that you'd prefer in non-curried syntax languages like - JavaScript, where application only ever has two terms. - *) - | WrapFinalListyItemIfFewerThan of int +(* This signature describes the monolithic (traditional) LR engine. *) -(* - space=2, indentWrappedPatternArgs=1, funcReturnStyle=ReturnValOnSameLine - ------------------------------------------------------------------------ - (* When [ReturnValOnSameLine], [indentWrappedPatternArgs] has no effect! *) - let myFunc - (wrappedArgOne:int) - (wrappedArgTwo:int) => { - valOne: 10, - valTwo: 20 - }; +(* In this interface, the parser controls the lexer. *) - space=2, indentWrappedPatternArgs=2, funcReturnStyle=ReturnValOnSameLine - ------------------------------------------------------------------------ - (* When [ReturnValOnSameLine], [indentWrappedPatternArgs] has no effect! *) - let myFunc - (wrappedArgOne:int) - (wrappedArgTwo:int) => { - valOne: 10, - valTwo: 20 - }; +module type MONOLITHIC_ENGINE = sig -*) + type state -type formatSettings = { - (* Whether or not to expect that the original parser that generated the AST - would have annotated constructor argument tuples with explicit arity to - indicate that they are multiple arguments. (True if parsed in original - OCaml AST, false if using Reason parser). - *) - constructorTupleImplicitArity: bool; - space: int; - (* Whether or not to begin a curried function's return expression immediately - after the [=>] without a newline. - *) - returnStyle: funcReturnStyle; + type token - (* For curried arguments in function *definitions* only: Number of [space]s - to offset beyond the [let] keyword. Default 1. - *) - listsRecordsIndent: int; + type semantic_value - (* When [funcReturnStyle] = [ReturnValOnSameLine], - [indentWrappedPatternArgs] is not adjustable - wrapped arguments will - always be aligned with the function name. *) - indentWrappedPatternArgs: int; + (* An entry point to the engine requires a start state, a lexer, and a lexing + buffer. It either succeeds and produces a semantic value, or fails and + raises [Error]. *) - indentMatchCases: int; + exception Error - (* Amount to indent in label-like constructs such as wrapped function - applications, etc - or even record fields. This is not the same concept as an - indented curried argument list. *) - indentAfterLabels: int; + val entry: + state -> + (Lexing.lexbuf -> token) -> + Lexing.lexbuf -> + semantic_value - (* Amount to indent after the opening brace of switch/try. - Here's an example of what it would look like w/ [trySwitchIndent = 2]: - Sticks the expression to the last item in a sequence in several [X | Y | Z - => expr], and forces X, Y, Z to be split onto several lines. (Otherwise, - sticking to Z would result in hanging expressions). TODO: In the first case, - it's clear that we want patterns to have an "extra" indentation with matching - in a "match". Create extra config param to pass to [self#pattern] for extra - indentation in this one case. +end - switch x { - | TwoCombos - (HeresTwoConstructorArguments x y) - (HeresTwoConstructorArguments a b) => - ((a + b) + x) + y; - | Short - | AlsoHasARecord a b {x, y} => ( - retOne, - retTwo - ) - | AlsoHasARecord a b {x, y} => - callMyFunction - withArg - withArg - withArg - withArg; - } - *) - trySwitchIndent: int; +(* --------------------------------------------------------------------------- *) +(* The following signatures describe the incremental LR engine. *) - (* In the case of two term function application (when flattened), the first - term should become part of the label, and the second term should be able to wrap - This doesn't effect n != 2. +(* First, see [INCREMENTAL_ENGINE] in the file [IncrementalEngine.ml]. *) - [true] - let x = reallyShort allFitsOnOneLine; - let x = someFunction { - reallyLongObject: true, - thatWouldntFitOnThe: true, - firstLine: true - }; +(* The [start] function is set apart because we do not wish to publish + it as part of the generated [parser.mli] file. Instead, the table + back-end will publish specialized versions of it, with a suitable + type cast. *) - [false] - let x = reallyShort allFitsOnOneLine; - let x = - someFunction - { - reallyLongObject: true, - thatWouldntFitOnThe: true, - firstLine: true - }; - *) - funcApplicationLabelStyle: funcApplicationLabelStyle; +module type INCREMENTAL_ENGINE_START = sig - funcCurriedPatternStyle: funcApplicationLabelStyle; + (* [start] is an entry point. It requires a start state and a start position + and begins the parsing process. If the lexer is based on an OCaml lexing + buffer, the start position should be [lexbuf.lex_curr_p]. [start] produces + a checkpoint, which usually will be an [InputNeeded] checkpoint. (It could + be [Accepted] if this starting state accepts only the empty word. It could + be [Rejected] if this starting state accepts no word at all.) It does not + raise any exception. *) - width: int; + (* [start s pos] should really produce a checkpoint of type ['a checkpoint], + for a fixed ['a] that depends on the state [s]. We cannot express this, so + we use [semantic_value checkpoint], which is safe. The table back-end uses + [Obj.magic] to produce safe specialized versions of [start]. *) - assumeExplicitArity: bool; + type state + type semantic_value + type 'a checkpoint - constructorLists: string list; -} + val start: + state -> + Lexing.position -> + semantic_value checkpoint -let defaultSettings = { - constructorTupleImplicitArity = false; - space = 1; - returnStyle = ReturnValOnSameLine; - listsRecordsIndent = 2; - indentWrappedPatternArgs = 2; - indentMatchCases = 2; - indentAfterLabels = 2; - trySwitchIndent = 0; - funcApplicationLabelStyle = WrapFinalListyItemIfFewerThan 3; - (* WrapFinalListyItemIfFewerThan is currently a bad idea for curried - arguments: It looks great in some cases: +end - let myFun (a:int) :( - int, - string - ) => (a, "this is a"); +(* --------------------------------------------------------------------------- *) - But horrible in others: +(* This signature describes the LR engine, which combines the monolithic + and incremental interfaces. *) - let myFun - { - myField, - yourField - } :someReturnType => myField + yourField; +module type ENGINE = sig - let myFun - { // Curried arg wraps - myField, - yourField - } : ( // But the last is "listy" so it docks - int, // To the [let]. - int, - int - ) => myField + yourField; + include MONOLITHIC_ENGINE - We probably want some special listy label docking/wrapping mode for - curried function bindings. + include IncrementalEngine.INCREMENTAL_ENGINE + with type token := token + and type 'a lr1state = state (* useful for us; hidden from the end user *) - *) - funcCurriedPatternStyle = NeverWrapFinalItem; - width = 100; - assumeExplicitArity = false; - constructorLists = []; -} -let configuredSettings = ref defaultSettings + include INCREMENTAL_ENGINE_START + with type state := state + and type semantic_value := semantic_value + and type 'a checkpoint := 'a checkpoint -let configure ~width ~assumeExplicitArity ~constructorLists = ( - configuredSettings := {defaultSettings with width; assumeExplicitArity; constructorLists} -) +end +end +module Engine : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let string_of_formatter f x = - Format.asprintf "%a" f x +open EngineTypes -let createFormatter () = -let module Formatter = struct +(* The LR parsing engine. *) -let settings = !configuredSettings +module Make (T : TABLE) +: ENGINE + with type state = T.state + and type token = T.token + and type semantic_value = T.semantic_value + and type production = T.production + and type 'a env = (T.state, T.semantic_value, T.token) EngineTypes.env +(* We would prefer not to expose the definition of the type [env]. + However, it must be exposed because some of the code in the + inspection API needs access to the engine's internals; see + [InspectionTableInterpreter]. Everything would be simpler if + --inspection was always ON, but that would lead to bigger parse + tables for everybody. *) +end +module ErrorReports : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -(* How do we make - this a label? +(* -------------------------------------------------------------------------- *) - /---------------------\ - let myVal = (oneThing, { - field: [], - anotherField: blah - }); +(* The following functions help keep track of the start and end positions of + the last two tokens in a two-place buffer. This is used to nicely display + where a syntax error took place. *) - But in this case, this wider region a label? - /------------------------------------------------------\ - let myVal = callSomeFunc (oneThing, {field: [], anotherField: blah}, { - boo: 'hi' - }); +type 'a buffer - This is difficult. You must form a label from the preorder traversal of every - node - except the last encountered in the traversal. An easier heuristic is: +(* [wrap lexer] returns a pair of a new (initially empty) buffer and a lexer + which internally relies on [lexer] and updates [buffer] on the fly whenever + a token is demanded. *) - - The last argument to a functor application is expanded. +open Lexing - React.CreateClass SomeThing { - let render {props} => { - }; - } +val wrap: + (lexbuf -> 'token) -> + (position * position) buffer * (lexbuf -> 'token) - - The last argument to a function application is expanded on the same line. - - Only if it's not curried with another invocation. - -- Optionally: "only if everything else is an atom" - -- Optionally: "only if there are no other args" +(* [show f buffer] prints the contents of the buffer, producing a string that + is typically of the form "after '%s' and before '%s'". The function [f] is + used to print an element. The buffer MUST be nonempty. *) - React.createClass someThing { - render: fn x => y, - } +val show: ('a -> string) -> 'a buffer -> string - !!! NOT THIS - React.createClass someThing { - render: fn x => y, - } - somethingElse -*) +(* [last buffer] returns the last element of the buffer. The buffer MUST be + nonempty. *) -let isArityClear attrs = - (!configuredSettings).assumeExplicitArity || - List.exists - (function - | ({txt="explicit_arity"; loc}, _) -> true - | _ -> false - ) - attrs +val last: 'a buffer -> 'a +(* -------------------------------------------------------------------------- *) +end +module Printers : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let list_settings = { - Easy_format.space_after_opening = false; - space_after_separator = false; - space_before_separator = false; - separators_stick_left = true; - space_before_closing = false; - stick_to_label = true; - align_closing = true; - wrap_body = `No_breaks; - indent_body = settings.listsRecordsIndent * settings.space; - list_style = Some "list"; - opening_style = None; - body_style = None; - separator_style = None; - closing_style = None; -} +(* This module is part of MenhirLib. *) -let nullStyle = { Easy_format.atom_style = Some "null" } -let boolStyle = { Easy_format.atom_style = Some "bool" } -let intStyle = { Easy_format.atom_style = Some "int" } -let stringStyle = { Easy_format.atom_style = Some "string" } -let labelStringStyle = { Easy_format.atom_style = Some "atomClss" } -let colonStyle = { Easy_format.atom_style = Some "punct" } - -let simplifiedApplicationSettings = { - list_settings with - align_closing = true; (* So the semicolon sticks to end of application *) - (* This must be true to support this case: - - let oneNestedInvocationThatWraps = outerFunc ( - nestedFuncToInvokeThatCausesWrapping - [] - ); +module Make - Otherwise, we would get: - let oneNestedInvocationThatWraps = outerFunc - (nestedFuncToInvokeThatCausesWrapping []); - *) - stick_to_label = true; (* I don't believe this has a purpose *) - space_after_separator = true; - wrap_body = `Never_wrap -} + (I : IncrementalEngine.EVERYTHING) -let easyListSettingsFromListConfig listConfig = - let { - break; - wrap; - inline; - indent; - sepLeft; - preSpace; - postSpace; - pad; - sep; - } = listConfig in - let (opn, cls) = wrap in - let (padOpn, padCls) = pad in - let (inlineStart, inlineEnd) = inline in - (opn, sep, cls, { - list_settings with - wrap_body = ( - match break with - | Never -> `No_breaks - (* Yes, `Never_wrap is a horrible name - really means "if needed". *) - | IfNeed -> `Never_wrap - | Always -> `Force_breaks - | Always_rec -> `Force_breaks_rec - ); - indent_body = indent; - space_after_separator = postSpace; - space_before_separator = preSpace; - space_after_opening = padOpn; - space_before_closing = padCls; - stick_to_label = inlineStart; - align_closing = not inlineEnd; - }) - -let makeListConfig - ?(newlinesAboveItems=0) - ?(newlinesAboveComments=0) - ?(newlinesAboveDocComments=0) - ?(interleaveComments=true) - ?listConfigIfCommentsInterleaved - ?(listConfigIfEolCommentsInterleaved) - ?(renderFinalSep=false) - ?(break=Never) - ?(wrap=("", "")) - ?(inline=(true, false)) - ?(sep="") - ?(indent=list_settings.indent_body) - ?(sepLeft=true) - ?(preSpace=false) - ?(postSpace=false) - ?(pad=(false,false)) - () = - { - newlinesAboveItems; - newlinesAboveComments; - newlinesAboveDocComments; - interleaveComments; - listConfigIfCommentsInterleaved; - listConfigIfEolCommentsInterleaved; - renderFinalSep; - break; - wrap; - inline; - sep; - indent; - sepLeft; - preSpace; - postSpace; - pad; - } + (User : sig -let easyListWithConfig listConfig easyListItems = - let (opn, sep, cls, settings) = - easyListSettingsFromListConfig listConfig in - Easy_format.List ((opn, sep, cls, settings), easyListItems) + (* [print s] is supposed to send the string [s] to some output channel. *) -let makeEasyList - ?(newlinesAboveItems=0) - ?(newlinesAboveComments=0) - ?(newlinesAboveDocComments=0) - ?(interleaveComments=true) - ?(renderFinalSep=false) - ?(break=Never) - ?(wrap=("", "")) - ?(inline=(true, false)) - ?(sep="") - ?(indent=list_settings.indent_body) - ?(sepLeft=true) - ?(preSpace=false) - ?(postSpace=false) - ?(pad=(false,false)) easyListItems = - let listConfig = - makeListConfig - ~newlinesAboveItems - ~newlinesAboveComments - ~newlinesAboveDocComments - ~interleaveComments - (* This is unused at this point - separators are handled by our pretty printer, - not Easy_format (so that we can interleave comments intelligently) *) - ~renderFinalSep - ~break - ~wrap - ~inline - ~sep - ~indent - ~sepLeft - ~preSpace - ~postSpace - ~pad - () - in - let (opn, sep, cls, listSettings) = easyListSettingsFromListConfig listConfig in - Easy_format.List ((opn, sep, cls, listSettings), easyListItems) + val print: string -> unit -let makeList - (* Allows a fallback in the event that comments were interleaved with the - * list *) - ?(newlinesAboveItems=0) - ?(newlinesAboveComments=0) - ?(newlinesAboveDocComments=0) - ?(interleaveComments=true) - ?listConfigIfCommentsInterleaved - ?listConfigIfEolCommentsInterleaved - ?(renderFinalSep=false) - ?(break=Never) - ?(wrap=("", "")) - ?(inline=(true, false)) - ?(sep="") - ?(indent=list_settings.indent_body) - ?(sepLeft=true) - ?(preSpace=false) - ?(postSpace=false) - ?(pad=(false,false)) lst = - let config = - makeListConfig - ~newlinesAboveItems - ~newlinesAboveComments - ~newlinesAboveDocComments - ~interleaveComments - ?listConfigIfCommentsInterleaved - ?listConfigIfEolCommentsInterleaved - ~renderFinalSep - ~break - ~wrap - ~inline - ~sep - ~indent - ~sepLeft - ~preSpace - ~postSpace - ~pad - () - in - Sequence (config, lst) + (* [print_symbol s] is supposed to print a representation of the symbol [s]. *) -let makeAppList l = - match l with - | hd::[] -> hd - | _ -> makeList ~inline:(true, true) ~postSpace:true ~break:IfNeed l + val print_symbol: I.xsymbol -> unit -let makeTup l = - makeList ~wrap:("(",")") ~sep:"," ~postSpace:true ~break:IfNeed l + (* [print_element e] is supposed to print a representation of the element [e]. + This function is optional; if it is not provided, [print_element_as_symbol] + (defined below) is used instead. *) -let ensureSingleTokenSticksToLabel x = - makeList - ~interleaveComments:true - ~listConfigIfCommentsInterleaved: ( - fun currentConfig -> {currentConfig with break=Always_rec; postSpace=true; indent=0; inline=(true, true)} - ) - [x] + val print_element: (I.element -> unit) option -let unbreakLabelFormatter formatter = - let newFormatter labelTerm term = - match formatter labelTerm term with - | Easy_format.Label ((labelTerm, settings), term) -> - Easy_format.Label ((labelTerm, - {settings with label_break = `Never}), - term) - | _ -> failwith "not a label" - in newFormatter + end) -let inlineLabel labelTerm term = - let settings = { - label_break = `Never; - space_after_label = true; - indent_after_label = 0; - label_style = Some "inlineLabel"; - } in - Easy_format.Label ((labelTerm, settings), term) +: sig -(* Just for debugging: Set debugWithHtml = true *) -let debugWithHtml = ref false + open I -let html_escape_string s = - let buf = Buffer.create (2 * String.length s) in - for i = 0 to String.length s - 1 do - match s.[i] with - '&' -> Buffer.add_string buf "&" - | '<' -> Buffer.add_string buf "<" - | '>' -> Buffer.add_string buf ">" - | c -> Buffer.add_char buf c - done; - Buffer.contents buf + (* Printing a list of symbols. *) -let html_escape = `Escape_string html_escape_string -let html_style = [ - "atom", { Easy_format.tag_open = ""; tag_close = "" }; - "body", { tag_open = ""; tag_close = "" }; - "list", { tag_open = ""; tag_close = "" }; - "op", { tag_open = ""; tag_close = "" }; - "cl", { tag_open = ""; tag_close = "" }; - "sep", { tag_open = ""; tag_close = "" }; - "label", { tag_open = ""; tag_close = "" }; -] + val print_symbols: xsymbol list -> unit + (* Printing an element as a symbol. This prints just the symbol + that this element represents; nothing more. *) -let easyLabel ?(break=`Auto) ?(space=false) ?(indent=settings.indentAfterLabels) labelTerm term = - let settings = { - label_break = break; - space_after_label = space; - indent_after_label = indent; - label_style = Some "label"; - } in - Easy_format.Label ((labelTerm, settings), term) + val print_element_as_symbol: element -> unit -let label ?(break=`Auto) ?(space=false) ?(indent=settings.indentAfterLabels) (labelTerm:layoutNode) (term:layoutNode) = - Label ( - (fun x y -> easyLabel ~break ~indent ~space x y), - labelTerm, - term - ) + (* Printing a stack as a list of elements. This function needs an element + printer. It uses [print_element] if provided by the user; otherwise + it uses [print_element_as_symbol]. (Ending with a newline.) *) -let labelSpace l r = label ~space:true l r + val print_stack: 'a env -> unit -let atom ?loc str = - let layout = Easy (Easy_format.Atom(str, labelStringStyle)) in - wrapLayoutWithLoc loc layout + (* Printing an item. (Ending with a newline.) *) -let easyAtom str = Easy_format.Atom(str, labelStringStyle) + val print_item: item -> unit -(** Take x,y,z and n and generate [x, y, z, ...n] *) -let makeES6List ?wrap:(wrap=("", "")) lst last = - let (left, right) = wrap in - let last_dots = makeList [atom "..."; last] in - makeList ~wrap:(left ^ "[", "]" ^ right) ~break:IfNeed ~postSpace:true ~sep:"," (lst @ [last_dots]) + (* Printing a production. (Ending with a newline.) *) -let makeNonIndentedBreakingList lst = - (* No align closing: So that semis stick to the ends of every break *) - makeList ~break:Always_rec ~indent:0 ~inline:(true, true) lst + val print_production: production -> unit -let break = - (* No align closing: So that semis stick to the ends of every break *) - makeListConfig ~break:Always_rec ~indent:0 ~inline:(true, true) () + (* Printing the current LR(1) state. The current state is first displayed + as a number; then the list of its LR(0) items is printed. (Ending with + a newline.) *) -let makeBreakableList lst = makeList ~break:IfNeed ~inline:(true, true) lst + val print_current_state: 'a env -> unit -(* Like a could place with other breakableInline lists without upsetting final semicolons *) -let makeSpacedBreakableInlineList lst = - makeList ~break:IfNeed ~inline:(true, true) ~postSpace:true lst + (* Printing a summary of the stack and current state. This function just + calls [print_stack] and [print_current_state] in succession. *) -let makeCommaBreakableList lst = makeList ~break:IfNeed ~postSpace:true lst + val print_env: 'a env -> unit -let makeCommaBreakableListSurround opn cls lst = - makeList ~break:IfNeed ~postSpace:true ~sep:"," ~wrap:(opn, cls) lst +end +end +module InfiniteArray : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -(* TODO: Allow configuration of spacing around colon symbol *) +(** This module implements infinite arrays. **) +type 'a t -let formatPrecedence ?loc formattedTerm = - let withParens = makeList ~wrap:("(", ")") ~break:IfNeed [formattedTerm] in - match loc with - | None -> withParens - | Some l -> SourceMap (l, withParens) +(** [make x] creates an infinite array, where every slot contains [x]. **) +val make: 'a -> 'a t -(* What to do when a comment wasn't interleaved in a list - default is to attach and break. *) -let fallbackCommentListConfig = break +(** [get a i] returns the element contained at offset [i] in the array [a]. + Slots are numbered 0 and up. **) +val get: 'a t -> int -> 'a +(** [set a i x] sets the element contained at offset [i] in the array + [a] to [x]. Slots are numbered 0 and up. **) +val set: 'a t -> int -> 'a -> unit -let eolCommentListConfig = makeListConfig ~break:Never ~postSpace:true ~inline:(true, true) () +(** [extent a] is the length of an initial segment of the array [a] + that is sufficiently large to contain all [set] operations ever + performed. In other words, all elements beyond that segment have + the default value. *) +val extent: 'a t -> int -let isListy = function - | Easy_format.List _ -> true - | _ -> false +(** [domain a] is a fresh copy of an initial segment of the array [a] + whose length is [extent a]. *) +val domain: 'a t -> 'a array +end +module PackedIntArray : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let easyFormatToFormatter f x = - let buf = Buffer.create 1000 in - let fauxmatter = Format.formatter_of_buffer buf in - let _ = Format.pp_set_margin fauxmatter settings.width in - if debugWithHtml.contents then - Easy_format.Pretty.define_styles fauxmatter html_escape html_style; - let _ = Easy_format.Pretty.to_formatter fauxmatter x in - let trimmed = Syntax_util.strip_trailing_whitespace (Buffer.contents buf) in - Format.fprintf f "%s\n" trimmed; - pp_print_flush f () +(* A packed integer array is represented as a pair of an integer [k] and + a string [s]. The integer [k] is the number of bits per integer that we + use. The string [s] is just an array of bits, which is read in 8-bit + chunks. *) -let wrap fn = fun term -> - ignore (flush_str_formatter ()); - let f = str_formatter in - (fn f term; atom (flush_str_formatter ())) +(* The ocaml programming language treats string literals and array literals + in slightly different ways: the former are statically allocated, while + the latter are dynamically allocated. (This is rather arbitrary.) In the + context of Menhir's table-based back-end, where compact, immutable + integer arrays are needed, ocaml strings are preferable to ocaml arrays. *) +type t = + int * string -(** Either an ItemComment (not eol) designates if it's a doc comment (which - have extra leading stars). Or an Item which might include its eol - comments. *) -type commentOrItem = - | ItemComment of Easy_format.t * bool - (* The item, and a list of "end of line" comments to render *) - | Item of (Easy_format.t * Easy_format.t list) +(* [pack a] turns an array of integers into a packed integer array. *) +(* Because the sign bit is the most significant bit, the magnitude of + any negative number is the word size. In other words, [pack] does + not achieve any space savings as soon as [a] contains any negative + numbers, even if they are ``small''. *) -(** - * Invokes the supplied partitioning function with normalized location - * positions. AST nodes and comments' locations have endpoints that are not one - * beyond the actual end. [extractComments] normalizes this and provides - * the exact first/last character position. The function should return true iff - * an item with that exact location is to be included in the left partition. - * - * The callback is invoked with both normalized physical location, as well as - * the "attachment" location. The attachment location makes note of where - * the comment was relative to indentation or the beginning of a line. - * - * Attachment location: What portion of text is the comment annotating - * (including the comment text itself)? - * Physical location: Where in the file was the comment? Usually a subset of - * attachment location. - *) -let rec extractComments comments tester = - let open Lexing in - (* There might be an issue here - we shouldn't have to split "up to and including". - Up to should be sufficient. Comments' end position might be off by one (too large) *) - comments |> List.partition (fun (str, attLoc, physLoc) -> - let oneGreaterThanAttachmentLocEnd = attLoc.loc_end.pos_cnum in - let attachmentLocLastChar = oneGreaterThanAttachmentLocEnd - 1 in - let oneGreaterThanPhysLocEnd = physLoc.loc_end.pos_cnum in - let physLastChar = oneGreaterThanPhysLocEnd - 1 in - tester attLoc.loc_start.pos_cnum attachmentLocLastChar physLoc.loc_start.pos_cnum physLastChar - ) +val pack: int array -> t -(* Don't use `trim` since it kills line return too? *) -let rec beginsWithStar_ line length idx = - if idx = length then false - else - let ch = String.get line idx in - if ch = '*' then true - else if ch = '\t' || ch = ' ' then beginsWithStar_ line length (idx + 1) - else false +(* [get t i] returns the integer stored in the packed array [t] at index [i]. *) -let beginsWithStar line = beginsWithStar_ line (String.length line) 0 +(* Together, [pack] and [get] satisfy the following property: if the index [i] + is within bounds, then [get (pack a) i] equals [a.(i)]. *) -let rec numLeadingSpace_ line length idx accum = - if idx = length then accum - else - let ch = String.get line idx in - if ch = '\t' || ch = ' ' then numLeadingSpace_ line length (idx + 1) (accum + 1) - else accum +val get: t -> int -> int -let numLeadingSpace line = numLeadingSpace_ line (String.length line) 0 0 +(* [get1 t i] returns the integer stored in the packed array [t] at index [i]. + It assumes (and does not check) that the array's bit width is [1]. The + parameter [t] is just a string. *) -(* Computes the smallest leading spaces for non-empty lines *) -let smallestLeadingSpaces strs = - let rec smallestLeadingSpaces curMin strs = match strs with - | [] -> curMin - | hd::tl -> - if hd = "" then - smallestLeadingSpaces curMin tl - else - let leadingSpace = numLeadingSpace hd in - let nextMin = min curMin leadingSpace in - smallestLeadingSpaces nextMin tl - in - smallestLeadingSpaces 99999 strs +val get1: string -> int -> int -let convertIsListyToIsSequencey isListyImpl = - let rec isSequencey layoutNode = match layoutNode with - | SourceMap (_, subLayoutNode) -> isSequencey subLayoutNode - | Sequence _ -> true - | WithEOLComment (_, sub) -> isSequencey sub - | Label (_, _, _) -> false - | Easy easy -> isListyImpl easy - in - isSequencey +(* [unflatten1 (n, data) i j] accesses the two-dimensional bitmap + represented by [(n, data)] at indices [i] and [j]. The integer + [n] is the width of the bitmap; the string [data] is the second + component of the packed array obtained by encoding the table as + a one-dimensional array. *) -let isSequencey = convertIsListyToIsSequencey isListy +val unflatten1: int * string -> int -> int -> int -let inline ?(preSpace=false) ?(postSpace=false) labelTerm term = - makeList ~inline:(true, true) ~postSpace ~preSpace ~indent:0 ~break:Never [labelTerm; term] +end +module RowDisplacement : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let breakline labelTerm term = - makeList ~inline:(true, true) ~indent:0 ~break:Always_rec [labelTerm; term] +(* This module compresses a two-dimensional table, where some values + are considered insignificant, via row displacement. *) -let insertBlankLines n term = - if n = 0 then - term - else - makeList ~inline:(true, true) ~indent:0 ~break:Always_rec (Array.to_list (Array.make n (atom "")) @ [term]) +(* A compressed table is represented as a pair of arrays. The + displacement array is an array of offsets into the data array. *) -let string_after s n = String.sub s n (String.length s - n) +type 'a table = + int array * (* displacement *) + 'a array (* data *) -let wrapComment = function - | "" | "*" -> "/***/" - | txt when txt.[0] = '*' && txt.[1] <> '*' -> "/**" ^ txt ^ "*/" - | txt -> "/*" ^ txt ^ "*/" +(* [compress equal insignificant dummy m n t] turns the two-dimensional table + [t] into a compressed table. The parameter [equal] is equality of data + values. The parameter [wildcard] tells which data values are insignificant, + and can thus be overwritten with other values. The parameter [dummy] is + used to fill holes in the data array. [m] and [n] are the integer + dimensions of the table [t]. *) -(* This is a special-purpose functions only used by `formatComment_`. Notice we -skip a char below during usage because we know the comment starts with `/*` *) -let rec lineZeroMeaningfulContent_ line length idx accum = - if idx = length then None - else - let ch = String.get line idx in - if ch = '\t' || ch = ' ' || ch = '*' then - lineZeroMeaningfulContent_ line length (idx + 1) (accum + 1) - else Some accum +val compress: + ('a -> 'a -> bool) -> + ('a -> bool) -> + 'a -> + int -> int -> + 'a array array -> + 'a table -let lineZeroMeaningfulContent line = lineZeroMeaningfulContent_ line (String.length line) 1 0 +(* [get ct i j] returns the value found at indices [i] and [j] in the + compressed table [ct]. This function call is permitted only if the + value found at indices [i] and [j] in the original table is + significant -- otherwise, it could fail abruptly. *) -let formatComment_ txt = - let commLines = Syntax_util.split_by ~keep_empty:true (fun x -> x = '\n') (wrapComment txt) in - match commLines with - | [] -> atom "" - | [hd] -> - makeList ~inline:(true, true) ~postSpace:true ~preSpace:true ~indent:0 ~break:IfNeed [atom hd] - | zero::one::tl -> - let attemptRemoveCount = (smallestLeadingSpaces (one::tl)) in - let leftPad = - if beginsWithStar one then 1 - else match lineZeroMeaningfulContent zero with - | None -> 1 - | Some num -> num + 1 - in - let padNonOpeningLine s = - let numLeadingSpaceForThisLine = numLeadingSpace s in - if String.length s == 0 then "" - else (String.make leftPad ' ') ^ - (string_after s (min attemptRemoveCount numLeadingSpaceForThisLine)) in - let lines = zero :: List.map padNonOpeningLine (one::tl) in - makeList ~inline:(true, true) ~indent:0 ~break:Always_rec (List.map atom lines) +(* Together, [compress] and [get] have the property that, if the value + found at indices [i] and [j] in an uncompressed table [t] is + significant, then [get (compress t) i j] is equal to that value. *) -let formatComment ?locOpt txt = - let list = formatComment_ txt in - match locOpt with - | None -> - list - | Some loc -> - SourceMap (loc, list) - -(** [hasComment layout] checks if a layout has comment attached to it *) -let rec hasComment = function - | WithEOLComment (_, _) -> true - | SourceMap (_, sub) -> hasComment sub - | _ -> false +val get: + 'a table -> + int -> int -> + 'a -let rec append ?(space=false) txt = function - | SourceMap (loc, sub) -> SourceMap (loc, append ~space txt sub) - | Sequence (config, l) when snd config.wrap <> "" -> - let sep = if space then " " else "" in - Sequence ({config with wrap=(fst config.wrap, snd config.wrap ^ sep ^ txt)}, l) - | Sequence (config, l) when List.length l = 0 -> - Sequence (config, [atom txt]) - | Sequence (config, l) when config.sep = "" -> - let sub = List.mapi (fun i layout -> - (* append to the end of the list *) - if i + 1 = List.length l then - append ~space txt layout - else - layout - ) l in - Sequence (config, sub) - | Label (formatter, left, right) -> - Label (formatter, left, append ~space txt right) - | layout -> - inline ~postSpace:space layout (atom txt) +(* [getget] is a variant of [get] which only requires read access, + via accessors, to the two components of the table. *) -let appendSep spaceBeforeSep sep layout = - let sep = if spaceBeforeSep then - " " ^ sep - else - sep in - append sep layout +val getget: + ('displacement -> int -> int) -> + ('data -> int -> 'a) -> + 'displacement * 'data -> + int -> int -> + 'a -let rec flattenCommentAndSep ?spaceBeforeSep:(spaceBeforeSep=false) ?sep = function - | WithEOLComment (txt, sub) -> - begin - match sep with - | None -> append ~space:true (wrapComment txt) sub - | Some sep -> append ~space:true (wrapComment txt) - (appendSep spaceBeforeSep sep sub) - end - | Sequence (listConfig, [hd]) when hasComment hd -> - Sequence (listConfig, [flattenCommentAndSep ~spaceBeforeSep ?sep hd]) - | SourceMap (loc, sub) -> - SourceMap (loc, flattenCommentAndSep ~spaceBeforeSep ?sep sub) - | layout -> - begin - match sep with - | None -> layout - | Some sep -> appendSep spaceBeforeSep sep layout - end +end +module LinearizedArray : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let rec preOrderWalk f layout = - match f layout with - | Sequence (listConfig, sublayouts) -> - let newSublayouts = List.map (preOrderWalk f) sublayouts in - (Sequence (listConfig, newSublayouts)) - | Label (formatter, left, right) -> - let newLeftLayout = preOrderWalk f left in - let newRightLayout = preOrderWalk f right in - Label (formatter, newLeftLayout, newRightLayout) - | SourceMap (loc, sub) -> - let newSub = preOrderWalk f sub in - SourceMap (loc, newSub) - | WithEOLComment (c, sub) -> - let newSub = preOrderWalk f sub in - WithEOLComment (c, newSub) - | _ -> layout +(* An array of arrays (of possibly different lengths!) can be ``linearized'', + i.e., encoded as a data array (by concatenating all of the little arrays) + and an entry array (which contains offsets into the data array). *) -(** Recursively unbreaks a layout to make sure they stay within the same line *) -let unbreaklayout = preOrderWalk (function - | Sequence (listConfig, sublayouts) -> - Sequence ({listConfig with break=Never}, sublayouts) - | Label (formatter, left, right) -> - Label (unbreakLabelFormatter formatter, left, right) - | layout -> layout -) +type 'a t = + (* data: *) 'a array * + (* entry: *) int array -(** [consolidateSeparator layout] walks the [layout], extract separators out of each - * list and insert them into PrintTree as separated items - *) -let consolidateSeparator = preOrderWalk (function - | Sequence (listConfig, sublayouts) - when listConfig.sep <> "" - && listConfig.sepLeft - -> - let layoutsWithSepAndComment = - List.mapi (fun i layout -> - (* Do not render the final separator *) - if not listConfig.renderFinalSep && i + 1 = List.length sublayouts then - flattenCommentAndSep ~spaceBeforeSep:listConfig.preSpace layout - else - flattenCommentAndSep ~spaceBeforeSep:listConfig.preSpace ~sep:listConfig.sep layout) sublayouts in - let break = if List.exists hasComment sublayouts then - Always_rec - else - listConfig.break in - let sep = "" in - let preSpace = false in - Sequence ({listConfig with sep; break; preSpace}, layoutsWithSepAndComment) - | WithEOLComment _ as layout -> - makeList ~inline:(true, true) ~postSpace:false ~preSpace:true ~indent:0 - ~break:Always_rec [flattenCommentAndSep layout] - | layout -> layout -) +(* [make a] turns the array of arrays [a] into a linearized array. *) -(** [insertLinesAboveItems layout] walkts the [layout] and insert empty lines - * based on the configuration of newlinesAboveItems - *) -let insertLinesAboveItems = preOrderWalk (function - | Sequence (listConfig, sublayouts) - when listConfig.newlinesAboveItems <> 0 - -> - let layoutsWithLinesInjected = - List.map (insertBlankLines listConfig.newlinesAboveItems) sublayouts in - Sequence ({listConfig with newlinesAboveItems=0}, layoutsWithLinesInjected) - | layout -> layout -) +val make: 'a array array -> 'a t -(** Union of two locations *) -let unionLoc loc1 loc2 = - match (loc1, loc2) with - | None, _ -> loc2 - | _, None -> loc1 - | Some loc1, Some loc2 -> Some {loc1 with loc_end = loc2.loc_end} +(* [read la i j] reads the linearized array [la] at indices [i] and [j]. + Thus, [read (make a) i j] is equivalent to [a.(i).(j)]. *) -(** [getLocFromLayout] recursively takes the unioned location of its children, - * and returns the max one - *) -let rec getLocFromLayout = function - | Sequence (listConfig, subLayouts) -> - let locs = List.map getLocFromLayout subLayouts in - List.fold_left unionLoc None locs - | Label (formatter, left, right) -> - let leftLoc = getLocFromLayout left in - let rightLoc = getLocFromLayout right in - unionLoc leftLoc rightLoc - | SourceMap (loc, _) -> - Some loc - | WithEOLComment (_, sub) -> - getLocFromLayout sub - | _ -> None +val read: 'a t -> int -> int -> 'a -(** - * Returns true if loc1 contains loc2 - *) -let containLoc loc1 loc2 = - loc1.loc_start.Lexing.pos_cnum <= loc2.loc_start.Lexing.pos_cnum && - loc1.loc_end.Lexing.pos_cnum >= loc2.loc_end.Lexing.pos_cnum +(* [write la i j v] writes the value [v] into the linearized array [la] + at indices [i] and [j]. *) -(** - * Returns true if loc1 is before loc2 - *) -let beforeLoc loc1 loc2 = - loc1.loc_end.Lexing.pos_cnum <= loc2.loc_start.Lexing.pos_cnum +val write: 'a t -> int -> int -> 'a -> unit -let attachEOLComment layout txt = - WithEOLComment (txt, layout) +(* [length la] is the number of rows of the array [la]. Thus, [length (make + a)] is equivalent to [Array.length a]. *) +val length: 'a t -> int -(** - * Returns true if the layout's location contains loc - *) -let layoutContainsLoc loc layout = - match getLocFromLayout layout with - | None -> false - | Some subLoc -> containLoc subLoc loc +(* [row_length la i] is the length of the row at index [i] in the linearized + array [la]. Thus, [row_length (make a) i] is equivalent to [Array.length + a.(i)]. *) +val row_length: 'a t -> int -> int -(** - * Returns true if any of the subLayout's location contains loc - *) -let anySublayoutContainLocation loc = - List.exists (layoutContainsLoc loc) +(* [read_row la i] reads the row at index [i], producing a list. Thus, + [read_row (make a) i] is equivalent to [Array.to_list a.(i)]. *) -let isDocComment (c, _, _) = String.length c > 0 && c.[0] == '*' +val read_row: 'a t -> int -> 'a list -(** - * prependSingleLineComment inserts a single line comment right above layout - *) -let rec prependSingleLineComment ?newlinesAboveDocComments:(newlinesAboveDocComments=0) comment layout = - let (txt, _, loc) = comment in - match layout with - | WithEOLComment (c, sub) -> - WithEOLComment (c, prependSingleLineComment ~newlinesAboveDocComments comment sub) - | SourceMap (loc, sub) -> - SourceMap (loc, prependSingleLineComment ~newlinesAboveDocComments comment sub) - | Sequence (config, hd::tl) when config.break = Always_rec-> - Sequence(config, (prependSingleLineComment ~newlinesAboveDocComments comment hd)::tl) - | layout -> - let withComment = breakline (formatComment ~locOpt:loc txt) layout in - if isDocComment comment then - insertBlankLines newlinesAboveDocComments withComment - else - withComment +(* The following variants read the linearized array via accessors + [get_data : int -> 'a] and [get_entry : int -> int]. *) -(** - * [looselyAttachComment layout comment] preorderly walks the layout and - * find a place where the comment can be loosely attached to - *) -let rec looselyAttachComment layout ((txt, _, commentLoc) as comment) = - match layout with - | SourceMap (loc, sub) -> - SourceMap (loc, looselyAttachComment sub comment) - | WithEOLComment (c, sub) -> - WithEOLComment (c, looselyAttachComment sub comment) - | Easy e -> - inline ~postSpace:true layout (formatComment txt) - | Sequence (listConfig, subLayouts) when anySublayoutContainLocation commentLoc subLayouts -> - (* If any of the subLayout strictly contains this comment, recurse into to it *) - let subLayouts = List.map (fun layout -> - if layoutContainsLoc commentLoc layout then - looselyAttachComment layout comment - else - layout - ) subLayouts in - Sequence (listConfig, subLayouts) - | Sequence (listConfig, subLayouts) when subLayouts == [] -> - (* If there are no subLayouts (empty body), create a Sequence of just the comment *) - Sequence (listConfig, [formatComment txt]) - | Sequence (listConfig, subLayouts) -> - let (beforeComment, afterComment) = Syntax_util.pick_while (fun layout -> - match getLocFromLayout layout with - | None -> true - | Some loc -> beforeLoc loc commentLoc - ) subLayouts in - let newSubLayout = match List.rev beforeComment with - | [] -> - prependSingleLineComment comment (List.hd afterComment) :: (List.tl afterComment) - | hd::tl -> (attachEOLComment hd txt :: tl |> List.rev) @ afterComment - in - Sequence (listConfig, newSubLayout) - | Label (formatter, left, right) -> - let leftLoc = getLocFromLayout left in - let rightLoc = getLocFromLayout right in - let newLeft, newRight = match (leftLoc, rightLoc) with - | (None, None) -> - (left, looselyAttachComment right comment) - | (_, Some loc2) when containLoc loc2 commentLoc -> - (left, looselyAttachComment right comment) - | (Some loc1, _) when containLoc loc1 commentLoc -> - (looselyAttachComment left comment, right) - | (Some loc1, Some loc2) when beforeLoc commentLoc loc1 -> - (prependSingleLineComment comment left, right) - | (Some loc1, Some loc2) when beforeLoc commentLoc loc2 -> - (left, prependSingleLineComment comment right) - | _ -> (left, attachEOLComment right txt) - in - Label (formatter, newLeft, newRight) +val row_length_via: + (* get_entry: *) (int -> int) -> + (* i: *) int -> + int -(** - * [insertSingleLineComment layout comment] preorderly walks the layout and - * find a place where the SingleLineComment can be fit into - *) -let rec insertSingleLineComment layout comment = - let (txt, _, commentLoc) = comment in - match layout with - | SourceMap (loc, sub) -> - SourceMap (loc, insertSingleLineComment sub comment) - | WithEOLComment (c, sub) -> - WithEOLComment (c, insertSingleLineComment sub comment) - | Easy e -> - prependSingleLineComment comment layout - | Sequence (listConfig, subLayouts) when subLayouts == [] -> - (* If there are no subLayouts (empty body), create a Sequence of just the comment *) - Sequence (listConfig, [formatComment txt]) - | Sequence (listConfig, subLayouts) -> - let newlinesAboveDocComments = listConfig.newlinesAboveDocComments in - let (beforeComment, afterComment) = Syntax_util.pick_while (fun layout -> - match getLocFromLayout layout with - | None -> true - | Some loc -> beforeLoc loc commentLoc - ) subLayouts in - begin - match afterComment with - | (* Nothing in the list is after comment, attach comment to the statement before the comment *) - [] -> let revBeforeComment = List.rev beforeComment in - let lastItemBeforeComment = List.hd revBeforeComment in - Sequence (listConfig, (List.rev - (breakline lastItemBeforeComment (formatComment ~locOpt:commentLoc txt) :: (List.tl revBeforeComment)))) - | hd::tl -> - let afterComment = - match getLocFromLayout hd with - | Some loc when containLoc loc commentLoc -> - insertSingleLineComment hd comment :: tl - | Some loc -> - SourceMap (loc, (prependSingleLineComment ~newlinesAboveDocComments comment hd)) :: tl - | _ -> - prependSingleLineComment ~newlinesAboveDocComments comment hd :: tl - in - Sequence (listConfig, beforeComment @ afterComment) - end - | Label (formatter, left, right) -> - let leftLoc = getLocFromLayout left in - let rightLoc = getLocFromLayout right in - let newLeft, newRight = match (leftLoc, rightLoc) with - | (None, None) -> - (left, insertSingleLineComment right comment) - | (_, Some loc2) when containLoc loc2 commentLoc -> - (left, insertSingleLineComment right comment) - | (Some loc1, _) when containLoc loc1 commentLoc -> - (insertSingleLineComment left comment, right) - | (Some loc1, Some loc2) when beforeLoc commentLoc loc1 -> - (prependSingleLineComment comment left, right) - | (Some loc1, Some loc2) when beforeLoc commentLoc loc2 -> - (left, prependSingleLineComment comment right) - | _ -> (left, breakline right (formatComment ~locOpt:commentLoc txt)) - in - Label (formatter, newLeft, newRight) - -let rec attachCommentToNodeRight layout ((txt, t, loc) as comment) = - match layout with - | Sequence (config, sub) when snd config.wrap <> "" -> - Sequence ({config with wrap=(fst config.wrap, snd config.wrap ^ " " ^ (wrapComment txt))}, sub) - | SourceMap (loc, sub) -> - SourceMap (loc, attachCommentToNodeRight sub comment) - | layout -> - begin - match t with - | EndOfLine -> - WithEOLComment (txt, layout) - | _ -> - inline ~postSpace:true layout (formatComment txt) - end +val read_via: + (* get_data: *) (int -> 'a) -> + (* get_entry: *) (int -> int) -> + (* i: *) int -> + (* j: *) int -> + 'a -let rec attachCommentToNodeLeft ((txt, _, loc) as comment) layout = - match layout with - | Sequence (config, sub) when snd config.wrap <> "" -> - Sequence ({config with wrap=(wrapComment txt ^ " " ^ (fst config.wrap), snd config.wrap)}, sub) - | SourceMap (loc, sub) -> - SourceMap (loc, attachCommentToNodeLeft comment sub ) - | layout -> - Label (inlineLabel, (formatComment txt), layout) +val read_row_via: + (* get_data: *) (int -> 'a) -> + (* get_entry: *) (int -> int) -> + (* i: *) int -> + 'a list -let isNone opt = - match opt with - | None -> true | _ -> false +end +module TableFormat : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) +(* This signature defines the format of the parse tables. It is used as + an argument to [TableInterpreter.Make]. *) -(** [tryPerfectlyAttachComment layout comment] postorderly walk the [layout] and tries - * to perfectly attach a comment with a layout node. - * - * Perfectly attach here means a comment's start location is equal to the node's end location - * and vice versa. - * - * If the comment can be perfectly attached to any layout node, returns (newLayout, None), - * meaning the comment is consumed. Otherwise returns the (unchangedLayout, Some comment), - * meaning the comment is not consumed. - *) -let rec tryPerfectlyAttachComment layout comment = - match comment with - | None -> layout, comment - | Some ((s, t, commLoc) as c) -> begin - match layout with - | Sequence (listConfig, subLayouts) -> - let distributeCommentIntoSubLayouts (i, processed, newComment) layout = - let (layout, newComment) = tryPerfectlyAttachComment layout newComment in - i + 1, layout::processed, newComment - in - let (_, processed, consumed) = List.fold_left distributeCommentIntoSubLayouts - (0, [], comment) (List.rev subLayouts) in - Sequence (listConfig, processed), consumed - | Label (labelFormatter, left, right) -> - let (newRight, comment) = tryPerfectlyAttachComment right comment in - let (newLeft, comment) = tryPerfectlyAttachComment left comment in - Label (labelFormatter, newLeft, newRight), comment - | SourceMap (loc, subLayout) -> - if loc.loc_end.Lexing.pos_lnum = loc.loc_start.Lexing.pos_lnum && - commLoc.loc_start.Lexing.pos_cnum = loc.loc_end.Lexing.pos_cnum then - SourceMap (loc, makeList ~inline:(true, true) ~break:Always - [unbreaklayout (attachCommentToNodeRight subLayout c)]), None - else - let (layout, comment) = tryPerfectlyAttachComment subLayout comment in - begin - match comment with - | None -> (SourceMap (loc, layout), None) - | Some ((s, t, commLoc) as comment)-> - if commLoc.loc_end.Lexing.pos_cnum = loc.loc_start.Lexing.pos_cnum then - SourceMap (loc, attachCommentToNodeLeft comment layout), None - else if commLoc.loc_start.Lexing.pos_cnum = loc.loc_end.Lexing.pos_cnum then - SourceMap (loc, attachCommentToNodeRight layout comment), None - else - SourceMap (loc, layout), Some comment - end - | WithEOLComment (c, sub) -> - let (processed, consumed) = tryPerfectlyAttachComment sub comment in - WithEOLComment (c, processed), consumed - | _ -> layout, comment - end +module type TABLES = sig -(** [insertComment layout comment] inserts comment into layout*) -let insertComment layout comment = - (* print_layout layout; *) - let (txt, t, loc) = comment in - let layout = match t with - | Regular - | EndOfLine -> - let (layout, c) = tryPerfectlyAttachComment layout (Some comment) in - begin - match c with - | None -> layout - | Some _ -> looselyAttachComment layout comment - end - | SingleLine -> insertSingleLineComment layout comment - in - (* print_comments [comment]; *) - (* print_layout layout; *) - layout + (* This is the parser's type of tokens. *) -(** [insertComments layout comments] inserts comments into layout*) -let insertComments = List.fold_left insertComment + type token -(** [isSingleLineComment comment] checks if a comment is singleline comment*) -let isSingleLineComment (_, t, _) = - match t with - | SingleLine -> true | _ -> false + (* This maps a token to its internal (generation-time) integer code. *) -let rec layoutToEasyFormat_ = function - | Sequence (listConfig, subLayouts) -> - easyListWithConfig listConfig (List.map layoutToEasyFormat_ subLayouts) - | Label (labelFormatter, left, right) -> - labelFormatter (layoutToEasyFormat_ left) (layoutToEasyFormat_ right) - | SourceMap (_, subLayout) -> - layoutToEasyFormat_ subLayout - | WithEOLComment (_, sub) -> - layoutToEasyFormat_ sub - | Easy e -> e - -let layoutToEasyFormatNoComments layoutNode = - layoutToEasyFormat_ layoutNode - - -let layoutToEasyFormat layoutNode comments = - (* print_layout layoutNode; *) - let layout = layoutNode in - let revComments = List.rev comments in - let (singleLineComments, nonSingleLineComments) = (List.partition isSingleLineComment revComments) in - let layout = insertComments layout nonSingleLineComments in - let layout = consolidateSeparator layout in - let layout = insertComments layout singleLineComments in - let layout = insertLinesAboveItems layout in - let easyFormat= layoutToEasyFormat_ layout in - (* print_easy_rec easyFormat; *) - makeEasyList ~break:Always_rec ~indent:0 ~inline:(true, true) [easyFormat] + val token2terminal: token -> int -let partitionFinalWrapping listTester wrapFinalItemSetting x = - let rev = List.rev x in - match (rev, wrapFinalItemSetting) with - | ([], _) -> raise (NotPossible "shouldnt be partitioning 0 label attachments") - | (_, NeverWrapFinalItem) -> None - | (last::revEverythingButLast, WrapFinalListyItemIfFewerThan max) -> - if not (listTester last) || (List.length x) >= max then - None - else - Some (List.rev revEverythingButLast, last) + (* This is the integer code for the error pseudo-token. *) -let semiTerminated term = makeList ~interleaveComments:false [term; atom ";"] + val error_terminal: int + (* This maps a token to its semantic value. *) -(* postSpace is so that when comments are interleaved, we still use spacing rules. *) -let makeLetSequence letItems = - makeList - ~break:Always_rec - ~inline:(true, false) - ~wrap:("{", "}") - ~newlinesAboveComments:0 - ~newlinesAboveItems:0 - ~newlinesAboveDocComments:1 - ~renderFinalSep:false - ~postSpace:true - ~sep:";" - letItems + val token2value: token -> Obj.t -let makeLetSequenceSingleLine letItems = - makeList - ~break:IfNeed - ~inline:(true, false) - ~wrap:("{", "}") - ~newlinesAboveComments:0 - ~newlinesAboveItems:0 - ~newlinesAboveDocComments:1 - ~renderFinalSep:false - ~preSpace:true - ~postSpace:true - ~sep:";" - letItems + (* Traditionally, an LR automaton is described by two tables, namely, an + action table and a goto table. See, for instance, the Dragon book. -let f = Format.std_formatter + The action table is a two-dimensional matrix that maps a state and a + lookahead token to an action. An action is one of: shift to a certain + state, reduce a certain production, accept, or fail. -(* postSpace is so that when comments are interleaved, we still use spacing rules. *) -let makeUnguardedLetSequence letItems = - makeList - ~break:Always_rec - ~inline:(true, true) - ~wrap:("", "") - ~newlinesAboveComments:0 - ~indent:0 - ~newlinesAboveItems:0 - ~newlinesAboveDocComments:1 - ~renderFinalSep:false - ~postSpace:true - ~sep:";" - letItems + The goto table is a two-dimensional matrix that maps a state and a + non-terminal symbol to either a state or undefined. By construction, this + table is sparse: its undefined entries are never looked up. A compression + technique is free to overlap them with other entries. -let formatSimpleAttributed x y = - makeList - ~wrap:("(", ")") - ~break:IfNeed - ~indent:0 - ~postSpace:true - [y; x;] + In Menhir, things are slightly different. If a state has a default + reduction on token [#], then that reduction must be performed without + consulting the lookahead token. As a result, we must first determine + whether that is the case, before we can obtain a lookahead token and use it + as an index in the action table. -let formatAttributed x y = - makeList - ~break:IfNeed - ~inline:(true, true) - ~indent:0 - ~postSpace:true - [y; x] + Thus, Menhir's tables are as follows. -(* For when the type constraint should be treated as a separate breakable line item itself - not docked to some value/pattern label. - fun x - y - : retType => blah; - *) -let formatJustTheTypeConstraint typ = - makeList ~postSpace:false ~sep:" " [atom ":"; typ] + A one-dimensional default reduction table maps a state to either ``no + default reduction'' (encoded as: 0) or ``by default, reduce prod'' + (encoded as: 1 + prod). The action table is looked up only when there + is no default reduction. *) -let formatTypeConstraint one two = - label ~space:true (makeList ~postSpace:false [one; atom ":"]) two + val default_reduction: PackedIntArray.t -let formatLabeledArgument = - (fun lbl lblSuffix term -> - if lbl = "" then - (* - * This logic helps avoid a line break to be added after "::" - * ``` - * let f - * :: - * superLonglonglongnameArg => ... - * ``` - * Instead, it prints it to - * ``` - * let f - * :: superLonglonglongnameArg => ... - * ``` - * - *) - makeList [atom lbl; atom ("::" ^ lblSuffix); term] - else - label ~space:false (makeList [atom lbl; atom ("::" ^ lblSuffix)]) term) + (* Menhir follows Dencker, Dürre and Heuft, who point out that, although the + action table is not sparse by nature (i.e., the error entries are + significant), it can be made sparse by first factoring out a binary error + matrix, then replacing the error entries in the action table with undefined + entries. Thus: -let formatCoerce expr optType coerced = - match optType with - | None -> - label ~space:true (makeList ~postSpace:true [expr; atom ":>"]) coerced - | Some typ -> - label ~space:true (makeList ~postSpace:true [formatTypeConstraint expr typ; atom ":>"]) coerced + A two-dimensional error bitmap maps a state and a terminal to either + ``fail'' (encoded as: 0) or ``do not fail'' (encoded as: 1). The action + table, which is now sparse, is looked up only in the latter case. *) + (* The error bitmap is flattened into a one-dimensional table; its width is + recorded so as to allow indexing. The table is then compressed via + [PackedIntArray]. The bit width of the resulting packed array must be + [1], so it is not explicitly recorded. *) -(* Standard function application style indentation - no special wrapping - * behavior. - * - * Formats like this: - * - * let result = - * someFunc - * (10, 20); - * - * - * Instead of this: - * - * let result = - * someFunc ( - * 10, - * 20 - * ); - * - * The outer list wrapping fixes #566: format should break the whole - * application before breaking arguments. - *) -let formatIndentedApplication headApplicationItem argApplicationItems = - makeList ~inline:(true, true) ~postSpace:true ~break:IfNeed [ - label - ~space:true - headApplicationItem - (makeAppList argApplicationItems) - ] + (* The error bitmap does not contain a column for the [#] pseudo-terminal. + Thus, its width is [Terminal.n - 1]. We exploit the fact that the integer + code assigned to [#] is greatest: the fact that the right-most column + in the bitmap is missing does not affect the code for accessing it. *) + val error: int (* width of the bitmap *) * string (* second component of [PackedIntArray.t] *) -(* The loc, is an optional location or the returned app terms *) -let formatAttachmentApplication finalWrapping (attachTo: (bool * layoutNode) option) (appTermItems, loc) = - let partitioning = finalWrapping appTermItems in - let maybeSourceMap maybeLoc x = - match maybeLoc with - | None -> x - | Some loc -> SourceMap (loc, x) - in - match partitioning with - | None -> ( - match (appTermItems, attachTo) with - | ([], _) -> raise (NotPossible "No app terms") - | ([hd], None) -> maybeSourceMap loc hd - | ([hd], (Some (useSpace, toThis))) -> label ~space:useSpace toThis (maybeSourceMap loc hd) - | (hd::tl, None) -> - maybeSourceMap loc (formatIndentedApplication hd tl) - | (hd::tl, (Some (useSpace, toThis))) -> - label - ~space:useSpace - toThis - (maybeSourceMap loc (formatIndentedApplication hd tl)) - ) - | Some (attachedList, wrappedListy) -> ( - match (attachedList, attachTo) with - | ([], Some (useSpace, toThis)) -> label ~space:useSpace toThis (maybeSourceMap loc wrappedListy) - | ([], None) -> - (* Not Sure when this would happen *) - maybeSourceMap loc wrappedListy - | (hd::tl, Some (useSpace, toThis)) -> - (* TODO: Can't attach location to this - maybe rewrite anyways *) - let attachedArgs = makeAppList attachedList in - (label ~space:useSpace toThis (label - ~space:true attachedArgs wrappedListy)) + (* A two-dimensional action table maps a state and a terminal to one of + ``shift to state s and discard the current token'' (encoded as: s | 10), + ``shift to state s without discarding the current token'' (encoded as: s | + 11), or ``reduce prod'' (encoded as: prod | 01). *) - | (hd::tl, None) -> - (* Args that are "attached to nothing" *) - let appList = makeAppList attachedList in - maybeSourceMap loc (label ~space:true appList wrappedListy) - ) + (* The action table is first compressed via [RowDisplacement], then packed + via [PackedIntArray]. *) -(* - Preprocesses an expression term for the sake of label attachments ([letx = - expr]or record [field: expr]). Function application should have special - treatment when placed next to a label. (The invoked function term should - "stick" to the label in some cases). In others, the invoked function term - should become a new label for the remaining items to be indented under. - *) -let applicationFinalWrapping x = - partitionFinalWrapping isSequencey settings.funcApplicationLabelStyle x + (* Like the error bitmap, the action table does not contain a column for the + [#] pseudo-terminal. *) -let curriedFunctionFinalWrapping x = - partitionFinalWrapping isSequencey settings.funcCurriedPatternStyle x + val action: PackedIntArray.t * PackedIntArray.t -let typeApplicationFinalWrapping typeApplicationItems = - partitionFinalWrapping isSequencey settings.funcApplicationLabelStyle typeApplicationItems + (* A one-dimensional lhs table maps a production to its left-hand side (a + non-terminal symbol). *) + val lhs: PackedIntArray.t -(* add parentheses to binders when they are in fact infix or prefix operators *) -let protectIdentifier txt = - if not (needs_parens txt) then atom txt - else if needs_spaces txt then makeList ~interleaveComments:false ~wrap:("(", ")") ~pad:(true, true) [atom txt] - else atom ("(" ^ txt ^ ")") + (* A two-dimensional goto table maps a state and a non-terminal symbol to + either undefined (encoded as: 0) or a new state s (encoded as: 1 + s). *) -let protectLongIdentifier longPrefix txt = - makeList ~interleaveComments:false [longPrefix; atom "."; protectIdentifier txt] + (* The goto table is first compressed via [RowDisplacement], then packed + via [PackedIntArray]. *) -let paren: 'a . ?first:space_formatter -> ?last:space_formatter -> - bool -> (Format.formatter -> 'a -> unit) -> Format.formatter -> 'a -> unit - = fun ?(first=("": _ format6)) ?(last=("": _ format6)) b fu f x -> - if b then (pp f "("; pp f first; fu f x; pp f last; pp f ")") - else fu f x + val goto: PackedIntArray.t * PackedIntArray.t -let constant_string f s = pp f "%S" s + (* The number of start productions. A production [prod] is a start + production if and only if [prod < start] holds. This is also the + number of start symbols. A nonterminal symbol [nt] is a start + symbol if and only if [nt < start] holds. *) -let tyvar f str = pp f "'%s" str + val start: int -(* In some places parens shouldn't be printed for readability: - * e.g. Some((-1)) should be printed as Some(-1) - * In `1 + (-1)` -1 should be wrapped in parens for readability - *) -let constant ?(parens=true) f = function - | Pconst_char i -> pp f "%C" i - | Pconst_string (i, None) -> pp f "%S" i - | Pconst_string (i, Some delim) -> pp f "{%s|%s|%s}" delim i delim - | Pconst_integer (i, None) -> - paren (parens && i.[0] = '-') (fun f -> pp f "%s") f i - | Pconst_integer (i, Some m) -> - paren (parens && i.[0] = '-') (fun f (i, m) -> pp f "%s%c" i m) f (i,m) - | Pconst_float (i, None) -> - paren (parens && i.[0] = '-') (fun f -> pp f "%s") f i - | Pconst_float (i, Some m) -> - paren (parens && i.[0] = '-') (fun f (i,m) -> - pp f "%s%c" i m) f (i,m) + (* A one-dimensional semantic action table maps productions to semantic + actions. The calling convention for semantic actions is described in + [EngineTypes]. This table contains ONLY NON-START PRODUCTIONS, so the + indexing is off by [start]. Be careful. *) -let is_punned_labelled_expression e lbl = match e.pexp_desc with - | Pexp_ident { txt; _ } - | Pexp_constraint ({pexp_desc = Pexp_ident { txt; _ }; _}, _) - | Pexp_coerce ({pexp_desc = Pexp_ident { txt; _ }; _}, _, _) - -> txt = Longident.parse lbl - | _ -> false + val semantic_action: ((int, Obj.t, token) EngineTypes.env -> + (int, Obj.t) EngineTypes.stack) array -let is_punned_labelled_pattern p lbl = match p.ppat_desc with - | Ppat_var { txt; _ } - | Ppat_constraint ({ ppat_desc = Ppat_var { txt; _ }; _ }, _) - -> txt = lbl - | _ -> false + (* The parser defines its own [Error] exception. This exception can be + raised by semantic actions and caught by the engine, and raised by the + engine towards the final user. *) -let format_labeled_argument is_punned term = function - | Nolabel -> term - | Labelled lbl -> - if is_punned lbl - then makeList [atom namedArgSym; term] - else label (atom (namedArgSym ^ lbl)) ~space:true term - | Optional lbl -> - if is_punned lbl - then makeList [atom namedArgSym; label term (atom "?")] - else label (atom (namedArgSym ^ lbl ^ "?")) ~space:true term + exception Error -let isLongIdentWithDot = function - | Ldot _ -> true - | _ -> false + (* The parser indicates whether to generate a trace. Generating a + trace requires two extra tables, which respectively map a + terminal symbol and a production to a string. *) + val trace: (string array * string array) option -(* Js.t -> useful for bucklescript sugar `Js.t({. foo: bar})` -> `{. "foo": bar}` *) -let isJsDotTLongIdent ident = match ident with - | Ldot (Lident "Js", "t") -> true - | _ -> false +end +end +module InspectionTableFormat : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) -let recordRowIsPunned pld = - let name = pld.pld_name.txt in - (match pld.pld_type with - | { ptyp_desc = (Ptyp_constr ({ txt; _ }, args)); _} - when - (Longident.last txt = name - (* Don't pun types from other modules, e.g. type bar = {foo: Baz.foo}; *) - && isLongIdentWithDot txt == false - (* don't pun parameterized types, e.g. {tag: tag 'props} *) - && List.length args == 0) -> true - | _ -> false) +(* This signature defines the format of the tables that are produced (in + addition to the tables described in [TableFormat]) when the command line + switch [--inspection] is enabled. It is used as an argument to + [InspectionTableInterpreter.Make]. *) -let isPunnedJsxArg lbl ident = - not (isLongIdentWithDot ident.txt) && (Longident.last ident.txt) = lbl +module type TABLES = sig -let is_unit_pattern x = match x.ppat_desc with - | Ppat_construct ( {txt= Lident"()"}, None) -> true - | _ -> false + (* The types of symbols. *) -let is_direct_pattern x = x.ppat_attributes = [] && match x.ppat_desc with - | Ppat_construct ( {txt= Lident"()"}, None) -> true - | _ -> false + include IncrementalEngine.SYMBOLS -(* Some cases require special formatting when there's a function application - * with a single argument containing some kind of structure with braces/parens/brackets. - * Example: `foo({a: 1, b: 2})` needs to be formatted as - * foo({ - * a: 1, - * b: 2 - * }) - * when the line length dictates breaking. Notice how `({` and `})` 'hug'. - * Also applies to (poly)variants because they can be seen as a form of "function application". - * This function says if a list of expressions fulfills the need to be formatted like - * the example above. *) -let isSingleArgParenApplication = function - | [{pexp_attributes = []; pexp_desc = Pexp_record _}] - | [{pexp_attributes = []; pexp_desc = Pexp_tuple _}] - | [{pexp_attributes = []; pexp_desc = Pexp_array _}] - | [{pexp_attributes = []; pexp_desc = Pexp_object _}] -> true - | [{pexp_attributes = []; pexp_desc = Pexp_extension (s, _)}] when s.txt = "bs.obj" -> true - | [({pexp_attributes = []; pexp_desc} as exp)] when (is_simple_list_expr exp) -> true - | _ -> false + (* The type ['a lr1state] describes an LR(1) state. The generated parser defines + it internally as [int]. *) -(* - * Determines if the arguments of a constructor pattern match need - * special printing. If there's one argument & they have some kind of wrapping, - * they're wrapping need to 'hug' the surrounding parens. - * Example: - * switch x { - * | Some({ - * a, - * b, - * }) => () - * } - * - * Notice how ({ and }) hug. - * This applies for records, arrays, tuples & lists. - * See `singleArgParenPattern` for the acutal formatting - *) -let isSingleArgParenPattern = function - | [{ppat_attributes = []; ppat_desc = Ppat_record _}] - | [{ppat_attributes = []; ppat_desc = Ppat_array _}] - | [{ppat_attributes = []; ppat_desc = Ppat_tuple _}] -> true - | [{ppat_attributes = []; ppat_desc = Ppat_construct (({txt=Lident "::"}), _)}] -> true - | _ -> false + type 'a lr1state -(* Flattens a resolvedRule into a list of infixChain nodes. - * When foo |> f |> z gets parsed, we get the following tree: - * |> - * / \ - * foo |> - * / \ - * f z - * To format this recursive tree in a way that allows nice breaking - * & respects the print-width, we need some kind of flattened - * version of the above tree. `computeInfixChain` transforms the tree - * in a flattened version which allows flexible formatting. - * E.g. we get - * [LayoutNode foo; InfixToken |>; LayoutNode f; InfixToken |>; LayoutNode z] - *) -let rec computeInfixChain = function - | LayoutNode layoutNode -> [Layout layoutNode] - | InfixTree (op, leftResolvedRule, rightResolvedRule) -> - (computeInfixChain leftResolvedRule) @ [InfixToken op] @ (computeInfixChain rightResolvedRule) + (* Some of the tables that follow use encodings of (terminal and + nonterminal) symbols as integers. So, we need functions that + map the integer encoding of a symbol to its algebraic encoding. *) -let equalityOperators = ["!="; "!=="; "==="; "=="; ">="; "<="; "<"; ">"] + val terminal: int -> xsymbol + val nonterminal: int -> xsymbol -(* Formats a flattened list of infixChain nodes into a list of layoutNodes - * which allow smooth line-breaking - * e.g. [LayoutNode foo; InfixToken |>; LayoutNode f; InfixToken |>; LayoutNode z] - * becomes - * [ - * foo - * ; |> f --> label - * ; |> z --> label - * ] - * If you make a list out of this items, we get smooth line breaking - * foo |> f |> z - * becomes - * foo - * |> f - * |> z - * when the print-width forces line breaks. - *) -let formatComputedInfixChain infixChainList = - let layout_of_group group currentToken = - (* Represents the `foo` in - * foo - * |> f - * |> z *) - if List.length group < 2 then - makeList ~inline:(true, true) ~sep:" " ~break:Never group - (* Basic equality operators require special formatting, we can't give it - * 'classic' infix operator formatting, otherwise we would get - * let example = - * true - * != false - * && "a" - * == "b" - * *) - else if List.mem currentToken equalityOperators then - let hd = List.hd group in - let tl = makeList ~inline:(true, true) ~sep:" " ~break:Never (List.tl group) in - makeList ~inline:(true, true) ~sep:" " ~break:IfNeed [hd; tl] - else - (* Represents `|> f` in foo |> f - * We need a label here to indent possible closing parens - * on the same height as the infix operator - * e.g. - * >|= ( - * fun body => - * Printf.sprintf - * "okokok" uri meth headers body - * ) <-- notice how this closing paren is on the same height as >|= *) - label ~break:`Never ~space:true (atom currentToken) (List.nth group 1) - in - let rec print acc group currentToken l = - match l with - | x::xs -> (match x with - | InfixToken t -> - if List.mem t requireIndentFor then - let groupNode = makeList ~inline:(true, true) ~sep:" " ~break:Never (group @ [atom t]) in - let children = makeList ~inline:(true, true) ~preSpace:true ~break:IfNeed (print [] [] t xs) in - print (acc @ [label ~space:true groupNode children]) [] t [] - (* Represents: - * List.map @@ - * List.length - * - * Notice how we want the `@@` on the first line. - * Extra indent puts pressure on the subsequent line lengths - * *) - else if t = "@@" then - let groupNode = makeList ~inline:(true, true) ~sep:" " ~break:Never (group @ [atom t]) in - print (acc @ [groupNode]) [] t xs - else if List.mem t equalityOperators then - print acc (group @ [atom t]) t xs - else - print (acc @ [layout_of_group group currentToken]) [(atom t)] t xs - | Layout layoutNode -> print acc (group @ [layoutNode]) currentToken xs - ) - | [] -> - if List.mem currentToken requireIndentFor then - acc @ group - else - acc @ [layout_of_group group currentToken] - in - print [] [] "" infixChainList + (* The left-hand side of every production already appears in the + signature [TableFormat.TABLES], so we need not repeat it here. *) + (* The right-hand side of every production. This a linearized array + of arrays of integers, whose [data] and [entry] components have + been packed. The encoding of symbols as integers in described in + [TableBackend]. *) -class printer ()= object(self:'self) - val pipe = false - val semi = false - (* The test and first branch of ternaries must be guarded *) - method under_pipe = {} - method under_semi = {} - method reset_semi = {} - method reset_pipe = {} - method reset = {} + val rhs: PackedIntArray.t * PackedIntArray.t + (* A mapping of every (non-initial) state to its LR(0) core. *) - method longident = function - | Lident s -> (protectIdentifier s) - | Ldot(longPrefix, s) -> - (protectLongIdentifier (self#longident longPrefix) s) - | Lapply (y,s) -> makeList ~interleaveComments:false [self#longident y; atom "("; self#longident s; atom ")";] + val lr0_core: PackedIntArray.t - (* This form allows applicative functors. *) - method longident_class_or_type_loc x = self#longident x.txt - (* TODO: Fail if observing applicative functors for this form. *) - method longident_loc (x:Longident.t Location.loc) = SourceMap (x.loc, self#longident (x.txt)) - method constant ?(parens=true) = wrap (constant ~parens) + (* A mapping of every LR(0) state to its set of LR(0) items. Each item is + represented in its packed form (see [Item]) as an integer. Thus the + mapping is an array of arrays of integers, which is linearized and + packed, like [rhs]. *) - method constant_string = wrap constant_string - method tyvar = wrap tyvar + val lr0_items: PackedIntArray.t * PackedIntArray.t - (* c ['a,'b] *) - method class_params_def = function - | [] -> atom "" - | l -> makeTup (List.map self#type_param l) + (* A mapping of every LR(0) state to its incoming symbol, if it has one. *) - (* This will fall through to the simple version. *) - method non_arrowed_core_type x = self#non_arrowed_non_simple_core_type x + val lr0_incoming: PackedIntArray.t - method core_type2 x = - let {stdAttrs} = partitionAttributes x.ptyp_attributes in - if stdAttrs <> [] then - formatAttributed - (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) - (self#attributes stdAttrs) - else - match (x.ptyp_desc) with - | (Ptyp_arrow (l, ct1, ct2)) -> - let rec allArrowSegments acc = function - | { ptyp_desc = Ptyp_arrow (l, ct1, ct2); ptyp_attributes = [] } -> - allArrowSegments ((l,ct1) :: acc) ct2 + (* A table that tells which non-terminal symbols are nullable. *) - | rhs -> - let rhs = self#core_type2 rhs in - let is_tuple typ = match typ.ptyp_desc with - | Ptyp_tuple _ -> true - | _ -> false - in - match acc with - | [(Nolabel, lhs)] when not (is_tuple lhs) -> - (self#non_arrowed_simple_core_type lhs, rhs) - | acc -> - let params = List.rev_map self#type_with_label acc in - (makeCommaBreakableListSurround "(" ")" params, rhs) - in - let (lhs, rhs) = allArrowSegments [] x in - let normalized = makeList - ~preSpace:true ~postSpace:true ~inline:(true, true) - ~break:IfNeed ~sep:"=>" [lhs; rhs] - in SourceMap (x.ptyp_loc, normalized) - | Ptyp_poly (sl, ct) -> - let poly = - makeList ~break:IfNeed [ - makeList ~postSpace:true [ - makeList ~postSpace:true (List.map (fun x -> self#tyvar x) sl); - atom "."; - ]; - self#core_type ct; - ] - in SourceMap (x.ptyp_loc, poly) - | _ -> self#non_arrowed_core_type x + val nullable: string + (* This is a packed int array of bit width 1. It can be read + using [PackedIntArray.get1]. *) - (* Same as core_type2 but can be aliased *) - method core_type x = - let {stdAttrs} = partitionAttributes x.ptyp_attributes in - if stdAttrs <> [] then - formatAttributed - (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) - (self#attributes stdAttrs) - else match (x.ptyp_desc) with - | (Ptyp_alias (ct, s)) -> - SourceMap ( - x.ptyp_loc, - (label - ~space:true - (self#core_type ct) - (makeList ~postSpace:true [atom "as"; atom ("'" ^ s)]) - ) - ) - | _ -> self#core_type2 x + (* A two-table dimensional table, indexed by a nonterminal symbol and + by a terminal symbol (other than [#]), encodes the FIRST sets. *) - method type_with_label (lbl, c) = - let typ = self#core_type c in - match lbl with - | Nolabel -> typ - | Labelled lbl -> - makeList ~sep:" " [atom (namedArgSym ^ lbl ^ ":"); typ] - | Optional lbl -> - makeList ~sep:" " [atom (namedArgSym ^ lbl ^ ":"); label typ (atom "=?")] + val first: int (* width of the bitmap *) * string (* second component of [PackedIntArray.t] *) - method type_param (ct, a) = - makeList [atom (type_variance a); self#core_type ct] +end - (* According to the parse rule [type_declaration], the "type declaration"'s - * physical location (as indicated by [td.ptype_loc]) begins with the - * identifier and includes the constraints. *) - method formatOneTypeDef prepend name assignToken ({ptype_params; ptype_kind; ptype_manifest; ptype_loc} as td) = - let (equalInitiatedSegments, constraints) = (self#type_declaration_binding_segments td) in - let formattedTypeParams = List.map self#type_param ptype_params in - let binding = makeList ~postSpace:true [prepend;name] in - (* - /-----------everythingButConstraints-------------- | -constraints--\ - /-innerL---| ------innerR--------------------------\ - /binding\ /typeparams\ /--equalInitiatedSegments-\ - type name 'v1 'v1 = foo = private bar constraint a = b - *) +end +module InspectionTableInterpreter : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - let labelWithParams = match formattedTypeParams with - | [] -> binding - | l -> label binding (makeTup l) - in - let everythingButConstraints = - let nameParamsEquals = makeList ~postSpace:true [labelWithParams; assignToken] in - match equalInitiatedSegments with - | [] -> labelWithParams - | hd::hd2::hd3::tl -> raise (NotPossible "More than two type segments.") - | hd::[] -> - formatAttachmentApplication - typeApplicationFinalWrapping - (Some (true, nameParamsEquals)) - (hd, None) - | hd::hd2::[] -> - let first = makeList ~postSpace:true ~break:IfNeed ~inline:(true, true) (hd @ [atom "="]) in - (* - * Because we want a record as a label with the opening brace on the same line - * and the closing brace indented at the beginning, we can't wrap it in a list here - * Example: - * type doubleEqualsRecord = - * myRecordWithReallyLongName = { <- opening brace on the same line - * xx: int, - * yy: int - * }; <- closing brace indentation - *) - let second = match ptype_kind with - | Ptype_record _ -> List.hd hd2 - | _ -> makeList ~postSpace:true ~break:IfNeed ~inline:(true, true) hd2 - in - label ~space:true nameParamsEquals ( - label ~space:true first second - ) - in - let everything = - match constraints with - | [] -> everythingButConstraints - | hd::tl -> makeList ~break:IfNeed ~postSpace:true ~indent:0 ~inline:(true, true) (everythingButConstraints::hd::tl) - in - (SourceMap (ptype_loc, everything)) +(* This functor is invoked inside the generated parser, in [--table] mode. It + produces no code! It simply constructs the types [symbol] and [xsymbol] on + top of the generated types [terminal] and [nonterminal]. *) - method formatOneTypeExt prepend name assignToken te = - let privateAtom = (atom "pri") in - let privatize scope lst = match scope with - | Public -> lst - | Private -> privateAtom::lst in - let equalInitiatedSegments = - let segments = List.map self#type_extension_binding_segments te.ptyext_constructors in - let privatized_segments = privatize te.ptyext_private segments in - [makeList ~break:Always_rec ~postSpace:true ~inline:(true, true) privatized_segments] in - let formattedTypeParams = List.map self#type_param te.ptyext_params in - let binding = makeList ~postSpace:true (prepend::name::[]) in - let labelWithParams = match formattedTypeParams with - | [] -> binding - | l -> label binding (makeTup l) - in - let everything = - let nameParamsEquals = makeList ~postSpace:true [labelWithParams; assignToken] in - formatAttachmentApplication - typeApplicationFinalWrapping - (Some (true, nameParamsEquals)) - (equalInitiatedSegments, None) - in - SourceMap (te.ptyext_path.loc, everything) +module Symbols (T : sig - method type_extension_binding_segments {pext_kind; pext_loc; pext_attributes; pext_name} = - let normalize lst = match lst with - | [] -> raise (NotPossible "should not be called") - | [hd] -> hd - | _::_ -> makeList ~break:Never ~postSpace:true lst - in - let add_bar name args = - let lbl = label ~space:true name args in - makeList ~postSpace:true [atom "|"; lbl] - in - let sourceMappedName = SourceMap (pext_name.loc, atom pext_name.txt) in - let nameOf = makeList ~postSpace:true [sourceMappedName] in - let barName = makeList ~postSpace:true [atom "|"; sourceMappedName] in - let resolved = match pext_kind with - | Pext_decl (ctor_args, gadt) -> - let formattedArgs = match ctor_args with - | Pcstr_tuple [] -> [] - | Pcstr_tuple args -> [makeTup (List.map self#non_arrowed_non_simple_core_type args)] - | Pcstr_record r -> [self#record_declaration r] - in - let formattedGadt = match gadt with - | None -> None - | Some x -> Some ( - makeList [ - formatJustTheTypeConstraint (self#core_type x) - ] - ) - in - (formattedArgs, formattedGadt) - (* type bar += Foo = Attr.Foo *) - | Pext_rebind rebind -> - let r = self#longident_loc rebind in - let prepend = (atom "=") in - ([makeList ~postSpace:true [prepend; r]], None) - in - (** - The first element of the tuple represents constructor arguments, - the second an optional formatted gadt. + type 'a terminal + type 'a nonterminal - Case 1: No constructor arguments, neither a gadt - type attr = ..; - type attr += | Str +end) - Case 2: No constructor arguments, is a gadt - type attr = ..; - type attr += | Str :attr +: IncrementalEngine.SYMBOLS + with type 'a terminal := 'a T.terminal + and type 'a nonterminal := 'a T.nonterminal - Case 3: Has Constructor args, not a gadt - type attr = ..; - type attr += | Str string; - type attr += | Point int int; +(* This functor is invoked inside the generated parser, in [--table] mode. It + constructs the inspection API on top of the inspection tables described in + [InspectionTableFormat]. *) - Case 4: Has Constructor args & is a gadt - type attr = ..; - type attr += | Point int int :attr; - *) - let everything = match resolved with - | ([], None) -> barName - | ([], Some gadt) -> add_bar sourceMappedName gadt - | (ctorArgs, None) -> add_bar nameOf (normalize ctorArgs) - | (ctorArgs, Some gadt) -> add_bar nameOf (normalize (ctorArgs@[gadt])) - in - (SourceMap (pext_loc, self#attach_std_attrs pext_attributes everything)) +module Make + (TT : TableFormat.TABLES) + (IT : InspectionTableFormat.TABLES + with type 'a lr1state = int) + (ET : EngineTypes.TABLE + with type terminal = int + and type nonterminal = int + and type semantic_value = Obj.t) + (E : sig + type 'a env = (ET.state, ET.semantic_value, ET.token) EngineTypes.env + end) - (* shared by [Pstr_type,Psig_type]*) - method type_def_list (rf, l) = - (* As oposed to used in type substitution. *) - let formatOneTypeDefStandard prepend td = - let itm = - self#formatOneTypeDef - prepend - (SourceMap (td.ptype_name.loc, (atom td.ptype_name.txt))) - (atom "=") - td - in - self#attach_std_item_attrs td.ptype_attributes itm - in +: IncrementalEngine.INSPECTION + with type 'a terminal := 'a IT.terminal + and type 'a nonterminal := 'a IT.nonterminal + and type 'a lr1state := 'a IT.lr1state + and type production := int + and type 'a env := 'a E.env +end +module TableInterpreter : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - match l with - | [] -> raise (NotPossible "asking for type list of nothing") - | hd::tl -> - let first = - match rf with - | Recursive -> formatOneTypeDefStandard (atom "type") hd - | Nonrecursive -> - formatOneTypeDefStandard (atom "type nonrec") hd - in - match tl with - (* Exactly one type *) - | [] -> first - | tlhd::tltl -> makeList ~indent:0 ~inline:(true, true) ~break:Always_rec ( - first::(List.map (formatOneTypeDefStandard (atom "and")) (tlhd::tltl)) - ) +(* This module provides a thin decoding layer for the generated tables, thus + providing an API that is suitable for use by [Engine.Make]. It is part of + [MenhirLib]. *) - method type_variant_leaf ?opt_ampersand:(a=false) ?polymorphic:(p=false) = self#type_variant_leaf1 a p true - method type_variant_leaf_nobar ?opt_ampersand:(a=false) ?polymorphic:(p=false) = self#type_variant_leaf1 a p false +(* The exception [Error] is declared within the generated parser. This is + preferable to pre-declaring it here, as it ensures that each parser gets + its own, distinct [Error] exception. This is consistent with the code-based + back-end. *) - (* TODOATTRIBUTES: Attributes on the entire variant leaf are likely - * not parsed or printed correctly. *) - method type_variant_leaf1 opt_ampersand polymorphic print_bar x = - let {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes} = x in - let {stdAttrs} = partitionAttributes pcd_attributes in - let prefix = if polymorphic then "`" else "" in - let sourceMappedName = SourceMap (pcd_name.loc, atom (prefix ^ pcd_name.txt)) in - let nameOf = makeList ~postSpace:true [sourceMappedName] in - let barName = - let lst = if print_bar then [atom "|"; sourceMappedName] else [sourceMappedName] in - makeList ~postSpace:true lst in - let ampersand_helper i arg = - let ct = self#core_type arg in - let ct = match arg.ptyp_desc with - | Ptyp_tuple _ -> ct - | _ -> makeTup [ct] - in - if i == 0 && not opt_ampersand then - ct - else - label (atom "&") ct - in - let args = match pcd_args with - | Pcstr_record r -> [self#record_declaration r] - | Pcstr_tuple [] -> [] - | Pcstr_tuple l when polymorphic -> List.mapi ampersand_helper l - (* Here's why this works. With the new syntax, all the args, are already inside of - a safely guarded place like Constructor(here, andHere). Compare that to the - previous syntax Constructor here andHere. In the previous syntax, we needed to - require that we print "non-arrowed" types for here, and andHere to avoid - something like Constructor a=>b c=>d. In the new syntax, we don't care if here - and andHere have unguarded arrow types like a=>b because they're safely - separated by commas. - *) - | Pcstr_tuple l -> [makeTup (List.map self#core_type l)] - in - let gadtRes = match pcd_res with - | None -> None - | Some x -> Some (makeList ~inline:(true, true) ~break:IfNeed [ - formatJustTheTypeConstraint (self#core_type x) - ]) - in - let normalize lst = match lst with - | [] -> raise (NotPossible "should not be called") - | [hd] -> hd - | _::_ -> makeList ~inline:(true, true) ~break:IfNeed ~postSpace:true lst - in - (* In some cases (e.g. inline records) we want the label with bar & the gadt resolution - * as a list. - * | If { - * pred: expr bool, - * true_branch: expr 'a, - * false_branch: expr 'a - * } ==> end of label - * :expr 'a; ==> gadt res - * The label & the gadt res form two separate units combined into a list. - * This is necessary to properly align the closing '}' on the same height as the 'If'. - *) - let add_bar ?gadt name args = - let lbl = label name args in - let fullLbl = match gadt with - | Some g -> makeList ~inline:(true, true) ~break:IfNeed ~postSpace:true [lbl; g] - | None -> lbl - in - makeList ~postSpace:true (if print_bar then [atom "|"; fullLbl] else [fullLbl]) - in - let everything = match (args, gadtRes) with - | ([], None) -> barName - | ([], Some gadt) -> add_bar sourceMappedName gadt - | (_::_, None) -> add_bar nameOf (normalize args) - | (_::_, Some gadt) -> - (match pcd_args with - | Pcstr_record _ -> add_bar ~gadt nameOf (normalize args) - | _ -> add_bar nameOf (makeList [normalize args; gadt])) - in - let everythingWithAttrs = - if stdAttrs <> [] then - formatAttributed everything (self#attributes stdAttrs) - else - everything - in - (SourceMap (pcd_loc, everythingWithAttrs)) +(* This functor is invoked by the generated parser. *) - method record_declaration ?assumeRecordLoc lbls = - let recordRow pld = - let hasPunning = recordRowIsPunned pld in - let name = if hasPunning then - SourceMap (pld.pld_name.loc, makeList [atom pld.pld_name.txt;]) - else - SourceMap (pld.pld_name.loc, makeList [atom pld.pld_name.txt; atom ":"]) - in - let withMutable = - match pld.pld_mutable with - | Immutable -> name - | Mutable -> makeList ~postSpace:true [atom "mutable"; name] - in - let recordRow = if hasPunning then - label withMutable (atom "") - else - label ~space:true withMutable (self#core_type pld.pld_type) - in - SourceMap (pld.pld_loc, recordRow) - in - let rows = List.map recordRow lbls in - (* if a record has more than 2 rows, always break *) - let break = if List.length rows >= 2 then Always_rec else IfNeed in - let rowList = makeList ~wrap:("{", "}") ~sep:"," ~postSpace:true ~break rows in - match assumeRecordLoc with - | None -> rowList - | Some loc -> SourceMap(loc, rowList) +module MakeEngineTable + (T : TableFormat.TABLES) +: EngineTypes.TABLE + with type state = int + and type token = T.token + and type semantic_value = Obj.t + and type production = int + and type terminal = int + and type nonterminal = int +end +module StaticVersion : sig +val require_20170712 : unit +end - (* Returns the type declaration partitioned into three segments - one - suitable for appending to a label, the actual type manifest - and the list of constraints. *) - method type_declaration_binding_segments x = - (* Segments of the type binding (occuring after the type keyword) that - should begin with "=". Zero to two total sections. - This is just a straightforward reverse mapping from the original parser: - type_kind: - /*empty*/ - { (Ptype_abstract, Public, None) } - | EQUAL core_type - { (Ptype_abstract, Public, Some $2) } - | EQUAL PRIVATE core_type - { (Ptype_abstract, Private, Some $3) } - | EQUAL constructor_declarations - { (Ptype_variant(List.rev $2), Public, None) } - | EQUAL PRIVATE constructor_declarations - { (Ptype_variant(List.rev $3), Private, None) } - | EQUAL private_flag BAR constructor_declarations - { (Ptype_variant(List.rev $4), $2, None) } - | EQUAL DOTDOT - { (Ptype_open, Public, None) } - | EQUAL private_flag LBRACE label_declarations opt_comma RBRACE - { (Ptype_record(List.rev $4), $2, None) } - | EQUAL core_type EQUAL private_flag opt_bar constructor_declarations - { (Ptype_variant(List.rev $6), $4, Some $2) } - | EQUAL core_type EQUAL DOTDOT - { (Ptype_open, Public, Some $2) } - | EQUAL core_type EQUAL private_flag LBRACE label_declarations opt_comma RBRACE - { (Ptype_record(List.rev $6), $4, Some $2) } - *) - let privateAtom = (atom "pri") in - let privatize scope lst = match scope with - | Public -> lst - | Private -> privateAtom::lst in +end = struct +#1 "menhirLib.ml" +module General = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - let estimateRecordOpenBracePoint () = - match x.ptype_params with - | [] -> x.ptype_name.loc.loc_end - | hd::tl -> - (fst (List.nth x.ptype_params (List.length x.ptype_params - 1))).ptyp_loc.loc_end - in +(* --------------------------------------------------------------------------- *) - let equalInitiatedSegments = match (x.ptype_kind, x.ptype_private, x.ptype_manifest) with - (* /*empty*/ {(Ptype_abstract, Public, None)} *) - | (Ptype_abstract, Public, None) -> [ +(* Lists. *) - ] - (* EQUAL core_type {(Ptype_abstract, Public, Some _)} *) - | (Ptype_abstract, Public, Some y) -> [ - [self#core_type y] - ] - (* EQUAL PRIVATE core_type {(Ptype_abstract, Private, Some $3)} *) - | (Ptype_abstract, Private, Some y) -> [ - [privateAtom; self#core_type y] - ] - (* EQUAL constructor_declarations {(Ptype_variant _., Public, None)} *) - (* This case is redundant *) - (* | (Ptype_variant lst, Public, None) -> [ *) - (* [makeSpacedBreakableInlineList (List.map type_variant_leaf lst)] *) - (* ] *) - (* EQUAL PRIVATE constructor_declarations {(Ptype_variant _, Private, None)} *) - | (Ptype_variant lst, Private, None) -> [ - [privateAtom; makeList ~break:IfNeed ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst)] - ] - (* EQUAL private_flag BAR constructor_declarations {(Ptype_variant _, $2, None)} *) - | (Ptype_variant lst, scope, None) -> [ - privatize scope [makeList ~break:Always_rec ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst)] - ] - (* EQUAL DOTDOT {(Ptype_open, Public, None)} *) - | (Ptype_open, Public, None) -> [ - [atom ".."] - ] - (* Super confusing how record/variants' manifest is not actually the - description of the structure. What's in the manifest in that case is - the *second* EQUALS asignment. *) +let rec take n xs = + match n, xs with + | 0, _ + | _, [] -> + [] + | _, (x :: xs as input) -> + let xs' = take (n - 1) xs in + if xs == xs' then + input + else + x :: xs' - (* EQUAL private_flag LBRACE label_declarations opt_comma RBRACE {(Ptype_record _, $2, None)} *) - | (Ptype_record lst, scope, None) -> - let assumeRecordLoc = {loc_start = estimateRecordOpenBracePoint(); loc_end = x.ptype_loc.loc_end; loc_ghost = false} in - [privatize scope [self#record_declaration ~assumeRecordLoc lst]] - (* And now all of the forms involving *TWO* equals *) - (* Again, super confusing how manifests of variants/records represent the - structure after the second equals. *) - (* ================================================*) +let rec drop n xs = + match n, xs with + | 0, _ -> + xs + | _, [] -> + [] + | _, _ :: xs -> + drop (n - 1) xs +let rec uniq1 cmp x ys = + match ys with + | [] -> + [] + | y :: ys -> + if cmp x y = 0 then + uniq1 compare x ys + else + y :: uniq1 cmp y ys - (* EQUAL core_type EQUAL private_flag opt_bar constructor_declarations { - (Ptype_variant _, _, Some _)} *) - | (Ptype_variant lst, scope, Some mani) -> [ - [self#core_type mani]; - let variant = makeList ~break:IfNeed ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst) in - privatize scope [variant]; - ] +let uniq cmp xs = + match xs with + | [] -> + [] + | x :: xs -> + x :: uniq1 cmp x xs - (* EQUAL core_type EQUAL DOTDOT {(Ptype_open, Public, Some $2)} *) - | (Ptype_open, Public, Some mani) -> [ - [atom ".."]; - [self#core_type mani]; - ] - (* EQUAL core_type EQUAL private_flag LBRACE label_declarations opt_comma RBRACE - {(Ptype_record _, $4, Some $2)} *) - | (Ptype_record lst, scope, Some mani) -> - let declaration = self#record_declaration lst in - let record = match scope with - | Public -> [declaration] - | Private -> [label ~space:true privateAtom declaration] - in - [ [self#core_type mani]; record ] +let weed cmp xs = + uniq cmp (List.sort cmp xs) - (* Everything else is impossible *) - (* ================================================*) +(* --------------------------------------------------------------------------- *) - | (_, _, _ ) -> raise (NotPossible "Encountered impossible type specification") - in +(* Streams. *) - let makeConstraint (ct1, ct2, _) = - let constraintEq = makeList ~postSpace:true [ - atom "constraint"; - self#core_type ct1; - atom "="; - ] in - label ~space:true constraintEq (self#core_type ct2) in - let constraints = List.map makeConstraint x.ptype_cstrs in - (equalInitiatedSegments, constraints) +type 'a stream = + 'a head Lazy.t - (* "non-arrowed" means "a type where all arrows are inside at least one level of parens" +and 'a head = + | Nil + | Cons of 'a * 'a stream - z => z: not a "non-arrowed" type. - (a, b): a "non-arrowed" type. - (z=>z): a "non-arrowed" type because the arrows are guarded by parens. +(* The length of a stream. *) - A "non arrowed, non simple" type would be one that is not-arrowed, and also - not "simple". Simple means it is "clearly one unit" like (a, b), identifier, - "hello", None. - *) - method non_arrowed_non_simple_core_type x = - let {stdAttrs} = partitionAttributes x.ptyp_attributes in - if stdAttrs <> [] then - formatAttributed - (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) - (self#attributes stdAttrs) - else - match x.ptyp_desc with - (* This significantly differs from the standard OCaml printer/parser: - Type constructors are no longer simple *) - | _ -> self#non_arrowed_simple_core_type x +let rec length xs = + match Lazy.force xs with + | Nil -> + 0 + | Cons (_, xs) -> + 1 + length xs - method non_arrowed_simple_core_type x = - let {stdAttrs} = partitionAttributes x.ptyp_attributes in - if stdAttrs <> [] then - formatSimpleAttributed - (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) - (self#attributes stdAttrs) - else - let result = - match x.ptyp_desc with - (* LPAREN core_type_comma_list RPAREN %prec below_NEWDOT *) - (* { match $2 with *) - (* | [] -> raise Parse_error *) - (* | one::[] -> one *) - (* | moreThanOne -> mktyp(Ptyp_tuple(List.rev moreThanOne)) } *) - | Ptyp_tuple l -> makeTup (List.map self#core_type l) - | Ptyp_object (l, o) -> self#unparseObject l o - | Ptyp_package (lid, cstrs) -> - let typeConstraint (s, ct) = - label ~space:true - (makeList ~break:IfNeed ~postSpace:true [atom "type"; self#longident_loc s; atom "="]) - (self#core_type ct) - in - ( - match cstrs with - | [] -> - makeList ~wrap:("(", ")") [ - (makeList ~postSpace:true [atom "module"; self#longident_loc lid]) - ] - | _ -> - makeList ~wrap:("(", ")") [ - label ~space:true - (makeList ~postSpace:true [atom "module"; self#longident_loc lid]) - (makeList - ~break:IfNeed - ~sep:" and " - ~wrap:("with", "") - ~pad:(true, false) - (List.map typeConstraint cstrs)) - ] - ) - (* | QUOTE ident *) - (* { mktyp(Ptyp_var $2) } *) - | Ptyp_var s -> ensureSingleTokenSticksToLabel (self#tyvar s) - (* | UNDERSCORE *) - (* { mktyp(Ptyp_any) } *) - | Ptyp_any -> ensureSingleTokenSticksToLabel (atom "_") - (* | type_longident *) - (* { mktyp(Ptyp_constr(mkrhs $1 1, [])) } *) - | Ptyp_constr (li, []) -> - (* [ensureSingleTokenSticksToLabel] loses location information which is important - when you are embedded inside a list and comments are to be interleaved around you. - Therefore, we wrap the result in the correct [SourceMap]. *) - SourceMap (li.loc, ensureSingleTokenSticksToLabel (self#longident_loc li)) - | Ptyp_constr (li, l) -> - (match l with - | [{ptyp_desc = Ptyp_object (l, o) }] when isJsDotTLongIdent li.txt && List.length l > 0 -> - (* should have one or more rows, Js.t({..}) should print as Js.t({..}) - * {..} has a totally different meaning than Js.t({..}) *) - self#unparseObject ~withStringKeys:true l o - | [{ptyp_desc = Ptyp_object (l, o) }] when not (isJsDotTLongIdent li.txt) -> - label (SourceMap (li.loc, self#longident_loc li)) - (self#unparseObject ~wrap:("(",")") l o) - | _ -> - (* small guidance: in `type foo = bar`, we're now at the `bar` part *) +(* Folding over a stream. *) - (* The single identifier has to be wrapped in a [ensureSingleTokenSticksToLabel] to - avoid (@see @avoidSingleTokenWrapping): *) - label (SourceMap (li.loc, self#longident_loc li)) - (makeTup (List.map self#core_type l))) - | Ptyp_variant (l, closed, low) -> - let pcd_loc = x.ptyp_loc in - let pcd_attributes = x.ptyp_attributes in - let pcd_res = None in - let variant_helper rf = - match rf with - | Rtag (label, attrs, opt_ampersand, ctl) -> - let pcd_name = { - txt = label; - loc = pcd_loc; - } in - let pcd_args = Pcstr_tuple ctl in - let all_attrs = List.concat [pcd_attributes; attrs] in - self#type_variant_leaf ~opt_ampersand ~polymorphic:true {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes = all_attrs} - | Rinherit ct -> self#core_type ct in - let (designator, tl) = - match (closed,low) with - | (Closed,None) -> ("", []) - | (Closed,Some tl) -> ("<", tl) - | (Open,_) -> (">", []) in - let node_list = List.map variant_helper l in - let ll = (List.map (fun t -> atom ("`" ^ t)) tl) in - let tag_list = makeList ~postSpace:true ~break:IfNeed ((atom ">")::ll) in - let type_list = if List.length tl != 0 then node_list@[tag_list] else node_list in - makeList ~wrap:("[" ^ designator,"]") ~pad:(true, false) ~postSpace:true ~break:IfNeed type_list - | Ptyp_class (li, []) -> makeList [atom "#"; self#longident_loc li] - | Ptyp_class (li, l) -> - label - (makeList [atom "#"; self#longident_loc li]) - (makeTup (List.map self#core_type l)) - | Ptyp_extension e -> self#extension e - | Ptyp_arrow (_, _, _) - | Ptyp_alias (_, _) - | Ptyp_poly (_, _) -> - makeList ~wrap:("(",")") ~break:IfNeed [self#core_type x] - in - SourceMap (x.ptyp_loc, result) - (* TODO: ensure that we have a form of desugaring that protects *) - (* when final argument of curried pattern is a type constraint: *) - (* | COLON non_arrowed_core_type EQUALGREATER expr - { mkexp_constraint $4 (Some $2, None) } *) - (* \----/ \--/ - constraint coerce +let rec foldr f xs accu = + match Lazy.force xs with + | Nil -> + accu + | Cons (x, xs) -> + f x (foldr f xs accu) - Creates a ghost expression: - mkexp_constraint | Some t, None -> ghexp(Pexp_constraint(e, t)) - *) +end +module Convert = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - method pattern_list_split_cons acc = function - | { - ppat_desc = Ppat_construct ( - { txt = Lident("::"); loc=consLoc }, - Some {ppat_desc = Ppat_tuple ([pat1; pat2])} - ) - } -> - self#pattern_list_split_cons (pat1::acc) pat2 - | p -> (List.rev acc), p +(* An ocamlyacc-style, or Menhir-style, parser requires access to + the lexer, which must be parameterized with a lexing buffer, and + to the lexing buffer itself, where it reads position information. *) - (* - * Adds parens to the right sub-tree when it is not a single node: - * - * A | B is formatted as A | B - * A | (B | C) is formatted as A | (B | C) - * - * Also, adds parens to both sub-trees when both of them - * are not a single node: - * (A | B) | (C | D) is formatted as A | B | (C | D) - * A | B | (C | D) is formatted as A | B | (C | D) - * (A | B) | C is formatted as A | B | C - * A | B | C is formatted as A | B | C - * - *) - method or_pattern p1 p2 = - let (p1_raw, p2_raw) = (self#pattern p1, self#pattern p2) in - let (left, right) = - match p2.ppat_desc with - | Ppat_or _ -> (p1_raw, formatPrecedence p2_raw) - | _ -> (p1_raw, p2_raw) - in - makeList - ~break:IfNeed - ~inline:(true, true) - ~sep:"|" - ~postSpace:true - ~preSpace:true - [left; right] +(* This traditional API is convenient when used with ocamllex, but + inelegant when used with other lexer generators. *) - method pattern_without_or x = - let patternSourceMap pt layout = (SourceMap (pt.ppat_loc, layout)) in - (* TODOATTRIBUTES: Handle the stdAttrs here *) - let {arityAttrs} = partitionAttributes x.ppat_attributes in - match x.ppat_desc with - | Ppat_alias (p, s) -> - let raw_pattern = (self#pattern p) in - let pattern_with_precedence = match p.ppat_desc with - | Ppat_or (p1, p2) -> formatPrecedence (self#or_pattern p1 p2) - | _ -> raw_pattern - in - label ~space:true - (patternSourceMap p pattern_with_precedence) - (makeList ~postSpace:true [ - atom "as"; - (SourceMap (s.loc, (protectIdentifier s.txt))) - ]) (* RA*) - | Ppat_variant (l, Some p) -> - if arityAttrs != [] then - raise (NotPossible "Should never see embedded attributes on poly variant") - else - let layout = (self#constructor_pattern ~polyVariant:true ~arityIsClear:true (atom ("`" ^ l)) p) in - SourceMap (x.ppat_loc, layout) - | Ppat_lazy p -> label ~space:true (atom "lazy") (self#simple_pattern p) - | Ppat_construct (({txt} as li), po) when not (txt = Lident "::")-> (* FIXME The third field always false *) - let liSourceMapped = SourceMap (li.loc, (self#longident_loc li)) in - let formattedConstruction = match po with - (* TODO: Check the explicit_arity field on the pattern/constructor - attributes to determine if should desugar to an *actual* tuple. *) - (* | Some ({ *) - (* ppat_desc=Ppat_tuple l; *) - (* ppat_attributes=[{txt="explicit_arity"; loc}] *) - (* }) -> *) - (* label ~space:true (self#longident_loc li) (makeSpacedBreakableInlineList (List.map self#simple_pattern l)) *) - | Some pattern -> - let arityIsClear = isArityClear arityAttrs in - self#constructor_pattern ~arityIsClear liSourceMapped pattern - | None -> - liSourceMapped - in - SourceMap (x.ppat_loc, formattedConstruction) - | _ -> self#simple_pattern x +type ('token, 'semantic_value) traditional = + (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value - method pattern x = - let {arityAttrs; stdAttrs} = partitionAttributes x.ppat_attributes in - if stdAttrs <> [] then - formatAttributed - (* Doesn't need to be simple_pattern because attributes are parse as - * appyling to the entire "function application style" syntax preceeding them *) - (self#pattern {x with ppat_attributes=arityAttrs}) - (self#attributes stdAttrs) - else match x.ppat_desc with - | Ppat_or (p1, p2) -> - self#or_pattern p1 p2 - | _ -> self#pattern_without_or x +(* This revised API is independent of any lexer generator. Here, the + parser only requires access to the lexer, and the lexer takes no + parameters. The tokens returned by the lexer may contain position + information. *) - method patternList ?(wrap=("","")) pat = - let (left, right) = wrap in - let pat_list, pat_last = self#pattern_list_split_cons [] pat in - match pat_last with - | {ppat_desc = Ppat_construct ({txt=Lident "[]"},_)} -> (* [x,y,z] *) - let wrap = (left ^ "[", "]" ^ right) in - makeList ~break:IfNeed ~wrap ~sep:"," ~postSpace:true (List.map self#pattern pat_list) - | _ -> (* x::y *) - makeES6List ~wrap (List.map self#pattern pat_list) (self#pattern pat_last) +type ('token, 'semantic_value) revised = + (unit -> 'token) -> 'semantic_value - method constrained_pattern x = match x.ppat_desc with - | Ppat_constraint (p, ct) -> - formatTypeConstraint (self#pattern p) (self#core_type ct) - | _ -> self#pattern x +(* --------------------------------------------------------------------------- *) - method simple_pattern x = - let {arityAttrs; stdAttrs} = partitionAttributes x.ppat_attributes in - if stdAttrs <> [] then - formatSimpleAttributed - (self#simple_pattern {x with ppat_attributes=arityAttrs}) - (self#attributes stdAttrs) - else - let itm = - match x.ppat_desc with - | Ppat_construct (({loc; txt=Lident ("()"|"[]" as x)}), _) -> - (* Patterns' locations might include a leading bar depending on the - * context it was parsed in. Therefore, we need to include further - * information about the contents of the pattern such as tokens etc, - * in order to get comments to be distributed correctly.*) +(* Converting a traditional parser, produced by ocamlyacc or Menhir, + into a revised parser. *) - SourceMap (loc, (atom x)) - | Ppat_construct (({txt=Lident "::"}), po) -> - self#patternList x (* LIST PATTERN *) - | Ppat_construct (({txt} as li), None) -> - let liSourceMapped = SourceMap (li.loc, (self#longident_loc li)) in - SourceMap (x.ppat_loc, liSourceMapped) - | Ppat_any -> atom "_" - | Ppat_var ({loc; txt = txt}) -> - (* - To prevent this: +(* A token of the revised lexer is essentially a triple of a token + of the traditional lexer (or raw token), a start position, and + and end position. The three [get] functions are accessors. *) - let oneArgShouldWrapToAlignWith - theFunctionNameBinding => theFunctionNameBinding; +(* We do not require the type ['token] to actually be a triple type. + This enables complex applications where it is a record type with + more than three fields. It also enables simple applications where + positions are of no interest, so ['token] is just ['raw_token] + and [get_startp] and [get_endp] return dummy positions. *) - And instead do: +let traditional2revised + (get_raw_token : 'token -> 'raw_token) + (get_startp : 'token -> Lexing.position) + (get_endp : 'token -> Lexing.position) + (parser : ('raw_token, 'semantic_value) traditional) +: ('token, 'semantic_value) revised = - let oneArgShouldWrapToAlignWith - theFunctionNameBinding => theFunctionNameBinding; + (* Accept a revised lexer. *) - We have to do something to the non "listy" patterns. Non listy - patterns don't indent the same amount as listy patterns when docked - to a label. + fun (lexer : unit -> 'token) -> - If wrapping the non-listy pattern in [ensureSingleTokenSticksToLabel] - you'll get the following (even though it should wrap) + (* Create a dummy lexing buffer. *) - let oneArgShouldWrapToAlignWith theFunctionNameBinding => theFunctionNameBinding; + let lexbuf : Lexing.lexbuf = + Lexing.from_string "" + in - *) - SourceMap (loc, (protectIdentifier txt)) - | Ppat_array l -> - self#patternArray l - | Ppat_unpack (s) -> - makeList ~wrap:("(", ")") ~break:IfNeed ~postSpace:true [atom "module"; atom s.txt] - | Ppat_type li -> - makeList [atom "#"; self#longident_loc li] - | Ppat_record (l, closed) -> - self#patternRecord l closed - | Ppat_tuple l -> - self#patternTuple l - | Ppat_constant (c) -> (self#constant c) - | Ppat_interval (c1, c2) -> makeList [self#constant c1; atom ".."; self#constant c2] - | Ppat_variant (l, None) -> makeList[atom "`"; atom l] - | Ppat_constraint (p, ct) -> - formatPrecedence (formatTypeConstraint (self#pattern p) (self#core_type ct)) - | Ppat_lazy p ->formatPrecedence (label ~space:true (atom "lazy") (self#simple_pattern p)) - | Ppat_extension e -> self#extension e - | Ppat_exception p -> - (* - An exception pattern with an alias should be wrapped in (...) - The rules for what goes to the right of the exception are a little (too) nuanced. - It accepts "non simple" parameters, except in the case of `as`. - Here we consistently apply "simplification" to the exception argument. - Example: - | exception (Sys_error _ as exc) => raise exc - parses correctly while - | Sys_error _ as exc => raise exc - results in incorrect parsing with type error otherwise. - *) - makeList ~postSpace:true [atom "exception"; self#simple_pattern p] - | _ -> formatPrecedence (self#pattern x) (* May have a redundant sourcemap *) - in - SourceMap (x.ppat_loc, itm) + (* Wrap the revised lexer as a traditional lexer. A traditional + lexer returns a raw token and updates the fields of the lexing + buffer with new positions, which will be read by the parser. *) - method label_exp lbl opt pat = - let term = self#constrained_pattern pat in - let param = match lbl with - | Nolabel -> term - | Labelled lbl | Optional lbl when is_punned_labelled_pattern pat lbl -> - makeList [atom namedArgSym; term] - | Labelled lbl | Optional lbl -> - let lblLayout= makeList ~sep:" " ~break:Never [atom (namedArgSym ^ lbl); atom "as"] in - label lblLayout ~space:true term + let lexer (lexbuf : Lexing.lexbuf) : 'raw_token = + let token : 'token = lexer() in + lexbuf.Lexing.lex_start_p <- get_startp token; + lexbuf.Lexing.lex_curr_p <- get_endp token; + get_raw_token token in - match opt, lbl with - | None, Optional _ -> makeList [param; atom "=?"] - | None, _ -> param - | Some o, _ -> makeList [param; atom "="; (self#unparseConstraintExpr ~ensureExpr:true o)] - method access op cls e1 e2 = makeList ~interleaveComments:false [ - (* Important that this be not breaking - at least to preserve same - behavior as stock desugarer. It might even be required (double check - in parser.mly) *) - e1; - atom op; - e2; - atom cls; - ] + (* Invoke the traditional parser. *) - method simple_get_application x = - let {stdAttrs; jsxAttrs} = partitionAttributes x.pexp_attributes in - match (x.pexp_desc, stdAttrs, jsxAttrs) with - | (_, attrHd::attrTl, []) -> None (* Has some printed attributes - not simple *) - | (Pexp_apply ({pexp_desc=Pexp_ident loc}, l), [], _jsx::_) -> ( - (* TODO: Soon, we will allow the final argument to be an identifier which - represents the entire list. This would be written as - `...list`. If you imagine there being an implicit [] inside - the tag, then it would be consistent with array spread: - [...list] evaluates to the thing as list. - *) - let hasLabelledChildrenLiteral = List.exists (function - | (Labelled "children", _) -> true - | _ -> false - ) l in - let rec hasSingleNonLabelledUnitAndIsAtTheEnd l = match l with - | [] -> false - | (Nolabel, {pexp_desc = Pexp_construct ({txt = Lident "()"}, _)}) :: [] -> true - | (Nolabel, _) :: rest -> false - | _ :: rest -> hasSingleNonLabelledUnitAndIsAtTheEnd rest - in - if hasLabelledChildrenLiteral && hasSingleNonLabelledUnitAndIsAtTheEnd l then - let moduleNameList = List.rev (List.tl (List.rev (Longident.flatten loc.txt))) in - if List.length moduleNameList > 0 then - if Longident.last loc.txt = "createElement" then - Some (self#formatJSXComponent (String.concat "." moduleNameList) l) - else None - else Some (self#formatJSXComponent (Longident.last loc.txt) l) - else None - ) - | (Pexp_apply (eFun, ls), [], []) -> ( - match (printedStringAndFixityExpr eFun, ls) with - (* We must take care not to print two subsequent prefix operators without - spaces between them (`! !` could become `!!` which is totally - different). *) - | (AlmostSimplePrefix prefixStr, [(Nolabel, rightExpr)]) -> - let forceSpace = match rightExpr.pexp_desc with - | Pexp_apply (ee, lsls) -> - (match printedStringAndFixityExpr ee with | AlmostSimplePrefix _ -> true | _ -> false) - | _ -> false - in - let rightItm = self#simplifyUnparseExpr rightExpr in - Some (label ~space:forceSpace (atom prefixStr) rightItm) - | (UnaryPostfix postfixStr, [(Nolabel, leftExpr)]) -> - let forceSpace = match leftExpr.pexp_desc with - | Pexp_apply (ee, lsls) -> - (match printedStringAndFixityExpr ee with - | UnaryPostfix "^" | AlmostSimplePrefix _ -> true - | _ -> false) - | _ -> false - in - let leftItm = self#simplifyUnparseExpr leftExpr in - Some (label ~space:forceSpace leftItm (atom postfixStr)) - | (Infix infixStr, [(_, leftExpr); (_, rightExpr)]) when infixStr.[0] = '#' -> - (* Little hack. We check the right expression to see if it's also a SHARPOP, if it is - we call `formatPrecedence` on the result of `simplifyUnparseExpr` to add the appropriate - parens. This is done because `unparseExpr` doesn't seem to be able to handle - high enough precedence things. Using the normal precedence handling, something like + parser lexer lexbuf - ret #= (Some 10) +(* --------------------------------------------------------------------------- *) - gets pretty printed to +(* Converting a revised parser back to a traditional parser. *) - ret #= Some 10 +let revised2traditional + (make_token : 'raw_token -> Lexing.position -> Lexing.position -> 'token) + (parser : ('token, 'semantic_value) revised) +: ('raw_token, 'semantic_value) traditional = - Which seems to indicate that the pretty printer doesn't think `#=` is of - high enough precedence for the parens to be worth adding back. *) - let rightItm = ( - match rightExpr.pexp_desc with - | Pexp_apply (eFun, ls) -> ( - match (printedStringAndFixityExpr eFun, ls) with - | (Infix infixStr, [(_, _); (_, _)]) when infixStr.[0] = '#' -> formatPrecedence (self#simplifyUnparseExpr rightExpr) - | _ -> self#simplifyUnparseExpr rightExpr - ) - | _ -> self#simplifyUnparseExpr rightExpr - ) in - Some (makeList [self#simple_enough_to_be_lhs_dot_send leftExpr; atom infixStr; rightItm]) - | (_, _) -> ( - match (eFun, ls) with - | ({pexp_desc = Pexp_ident {txt = Ldot (Lident ("Array"),"get")}}, [(_,e1);(_,e2)]) -> - Some (self#access "[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)) - | ({pexp_desc = Pexp_ident {txt = Ldot (Lident ("String"),"get")}}, [(_,e1);(_,e2)]) -> - Some (self#access ".[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)) - | ( - {pexp_desc= Pexp_ident {txt=Ldot (Ldot (Lident "Bigarray", "Genarray" ), "get")}}, - [(_,a); (_,{pexp_desc=Pexp_array ls})] - ) -> - let formattedList = List.map self#simplifyUnparseExpr ls in - Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList)) - | ({pexp_desc= Pexp_ident {txt=Ldot (Ldot (Lident "Bigarray", ("Array1"|"Array2"|"Array3")), "get")}}, (_,a)::rest) -> - let formattedList = List.map self#simplifyUnparseExpr (List.map snd rest) in - Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList)) - | _ -> None - ) - ) - | _ -> None + (* Accept a traditional lexer and a lexing buffer. *) - (** Detects "sugar expressions" (sugar for array/string setters) and returns their separate - parts. *) - method sugar_set_expr_parts e = - if e.pexp_attributes <> [] then None - (* should also check attributes underneath *) - else match e.pexp_desc with - | Pexp_apply ({pexp_desc=Pexp_ident{txt=Ldot (Lident ("Array"), "set")}}, [(_,e1);(_,e2);(_,e3)]) -> - Some (self#access "[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2), e3) - | Pexp_apply ({pexp_desc=Pexp_ident {txt=Ldot (Lident "String", "set")}}, [(_,e1);(_,e2);(_,e3)]) -> - Some ((self#access ".[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)), e3) - | Pexp_apply ( - {pexp_desc=Pexp_ident {txt = Ldot (Ldot (Lident "Bigarray", array), "set")}}, - label_exprs - ) -> ( - match array with - | "Genarray" -> ( - match label_exprs with - | [(_,a);(_,{pexp_desc=Pexp_array ls});(_,c)] -> - let formattedList = List.map self#simplifyUnparseExpr ls in - Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList), c) - | _ -> None - ) - | ("Array1"|"Array2"|"Array3") -> ( - match label_exprs with - | (_,a)::rest -> ( - match List.rev rest with - | (_,v)::rest -> - let args = List.map snd (List.rev rest) in - let formattedList = List.map self#simplifyUnparseExpr args in - Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList), v) - | _ -> assert false - ) - | _ -> assert false - ) - | _ -> None - ) - | _ -> None + fun (lexer : Lexing.lexbuf -> 'raw_token) (lexbuf : Lexing.lexbuf) -> - (* + (* Wrap the traditional lexer as a revised lexer. *) - How would we know not to print the sequence without { }; protecting the let a? + let lexer () : 'token = + let token : 'raw_token = lexer lexbuf in + make_token token lexbuf.Lexing.lex_start_p lexbuf.Lexing.lex_curr_p + in - let a - | - sequence - / \ - let a print a - alert a - let res = { - let a = something(); - { \ - alert(a); | portion to be parsed as a sequence() - let a = 20; | The final ; print(a) causes the entire - alert(a); | portion to be parsed as a sequence() - }; | - print (a); / - } + (* Invoke the revised parser. *) - ****************************************************************** - Any time the First expression of a sequence is another sequence, or (as in - this case) a let, wrapping the first sequence expression in { } is - required. - ****************************************************************** - *) + parser lexer - (** - TODO: Configure the optional ability to print the *minimum* number of - parens. It's simply a matter of changing [higherPrecedenceThan] to - [higherOrEqualPrecedenceThan]. - *) +(* --------------------------------------------------------------------------- *) - (* The point of the function is to ensure that ~reducesAfterRight:rightExpr will reduce - at the proper time when it is reparsed, possibly wrapping it - in parenthesis if needed. It ensures a rule doesn't reduce - until *after* `reducesAfterRight` gets a chance to reduce. - Example: The addtion rule which has precedence of rightmost - token "+", in `x + a * b` should not reduce until after the a * b gets - a chance to reduce. This function would determine the minimum parens to - ensure that. *) - method ensureContainingRule ~withPrecedence ~reducesAfterRight () = - match self#unparseExprRecurse reducesAfterRight with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, rightRecurse)-> - if higherPrecedenceThan shiftPrecedence withPrecedence then begin - rightRecurse - end - else if (higherPrecedenceThan withPrecedence shiftPrecedence) then - LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc (self#unparseResolvedRule rightRecurse)) - else ( - if isRightAssociative withPrecedence then - rightRecurse - else - LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc (self#unparseResolvedRule rightRecurse)) - ) - | FunctionApplication itms -> - LayoutNode (formatAttachmentApplication applicationFinalWrapping None (itms, Some reducesAfterRight.pexp_loc)) - | PotentiallyLowPrecedence itm -> LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc itm) - | Simple itm -> LayoutNode itm +(* Simplified versions of the above, where concrete triples are used. *) - method ensureExpression ~reducesOnToken expr = - match self#unparseExprRecurse expr with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, leftRecurse) -> - if higherPrecedenceThan reducePrecedence reducesOnToken then leftRecurse - else if higherPrecedenceThan reducesOnToken reducePrecedence then - LayoutNode (formatPrecedence ~loc:expr.pexp_loc (self#unparseResolvedRule leftRecurse)) - else ( - if isLeftAssociative reducesOnToken then - leftRecurse - else - LayoutNode (formatPrecedence ~loc:expr.pexp_loc (self#unparseResolvedRule leftRecurse)) - ) - | FunctionApplication itms -> LayoutNode (formatAttachmentApplication applicationFinalWrapping None (itms, Some expr.pexp_loc)) - | PotentiallyLowPrecedence itm -> LayoutNode (formatPrecedence ~loc:expr.pexp_loc itm) - | Simple itm -> LayoutNode itm +module Simplified = struct - (** Attempts to unparse: The beginning of a more general printing algorithm, - that determines how to print based on precedence of tokens and rules. - The end goal is that this should be completely auto-generated from the - Menhir parsing tables. We could move more and more into this function. + let traditional2revised parser = + traditional2revised + (fun (token, _, _) -> token) + (fun (_, startp, _) -> startp) + (fun (_, _, endp) -> endp) + parser - You could always just call self#expression, but `unparseExpr` will render - infix/prefix/unary/terary fixities in their beautiful forms while - minimizing parenthesis. - *) - method unparseExpr x = - match self#unparseExprRecurse x with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, resolvedRule) -> - self#unparseResolvedRule resolvedRule - | FunctionApplication itms -> formatAttachmentApplication applicationFinalWrapping None (itms, Some x.pexp_loc) - | PotentiallyLowPrecedence itm -> itm - | Simple itm -> itm + let revised2traditional parser = + revised2traditional + (fun token startp endp -> (token, startp, endp)) + parser - method unparseUnattributedExpr x = - match partitionAttributes x.pexp_attributes with - | {docAttrs = []; stdAttrs = []; _} -> self#unparseExpr x - | _ -> match x.pexp_desc with - | Pexp_open _ | Pexp_let _ | Pexp_letmodule _ | Pexp_sequence _ -> - makeLetSequence (self#letList x) - | _ -> - makeList ~wrap:("(",")") [self#unparseExpr x] +end +end +module IncrementalEngine = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - (* ensureExpr ensures that the expression is wrapped in parens - * e.g. is necessary in cases like: - * let display = (:message=("hello": string)) => 1; - * but not in cases like: - * let f = (a: bool) => 1; - * TODO: in the future we should probably use the type ruleCategory - * to 'automatically' ensure the validity of a constraint expr with parens... - *) - method unparseConstraintExpr ?(ensureExpr=false) e = match e with - | { pexp_attributes = []; pexp_desc = Pexp_constraint (x, ct) } -> - let x = self#unparseExpr x in - let children = [x; label ~space:true (atom ":") (self#core_type ct)] in - if ensureExpr then - makeList ~wrap:("(", ")") children - else makeList children - | { pexp_attributes; pexp_desc = Pexp_constant c } -> - (* When we have Some(-1) or someFunction(-1, -2), the arguments -1 and -2 - * pass through this case. In this context they don't need to be wrapped in extra parens - * Some((-1)) should be printed as Some(-1). This is in contrast with - * 1 + (-1) where we print the parens for readability. *) - let constant = self#constant ~parens:ensureExpr c in - begin match pexp_attributes with - | [] -> constant - | attrs -> - let formattedAttrs = makeSpacedBreakableInlineList (List.map self#item_attribute attrs) in - makeSpacedBreakableInlineList [formattedAttrs; constant] - end - | x -> self#unparseExpr x +type position = Lexing.position - method simplifyUnparseExpr x = - match self#unparseExprRecurse x with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, itm) -> - formatPrecedence ~loc:x.pexp_loc (self#unparseResolvedRule itm) - | FunctionApplication itms -> - formatPrecedence ~loc:x.pexp_loc (formatAttachmentApplication applicationFinalWrapping None (itms, Some x.pexp_loc)) - | PotentiallyLowPrecedence itm -> formatPrecedence ~loc:x.pexp_loc itm - | Simple itm -> itm +open General +(* This signature describes the incremental LR engine. *) - method unparseResolvedRule = function - | LayoutNode layoutNode -> layoutNode - | InfixTree _ as infixTree -> - let infixChainList = computeInfixChain infixTree in - let l = formatComputedInfixChain infixChainList in - makeList ~inline:(true, true) ~sep:" " ~break:IfNeed l +(* In this mode, the user controls the lexer, and the parser suspends + itself when it needs to read a new token. *) +module type INCREMENTAL_ENGINE = sig - method unparseExprApplicationItems x = - match self#unparseExprRecurse x with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, wrappedRule) -> - let itm = self#unparseResolvedRule wrappedRule in - ([itm], Some x.pexp_loc) - | FunctionApplication itms -> (itms, Some x.pexp_loc) - | PotentiallyLowPrecedence itm -> ([itm], Some x.pexp_loc) - | Simple itm -> ([itm], Some x.pexp_loc) + type token + (* A value of type [production] is (an index for) a production. The start + productions (which do not exist in an \mly file, but are constructed by + Menhir internally) are not part of this type. *) - method unparseExprRecurse x = - (* If there are any attributes, render unary like `(~-) x [@ppx]`, and infix like `(+) x y [@attr]` *) - let {arityAttrs; stdAttrs; jsxAttrs} = partitionAttributes x.pexp_attributes in - (* If there's any attributes, recurse without them, then apply them to - the ends of functions, or simplify infix printings then append. *) - if stdAttrs <> [] then - let withoutVisibleAttrs = {x with pexp_attributes=(arityAttrs @ jsxAttrs)} in - let attributesAsList = (List.map self#attribute stdAttrs) in - let itms = match self#unparseExprRecurse withoutVisibleAttrs with - | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, wrappedRule) -> - let itm = self#unparseResolvedRule wrappedRule in - [formatPrecedence ~loc:x.pexp_loc itm] - | FunctionApplication itms -> itms - | PotentiallyLowPrecedence itm -> [formatPrecedence ~loc:x.pexp_loc itm] - | Simple itm -> [itm] - in - FunctionApplication [ - makeList - ~break:IfNeed - ~inline:(true, true) - ~indent:0 - ~postSpace:true - (List.concat [attributesAsList; itms]) - ] - else - match self#simplest_expression x with - | Some se -> Simple se - | None -> - match x.pexp_desc with - | Pexp_apply (e, ls) -> ( - match (self#sugar_set_expr_parts x) with - (* Returns None if there's attributes - would render as regular function *) - (* Format as if it were an infix function application with identifier "=" *) - | Some (simplyFormatedLeftItm, rightExpr) -> ( - let tokenPrec = Token updateToken in - let rightItm = self#ensureContainingRule ~withPrecedence:tokenPrec ~reducesAfterRight:rightExpr () in - let leftWithOp = makeList ~postSpace:true [simplyFormatedLeftItm; atom updateToken] in - let expr = label ~space:true leftWithOp (self#unparseResolvedRule rightItm) in - SpecificInfixPrecedence ({reducePrecedence=tokenPrec; shiftPrecedence=tokenPrec}, LayoutNode expr) - ) - | None -> ( - match (printedStringAndFixityExpr e, ls) with - | (Infix printedIdent, [(Nolabel, leftExpr); (Nolabel, rightExpr)]) -> - let infixToken = Token printedIdent in - let rightItm = self#ensureContainingRule ~withPrecedence:infixToken ~reducesAfterRight:rightExpr () in - let leftItm = self#ensureExpression ~reducesOnToken:infixToken leftExpr in - let infixTree = InfixTree (printedIdent, leftItm, rightItm) in - SpecificInfixPrecedence ({reducePrecedence=infixToken; shiftPrecedence=infixToken}, infixTree) - (* Will be rendered as `(+) a b c` which is parsed with higher precedence than all - the other forms unparsed here.*) - | (UnaryPlusPrefix printedIdent, [(Nolabel, rightExpr)]) -> - let prec = Custom "prec_unary" in - let rightItm = self#unparseResolvedRule ( - self#ensureContainingRule ~withPrecedence:prec ~reducesAfterRight:rightExpr () - ) in - let expr = label ~space:true (atom printedIdent) rightItm in - SpecificInfixPrecedence ({reducePrecedence=prec; shiftPrecedence=Token printedIdent}, LayoutNode expr) - | (UnaryMinusPrefix printedIdent, [(Nolabel, rightExpr)]) - | (UnaryNotPrefix printedIdent, [(Nolabel, rightExpr)]) -> - let prec = Custom "prec_unary" in - let rightItm = self#unparseResolvedRule ( - self#ensureContainingRule ~withPrecedence:prec ~reducesAfterRight:rightExpr () - ) in - let expr = label ~space:true (atom printedIdent) rightItm in - SpecificInfixPrecedence ({reducePrecedence=prec; shiftPrecedence=Token printedIdent}, LayoutNode expr) - (* Will need to be rendered in self#expression as (~-) x y z. *) - | (_, _) -> - (* This case will happen when there is something like + type production - Bar.createElement a::1 b::2 [] [@bla] [@JSX] + (* The type ['a checkpoint] represents an intermediate or final state of the + parser. An intermediate checkpoint is a suspension: it records the parser's + current state, and allows parsing to be resumed. The parameter ['a] is + the type of the semantic value that will eventually be produced if the + parser succeeds. *) - At this point the bla will be stripped (because it's a visible - attribute) but the JSX will still be there. - *) - (* If there was a JSX attribute BUT JSX component wasn't detected, - that JSX attribute needs to be pretty printed so it doesn't get - lost - *) - let maybeJSXAttr = List.map self#attribute jsxAttrs in - let theFunc = SourceMap (e.pexp_loc, self#simplifyUnparseExpr e) in - (*reset here only because [function,match,try,sequence] are lower priority*) - let theArgs = self#reset#label_x_expression_params ls in - FunctionApplication (maybeJSXAttr @ [label theFunc theArgs]) - ) - ) - | Pexp_construct (li, Some eo) when not (is_simple_construct (view_expr x)) -> ( - match view_expr x with - (* TODO: Explicit arity *) - | `normal -> - let arityIsClear = isArityClear arityAttrs in - FunctionApplication [self#constructor_expression ~arityIsClear stdAttrs (self#longident_loc li) eo] - | _ -> assert false - ) - | Pexp_variant (l, Some eo) -> - if arityAttrs != [] then - raise (NotPossible "Should never see embedded attributes on poly variant") - else - FunctionApplication [self#constructor_expression ~polyVariant:true ~arityIsClear:true stdAttrs (atom ("`" ^ l)) eo] - (* TODO: Should protect this identifier *) - | Pexp_setinstvar (s, rightExpr) -> - let rightItm = self#unparseResolvedRule ( - self#ensureContainingRule ~withPrecedence:(Token updateToken) ~reducesAfterRight:rightExpr () - ) in - let expr = label ~space:true (makeList ~postSpace:true [(protectIdentifier s.txt); atom updateToken]) rightItm in - SpecificInfixPrecedence ({reducePrecedence=(Token updateToken); shiftPrecedence=(Token updateToken)}, LayoutNode expr) - | Pexp_setfield (leftExpr, li, rightExpr) -> - let rightItm = self#unparseResolvedRule ( - self#ensureContainingRule ~withPrecedence:(Token updateToken) ~reducesAfterRight:rightExpr () - ) in - let leftItm = - label - (makeList ~interleaveComments:false [self#simple_enough_to_be_lhs_dot_send leftExpr; atom "."]) - (self#longident_loc li) in - let expr = label ~space:true (makeList ~postSpace:true [leftItm; atom updateToken]) rightItm in - SpecificInfixPrecedence ({reducePrecedence=(Token updateToken); shiftPrecedence=(Token updateToken)}, LayoutNode expr) - | Pexp_match (e, l) when detectTernary l != None -> ( - match detectTernary l with - | None -> raise (Invalid_argument "Impossible") - | Some (tt, ff) -> - let ifTrue = self#unparseExpr tt in - let testItm = self#unparseResolvedRule ( - self#ensureExpression e ~reducesOnToken:(Token "?") - ) in - let ifFalse = self#unparseResolvedRule ( - self#ensureContainingRule ~withPrecedence:(Token ":") ~reducesAfterRight:ff () - ) in - let withQuestion = SourceMap (e.pexp_loc, makeList ~postSpace:true [testItm; atom "?"]) in - let trueFalseBranches = - makeList ~inline:(true, true) ~break:IfNeed ~sep:":" ~postSpace:true ~preSpace:true [ifTrue; ifFalse] - in - let expr = label ~space:true withQuestion trueFalseBranches in - SpecificInfixPrecedence ({reducePrecedence=Token ":"; shiftPrecedence=Token "?"}, LayoutNode expr) - ) - | _ -> ( - match self#expression_requiring_parens_in_infix x with - | Some e -> PotentiallyLowPrecedence e - | None -> raise (Invalid_argument "No match for unparsing expression") - ) + (* [Accepted] and [Rejected] are final checkpoints. [Accepted] carries a + semantic value. *) - (* - It's not enough to only check if precedence of an infix left/right is - greater than the infix itself. We also should likely pay attention to - left/right associativity. So how do we render the minimum number of - parenthesis? + (* [InputNeeded] is an intermediate checkpoint. It means that the parser wishes + to read one token before continuing. *) - The intuition is that sequential right associative operators will - naturally build up deep trees on the right side (left builds up left-deep - trees). So by default, we add parens to model the tree structure that - we're rendering except when the parser will *naturally* parse the tree - structure that the parens assert. + (* [Shifting] is an intermediate checkpoint. It means that the parser is taking + a shift transition. It exposes the state of the parser before and after + the transition. The Boolean parameter tells whether the parser intends to + request a new token after this transition. (It always does, except when + it is about to accept.) *) - Sequential identical infix operators: - ------------------------------------ - So if we see a nested infix operator of precedence Y, as one side of - another infix operator that has the same precedence (Y), that is S - associative on the S side of the function application, we don't need to - wrap in parens. In more detail: + (* [AboutToReduce] is an intermediate checkpoint. It means that the parser is + about to perform a reduction step. It exposes the parser's current + state as well as the production that is about to be reduced. *) - -Add parens around infix binary function application - Exception 1: Unless we are a left-assoc operator of precedence X in the left branch of an operator w/ precedence X. - Exception 2: Unless we are a right-assoc operator of precedence X in the right branch of an operator w/ precedence X. - Exception 3: Unless we are a _any_-assoc X operator in the _any_ branch of an Y operator where X has greater precedence than Y. + (* [HandlingError] is an intermediate checkpoint. It means that the parser has + detected an error and is currently handling it, in several steps. *) - Note that the exceptions do not specify any special cases for mixing - left/right associativity. Precedence is what determines necessity of - parens for operators with non-identical precedences. Associativity - only determines necessity of parens for identically precedented operators. + (* A value of type ['a env] represents a configuration of the automaton: + current state, stack, lookahead token, etc. The parameter ['a] is the + type of the semantic value that will eventually be produced if the parser + succeeds. *) - PLUS is left assoc: - - So this one *shouldn't* expand into two consecutive infix +: + (* In normal operation, the parser works with checkpoints: see the functions + [offer] and [resume]. However, it is also possible to work directly with + environments (see the functions [pop], [force_reduction], and [feed]) and + to reconstruct a checkpoint out of an environment (see [input_needed]). + This is considered advanced functionality; its purpose is to allow error + recovery strategies to be programmed by the user. *) + type 'a env - [Pexp_apply] - / \ - first + [Pexp_apply] - / \ - second + third + type 'a checkpoint = private + | InputNeeded of 'a env + | Shifting of 'a env * 'a env * bool + | AboutToReduce of 'a env * production + | HandlingError of 'a env + | Accepted of 'a + | Rejected + (* [offer] allows the user to resume the parser after it has suspended + itself with a checkpoint of the form [InputNeeded env]. [offer] expects the + old checkpoint as well as a new token and produces a new checkpoint. It does not + raise any exception. *) - - This one *should*: + val offer: + 'a checkpoint -> + token * position * position -> + 'a checkpoint - [Pexp_apply] - / \ - [ Pexp_apply ] + third - / \ - first + second + (* [resume] allows the user to resume the parser after it has suspended + itself with a checkpoint of the form [AboutToReduce (env, prod)] or + [HandlingError env]. [resume] expects the old checkpoint and produces a new + checkpoint. It does not raise any exception. *) + val resume: + 'a checkpoint -> + 'a checkpoint + (* A token supplier is a function of no arguments which delivers a new token + (together with its start and end positions) every time it is called. *) - COLONCOLON is right assoc, so - - This one *should* expand into two consecutive infix :: : + type supplier = + unit -> token * position * position - [Pexp_apply] - / \ - first :: [Pexp_apply] - / \ - second :: third + (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) + val lexer_lexbuf_to_supplier: + (Lexing.lexbuf -> token) -> + Lexing.lexbuf -> + supplier - - This one *shouldn't*: + (* The functions [offer] and [resume] are sufficient to write a parser loop. + One can imagine many variations (which is why we expose these functions + in the first place!). Here, we expose a few variations of the main loop, + ready for use. *) - [Pexp_apply] - / \ - [ Pexp_apply ] :: third - / \ - first :: second + (* [loop supplier checkpoint] begins parsing from [checkpoint], reading + tokens from [supplier]. It continues parsing until it reaches a + checkpoint of the form [Accepted v] or [Rejected]. In the former case, it + returns [v]. In the latter case, it raises the exception [Error]. *) + val loop: supplier -> 'a checkpoint -> 'a + (* [loop_handle succeed fail supplier checkpoint] begins parsing from + [checkpoint], reading tokens from [supplier]. It continues parsing until + it reaches a checkpoint of the form [Accepted v] or [HandlingError env] + (or [Rejected], but that should not happen, as [HandlingError _] will be + observed first). In the former case, it calls [succeed v]. In the latter + case, it calls [fail] with this checkpoint. It cannot raise [Error]. + This means that Menhir's traditional error-handling procedure (which pops + the stack until a state that can act on the [error] token is found) does + not get a chance to run. Instead, the user can implement her own error + handling code, in the [fail] continuation. *) - Sequential differing infix operators: - ------------------------------------ + val loop_handle: + ('a -> 'answer) -> + ('a checkpoint -> 'answer) -> + supplier -> 'a checkpoint -> 'answer - Neither of the following require paren grouping because of rule 3. + (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair + of checkpoints to the failure continuation. + The first (and oldest) checkpoint is the last [InputNeeded] checkpoint that + was encountered before the error was detected. The second (and newest) + checkpoint is where the error was detected, as in [loop_handle]. Going back + to the first checkpoint can be thought of as undoing any reductions that + were performed after seeing the problematic token. (These reductions must + be default reductions or spurious reductions.) - [Pexp_apply] - / \ - first + [Pexp_apply] - / \ - second * third + [loop_handle_undo] must initially be applied to an [InputNeeded] checkpoint. + The parser's initial checkpoints satisfy this constraint. *) + val loop_handle_undo: + ('a -> 'answer) -> + ('a checkpoint -> 'a checkpoint -> 'answer) -> + supplier -> 'a checkpoint -> 'answer - [Pexp_apply] - / \ - [Pexp_apply + third - / \ - first * second + (* [shifts checkpoint] assumes that [checkpoint] has been obtained by + submitting a token to the parser. It runs the parser from [checkpoint], + through an arbitrary number of reductions, until the parser either + accepts this token (i.e., shifts) or rejects it (i.e., signals an error). + If the parser decides to shift, then [Some env] is returned, where [env] + is the parser's state just before shifting. Otherwise, [None] is + returned. *) - The previous has nothing to do with the fact that + and * have the same - associativity. Exception 3 applies to the following where :: is right assoc - and + is left. + has higher precedence than :: + (* It is desirable that the semantic actions be side-effect free, or that + their side-effects be harmless (replayable). *) - - so parens aren't required to group + when it is in a branch of a - lower precedence :: + val shifts: 'a checkpoint -> 'a env option - [Pexp_apply] - / \ - first :: [Pexp_apply] - / \ - second + third + (* The function [acceptable] allows testing, after an error has been + detected, which tokens would have been accepted at this point. It is + implemented using [shifts]. Its argument should be an [InputNeeded] + checkpoint. *) + (* For completeness, one must undo any spurious reductions before carrying out + this test -- that is, one must apply [acceptable] to the FIRST checkpoint + that is passed by [loop_handle_undo] to its failure continuation. *) - - Whereas there is no Exception that applies in this case (Exception 3 - doesn't apply) so parens are required around the :: in this case. + (* This test causes some semantic actions to be run! The semantic actions + should be side-effect free, or their side-effects should be harmless. *) - [Pexp_apply] - / \ - [ Pexp_apply ] + third - / \ - first :: second + (* The position [pos] is used as the start and end positions of the + hypothetical token, and may be picked up by the semantic actions. We + suggest using the position where the error was detected. *) - *) + val acceptable: 'a checkpoint -> token -> position -> bool - method classExpressionToFormattedApplicationItems = function - | { pcl_desc = Pcl_apply (ce, l) } -> - [label (self#simple_class_expr ce) (self#label_x_expression_params l)] - | x -> [self#class_expr x] + (* The abstract type ['a lr1state] describes the non-initial states of the + LR(1) automaton. The index ['a] represents the type of the semantic value + associated with this state's incoming symbol. *) + type 'a lr1state - (** - How JSX is formatted/wrapped. We want the attributes to wrap independently - of children. + (* The states of the LR(1) automaton are numbered (from 0 and up). *) - - child - child - child - + val number: _ lr1state -> int - +-------------------------------+ - | left right (list of attrs) | - | / \ / \ | - | - | +---------+ - +--| | > - +---------+ + (* Productions are numbered. *) - *) - method formatJSXComponent componentName args = - let rec processArguments arguments processedAttrs children = - match arguments with - | (Labelled "children", {pexp_desc = Pexp_construct (_, None)}) :: tail -> - processArguments tail processedAttrs None - | (Labelled "children", {pexp_desc = Pexp_construct ({txt = Lident"::"}, Some {pexp_desc = Pexp_tuple(components)} )}) :: tail -> - processArguments tail processedAttrs (self#formatChildren components []) - | (Labelled "children", expr) :: tail -> - let childLayout = self#simplifyUnparseExpr expr in - let dotdotdotChild = makeList ~break:Never [atom "..."; childLayout] in - processArguments tail processedAttrs (Some [dotdotdotChild]) - | (Optional lbl, expression) :: tail -> - let nextAttr = - match expression.pexp_desc with - | Pexp_ident (ident) when isPunnedJsxArg lbl ident -> - makeList ~break:Never [atom "?"; atom lbl] - | _ -> - label (makeList ~break:Never [atom lbl; atom "=?"]) (self#simplifyUnparseExpr expression) in - processArguments tail (nextAttr :: processedAttrs) children + (* [find_production i] requires the index [i] to be valid. Use with care. *) - | (Labelled lbl, expression) :: tail -> - let nextAttr = - match expression.pexp_desc with - | Pexp_ident (ident) when isPunnedJsxArg lbl ident -> atom lbl - | Pexp_record _ - | Pexp_construct _ - | Pexp_array _ - | Pexp_tuple _ - | Pexp_match _ - | Pexp_extension _ - | Pexp_fun _ - | Pexp_apply _ -> label (makeList [atom lbl; atom "="]) (self#simplifyUnparseExpr expression) - | _ -> makeList ([atom lbl; atom "="; self#simplifyUnparseExpr expression]) - in - processArguments tail (nextAttr :: processedAttrs) children - | [] -> (processedAttrs, children) - | _ :: tail -> processArguments tail processedAttrs children - in - let (reversedAttributes, children) = processArguments args [] None in - match children with - | None -> - makeList - ~break:IfNeed - ~wrap:("<" ^ componentName, "/>") - ~pad:(true, true) - ~inline:(false, false) - ~postSpace:true - (List.rev reversedAttributes) - | Some renderedChildren -> - let openTagAndAttrs = - match reversedAttributes with - | [] -> (atom ("<" ^ componentName ^ ">")) - | revAttrHd::revAttrTl -> - let finalAttrList = (List.rev (makeList ~break:Never [revAttrHd; atom ">"] :: revAttrTl)) in - let renderedAttrList = (makeList ~inline:(true, true) ~break:IfNeed ~pad:(false, false) ~preSpace:true finalAttrList) in - label - ~space:true - (atom ("<" ^ componentName)) - renderedAttrList - in - label - openTagAndAttrs - (makeList - ~wrap:("", "") - ~inline:(true, false) - ~break:IfNeed - ~pad:(true, true) - ~postSpace:true - renderedChildren) + val production_index: production -> int + val find_production: int -> production + (* An element is a pair of a non-initial state [s] and a semantic value [v] + associated with the incoming symbol of this state. The idea is, the value + [v] was pushed onto the stack just before the state [s] was entered. Thus, + for some type ['a], the state [s] has type ['a lr1state] and the value [v] + has type ['a]. In other words, the type [element] is an existential type. *) - (* Creates a list of simple module expressions corresponding to module - expression or functor application. *) - method moduleExpressionToFormattedApplicationItems x = - let rec extract_apps args = function - | { pmod_desc = Pmod_apply (me1, me2) } -> - extract_apps - (SourceMap (me2.pmod_loc, self#simple_module_expr me2) :: args) me1 - | me -> - let head = SourceMap (me.pmod_loc, self#module_expr me) in - if args = [] then head else label head (makeTup args) - in - extract_apps [] x + type element = + | Element: 'a lr1state * 'a * position * position -> element - (* + (* The parser's stack is (or, more precisely, can be viewed as) a stream of + elements. The type [stream] is defined by the module [General]. *) - Watch out, if you see something like below (sixteenTuple getting put on a - newline), yet a paren-wrapped list wouldn't have had an extra newlin, you - might need to wrap the single token (sixteenTuple) in [ensureSingleTokenSticksToLabel]. - let ( - axx, - oxx, - pxx - ): - sixteenTuple = echoTuple ( - 0, - 0, - 0 - ); - *) + (* As of 2017/03/31, the types [stream] and [stack] and the function [stack] + are DEPRECATED. They might be removed in the future. An alternative way + of inspecting the stack is via the functions [top] and [pop]. *) - method formatSimplePatternBinding labelOpener layoutPattern typeConstraint appTerms = - let letPattern = label ~break:`Never ~space:true (atom labelOpener) layoutPattern in - let upUntilEqual = - match typeConstraint with - | None -> letPattern - | Some tc -> formatTypeConstraint letPattern tc - in - let includingEqual = makeList ~postSpace:true [upUntilEqual; atom "="] in - formatAttachmentApplication applicationFinalWrapping (Some (true, includingEqual)) appTerms + type stack = (* DEPRECATED *) + element stream - (* Only formats a type annotation for a value binding. *) - method formatSimpleSignatureBinding labelOpener bindingPattern typeConstraint = - let letPattern = (label ~space:true (atom labelOpener) bindingPattern) in - (formatTypeConstraint letPattern typeConstraint) + (* This is the parser's stack, a stream of elements. This stream is empty if + the parser is in an initial state; otherwise, it is non-empty. The LR(1) + automaton's current state is the one found in the top element of the + stack. *) + val stack: 'a env -> stack (* DEPRECATED *) - (* - The [bindingLabel] is either the function name (if let binding) or first - arg (if lambda). + (* [top env] returns the parser's top stack element. The state contained in + this stack element is the current state of the automaton. If the stack is + empty, [None] is returned. In that case, the current state of the + automaton must be an initial state. *) - For defining layout of the following form: + val top: 'a env -> element option - lbl one - two - constraint => { - ... - } + (* [pop_many i env] pops [i] cells off the automaton's stack. This is done + via [i] successive invocations of [pop]. Thus, [pop_many 1] is [pop]. The + index [i] must be nonnegative. The time complexity is O(i). *) - If using "=" as the arrow, can also be used for: + val pop_many: int -> 'a env -> 'a env option - met private - myMethod - constraint = fun ... + (* [get i env] returns the parser's [i]-th stack element. The index [i] is + 0-based: thus, [get 0] is [top]. If [i] is greater than or equal to the + number of elements in the stack, [None] is returned. The time complexity + is O(i). *) - *) - method wrapCurriedFunctionBinding - ?(attachTo) - ~arrow - ?(sweet=false) - prefixText - bindingLabel - patternList - returnedAppTerms = - let allPatterns = bindingLabel::patternList in - let partitioning = curriedFunctionFinalWrapping allPatterns in - let everythingButReturnVal = match settings.returnStyle with - (* - Because align_closing is set to false, you get: + val get: int -> 'a env -> element option - (Brackets[] inserted to show boundaries between open/close of pattern list) - let[firstThing - secondThing - thirdThing] + (* [current_state_number env] is (the integer number of) the automaton's + current state. This works even if the automaton's stack is empty, in + which case the current state is an initial state. This number can be + passed as an argument to a [message] function generated by [menhir + --compile-errors]. *) - It only wraps to indent four by coincidence: If the "opening" token was - longer, you'd get: + val current_state_number: 'a env -> int - letReallyLong[firstThing - secondThing - thirdThing] + (* [equal env1 env2] tells whether the parser configurations [env1] and + [env2] are equal in the sense that the automaton's current state is the + same in [env1] and [env2] and the stack is *physically* the same in + [env1] and [env2]. If [equal env1 env2] is [true], then the sequence of + the stack elements, as observed via [pop] and [top], must be the same in + [env1] and [env2]. Also, if [equal env1 env2] holds, then the checkpoints + [input_needed env1] and [input_needed env2] must be equivalent. The + function [equal] has time complexity O(1). *) - For curried let bindings, we stick the arrow in the *last* pattern: - let[firstThing - secondThing - thirdThing =>] + val equal: 'a env -> 'a env -> bool - But it could have just as easily been the "closing" token corresponding to - "let". This works because we have [align_closing = false]. The benefit of - shoving it in the last pattern, is that we can turn [align_closing = true] - and still have the arrow stuck to the last pattern (which is usually what we - want) (See modeTwo below). - *) - | ReturnValOnSameLine -> ( - match partitioning with - | None when sweet -> - makeList - ~pad:(false, true) - ~wrap:("", arrow) - ~indent:(settings.space * settings.indentWrappedPatternArgs) - ~postSpace:true - ~inline:(true, true) - ~break:IfNeed - allPatterns - | None -> - (* We want the binding label to break *with* the arguments. Again, - there's no apparent way to add additional indenting for the - args with this setting. *) - - (** - Formats lambdas by treating the first pattern as the - "bindingLabel" which is kind of strange in some cases (when - you only have one arg that wraps)... - - echoTheEchoer ( - fun ( - a, - p - ) => ( - a, - b - ) + (* These are the start and end positions of the current lookahead token. If + invoked in an initial state, this function returns a pair of twice the + initial position. *) - But it makes sense in others (where you have multiple args): + val positions: 'a env -> position * position - echoTheEchoer ( - fun ( - a, - p - ) - mySecondArg - myThirdArg => ( - a, - b - ) + (* When applied to an environment taken from a checkpoint of the form + [AboutToReduce (env, prod)], the function [env_has_default_reduction] + tells whether the reduction that is about to take place is a default + reduction. *) - Try any other convention for wrapping that first arg and it - won't look as balanced when adding multiple args. + val env_has_default_reduction: 'a env -> bool - *) - makeList - ~pad:(true, true) - ~wrap:(prefixText, arrow) - ~indent:(settings.space * settings.indentWrappedPatternArgs) - ~postSpace:true - ~inline:(true, true) - ~break:IfNeed - allPatterns - | Some (attachedList, wrappedListy) -> - (* To get *only* the final argument to "break", while not - necessarily breaking the prior arguments, we dock everything - but the last item to a created label *) - label - ~space:true - ( - makeList - ~pad:(true, true) - ~wrap:(prefixText, arrow) - ~indent:(settings.space * settings.indentWrappedPatternArgs) - ~postSpace:true - ~inline:(true, true) - ~break:IfNeed - attachedList - ) - wrappedListy - ) - in + (* [state_has_default_reduction s] tells whether the state [s] has a default + reduction. This includes the case where [s] is an accepting state. *) - let everythingButAppTerms = match attachTo with - | None -> everythingButReturnVal - | Some toThis -> label ~space:true toThis everythingButReturnVal - in - formatAttachmentApplication - applicationFinalWrapping - (Some (true, everythingButAppTerms)) - returnedAppTerms + val state_has_default_reduction: _ lr1state -> bool - method leadingCurriedAbstractTypes x = - let rec argsAndReturn xx = - match xx.pexp_desc with - | Pexp_newtype (str,e) -> - let (nextArgs, return) = argsAndReturn e in - (str::nextArgs, return) - | _ -> ([], xx.pexp_desc) - in argsAndReturn x + (* [pop env] returns a new environment, where the parser's top stack cell + has been popped off. (If the stack is empty, [None] is returned.) This + amounts to pretending that the (terminal or nonterminal) symbol that + corresponds to this stack cell has not been read. *) - method curriedConstructorPatternsAndReturnVal cl = - let rec argsAndReturn args = function - | { pcl_desc = Pcl_fun (label, eo, p, e); pcl_attributes = [] } -> - let arg = SourceMap (p.ppat_loc, self#label_exp label eo p) in - argsAndReturn (arg :: args) e - | xx -> - if args = [] then (None, xx) else (Some (makeTup (List.rev args)), xx) - in - argsAndReturn [] cl + val pop: 'a env -> 'a env option + (* [force_reduction prod env] should be called only if in the state [env] + the parser is capable of reducing the production [prod]. If this + condition is satisfied, then this production is reduced, which means that + its semantic action is executed (this can have side effects!) and the + automaton makes a goto (nonterminal) transition. If this condition is not + satisfied, [Invalid_argument _] is raised. *) - (* - Returns the arguments list (if any, that occur before the =>), and the - final expression (that is either returned from the function (after =>) or - that is bound to the value (if there are no arguments, and this is just a - let pattern binding)). - *) - method curriedPatternsAndReturnVal x = - let rec extract_args xx = - if xx.pexp_attributes <> [] then - (true, [], xx) - else match xx.pexp_desc with - (* label * expression option * pattern * expression *) - | Pexp_fun (l, eo, p, e) -> - (* sweet determines whether es6 => sugar can be used or not *) - let sweet, args, ret = extract_args e in - (sweet, `Value (l,eo,p) :: args, ret) - | Pexp_newtype (newtype,e) -> - let sweet, args, ret = extract_args e in - (sweet, `Type newtype :: args, ret) - | Pexp_constraint _ -> (true, [], xx) - | _ -> (true, [], xx) - in - let prepare_arg = function - | `Value (l,eo,p) -> SourceMap (p.ppat_loc, self#label_exp l eo p) - | `Type nt -> atom ("type " ^ nt) - in - match extract_args x with - | (sweet, [], ret) -> (sweet, [], ret) - | (sweet, [`Value (Nolabel, None, p) as arg], ret) when is_unit_pattern p -> - (sweet, [prepare_arg arg], ret) - | (sweet, args, ret) -> - (sweet, [makeTup (List.map prepare_arg args)], ret) + val force_reduction: production -> 'a env -> 'a env - (* Returns the (curriedModule, returnStructure) for a functor *) - method curriedFunctorPatternsAndReturnStruct = function - (* string loc * module_type option * module_expr *) - | { pmod_desc = Pmod_functor(s, mt, me2) } -> - let firstOne = - match mt with - | None -> atom "()" - | Some mt' -> formatTypeConstraint (atom s.txt) (self#module_type mt') - in - let (functorArgsRecurse, returnStructure) = (self#curriedFunctorPatternsAndReturnStruct me2) in - (firstOne::functorArgsRecurse, returnStructure) - | me -> ([], me) + (* [input_needed env] returns [InputNeeded env]. That is, out of an [env] + that might have been obtained via a series of calls to the functions + [pop], [force_reduction], [feed], etc., it produces a checkpoint, which + can be used to resume normal parsing, by supplying this checkpoint as an + argument to [offer]. *) - method isRenderableAsPolymorphicAbstractTypes - typeVars - polyType - leadingAbstractVars - nonVarifiedType = - same_ast_modulo_varification_and_extensions polyType nonVarifiedType && - trueForEachPair typeVars leadingAbstractVars (fun x y -> String.compare x y == 0) - (* Reinterpret this as a pattern constraint since we don't currently have a - way to disambiguate. There is currently a way to disambiguate a parsing - from Ppat_constraint vs. Pexp_constraint. Currently (and consistent with - OCaml standard parser): + (* This function should be used with some care. It could "mess up the + lookahead" in the sense that it allows parsing to resume in an arbitrary + state [s] with an arbitrary lookahead symbol [t], even though Menhir's + reachability analysis (menhir --list-errors) might well think that it is + impossible to reach this particular configuration. If one is using + Menhir's new error reporting facility, this could cause the parser to + reach an error state for which no error message has been prepared. *) - let (x: typ) = blah; - Becomes Ppat_constraint - let x:poly . type = blah; - Becomes Ppat_constraint - let x:typ = blah; - Becomes Pexp_constraint(ghost) - let x = (blah:typ); - Becomes Pexp_constraint(ghost) + val input_needed: 'a env -> 'a checkpoint - How are double constraints represented? - let (x:typ) = (blah:typ); - If currently both constraints are parsed into a single Pexp_constraint, - then something must be lost, and how could you fail type checking on: - let x:int = (10:string) ?? Answer: It probably parses into a nested - Pexp_constraint. +end - Proposal: +(* This signature is a fragment of the inspection API that is made available + to the user when [--inspection] is used. This fragment contains type + definitions for symbols. *) - let (x: typ) = blah; - Becomes Ppat_constraint (still) - let x:poly . type = blah; - Becomes Ppat_constraint (still) - let x:typ = blah; - Becomes Ppat_constraint - let x = blah:typ; - Becomes Pexp_constraint +module type SYMBOLS = sig + (* The type ['a terminal] represents a terminal symbol. The type ['a + nonterminal] represents a nonterminal symbol. In both cases, the index + ['a] represents the type of the semantic values associated with this + symbol. The concrete definitions of these types are generated. *) - Reasoning: Allows parsing of any of the currently valid ML forms, but - combines the two most similar into one form. The only lossyness is the - unnecessary parens, which there is already precedence for dropping in - expressions. In the existing approach, preserving a paren-constrained - expression is *impossible* because it becomes pretty printed as - let x:t =.... In the proposal, it is not impossible - it is only - impossible to preserve unnecessary parenthesis around the let binding. + type 'a terminal + type 'a nonterminal - The one downside is that integrating with existing code that uses [let x = - (blah:typ)] in standard OCaml will be parsed as a Pexp_constraint. There - might be some lossiness (beyond parens) that occurs in the original OCaml - parser. - *) + (* The type ['a symbol] represents a terminal or nonterminal symbol. It is + the disjoint union of the types ['a terminal] and ['a nonterminal]. *) - method locallyAbstractPolymorphicFunctionBinding prefixText layoutPattern funWithNewTypes absVars bodyType = - let appTerms = self#unparseExprApplicationItems funWithNewTypes in - let locallyAbstractTypes = (List.map atom absVars) in - let typeLayout = - SourceMap (bodyType.ptyp_loc, (self#core_type bodyType)) in - let polyType = - label - ~space:true - (* TODO: This isn't a correct use of sep! It ruins how - * comments are interleaved. *) - (makeList [makeList ~sep:" " (atom "type"::locallyAbstractTypes); atom "."]) - typeLayout - in - self#formatSimplePatternBinding - prefixText - layoutPattern - (Some polyType) - appTerms + type 'a symbol = + | T : 'a terminal -> 'a symbol + | N : 'a nonterminal -> 'a symbol - (** - Intelligently switches between: - Curried function binding w/ constraint on return expr: - lbl patt - pattAux - arg - :constraint => { - ... - } + (* The type [xsymbol] is an existentially quantified version of the type + ['a symbol]. This type is useful in situations where the index ['a] + is not statically known. *) - Constrained: - lbl patt - pattAux... - :constraint = { - ... - } - *) - method wrappedBinding prefixText ~arrow pattern patternAux expr = - let (_sweet, argsList, return) = self#curriedPatternsAndReturnVal expr in - let patternList = match patternAux with - | [] -> pattern - | _::_ -> makeList ~postSpace:true ~inline:(true, true) ~break:IfNeed (pattern::patternAux) - in - match (argsList, return.pexp_desc) with - | ([], Pexp_constraint (e, ct)) -> - let typeLayout = SourceMap (ct.ptyp_loc, (self#core_type ct)) in - let appTerms = self#unparseExprApplicationItems e in - self#formatSimplePatternBinding prefixText patternList (Some typeLayout) appTerms - | ([], _) -> - (* simple let binding, e.g. `let number = 5` *) - let appTerms = self#unparseExprApplicationItems expr in - self#formatSimplePatternBinding prefixText patternList None appTerms - | (_::_, _) -> - let (argsWithConstraint, actualReturn) = self#normalizeFunctionArgsConstraint argsList return in - let fauxArgs = - List.concat [patternAux; argsWithConstraint] in - let returnedAppTerms = self#unparseExprApplicationItems actualReturn in - (* Attaches the `=` to `f` to recreate javascript function syntax in - * let f = (a, b) => a + b; *) - let lbl = makeList ~sep:" " ~break:Never [pattern; atom "="] in - self#wrapCurriedFunctionBinding prefixText ~arrow lbl fauxArgs returnedAppTerms + type xsymbol = + | X : 'a symbol -> xsymbol - (* Similar to the above method. *) - method wrappedClassBinding prefixText pattern patternAux expr = - let (args, return) = self#curriedConstructorPatternsAndReturnVal expr in - let patternList = - match patternAux with - | [] -> pattern - | _::_ -> makeList ~postSpace:true ~inline:(true, true) ~break:IfNeed (pattern::patternAux) - in - match (args, return.pcl_desc) with - | (None, Pcl_constraint (e, ct)) -> - let typeLayout = SourceMap (ct.pcty_loc, (self#class_constructor_type ct)) in - self#formatSimplePatternBinding prefixText patternList (Some typeLayout) - (self#classExpressionToFormattedApplicationItems e, None) - | (None, _) -> - self#formatSimplePatternBinding prefixText patternList None - (self#classExpressionToFormattedApplicationItems expr, None) - | (Some args, _) -> - let (argsWithConstraint, actualReturn) = - self#normalizeConstructorArgsConstraint [args] return in - let fauxArgs = - List.concat [patternAux; argsWithConstraint] in - self#wrapCurriedFunctionBinding prefixText ~arrow:"=" pattern fauxArgs - (self#classExpressionToFormattedApplicationItems actualReturn, None) +end - method binding prefixText x = (* TODO: print attributes *) - let body = match x.pvb_pat.ppat_desc with - | (Ppat_var {txt}) -> - self#wrappedBinding prefixText ~arrow:"=>" - (SourceMap (x.pvb_pat.ppat_loc, self#simple_pattern x.pvb_pat)) - [] x.pvb_expr - (* - Ppat_constraint is used in bindings of the form +(* This signature describes the inspection API that is made available to the + user when [--inspection] is used. *) - let (inParenVar:typ) = ... +module type INSPECTION = sig - And in the case of let bindings for explicitly polymorphic type - annotations (see parser for more details). + (* The types of symbols are described above. *) - See reason_parser.mly for explanation of how we encode the two primary - forms of explicit polymorphic annotations in the parse tree, and how - we must recover them here. - *) - | (Ppat_constraint(p, ty)) -> ( - (* Locally abstract forall types are *seriously* mangled by the parsing - stage, and we have to be very smart about how to recover it. + include SYMBOLS - let df_locallyAbstractFuncAnnotated: - type a b. - a => - b => - (inputEchoRecord a, inputEchoRecord b) = - fun (input: a) (input2: b) => ( - {inputIs: input}, - {inputIs: input2} - ); + (* The type ['a lr1state] is meant to be the same as in [INCREMENTAL_ENGINE]. *) - becomes: + type 'a lr1state - let df_locallyAbstractFuncAnnotatedTwo: - 'a 'b . - 'a => 'b => (inputEchoRecord 'a, inputEchoRecord 'b) - = - fun (type a) (type b) => ( - fun (input: a) (input2: b) => ({inputIs: input}, {inputIs:input2}): - a => b => (inputEchoRecord a, inputEchoRecord b) - ); - *) - let layoutPattern = - SourceMap (x.pvb_pat.ppat_loc, (self#simple_pattern p)) in - let leadingAbsTypesAndExpr = self#leadingCurriedAbstractTypes x.pvb_expr in - match (p.ppat_desc, ty.ptyp_desc, leadingAbsTypesAndExpr) with - | (Ppat_var s, - Ptyp_poly (typeVars, varifiedPolyType), - (_::_ as absVars, Pexp_constraint(funWithNewTypes, nonVarifiedExprType))) - when self#isRenderableAsPolymorphicAbstractTypes - typeVars - (* If even artificially varified - don't know until returns*) - varifiedPolyType - absVars - nonVarifiedExprType -> - (* - We assume was the case whenever we see this pattern in the - AST, it was because the parser parsed the polymorphic locally - abstract type sugar. + (* The type [production] is meant to be the same as in [INCREMENTAL_ENGINE]. + It represents a production of the grammar. A production can be examined + via the functions [lhs] and [rhs] below. *) - Ppat_var..Ptyp_poly...Pexp_constraint: + type production - let x: 'a 'b . 'a => 'b => 'b = - fun (type a) (type b) => - (fun aVal bVal => bVal : a => b => b); + (* An LR(0) item is a pair of a production [prod] and a valid index [i] into + this production. That is, if the length of [rhs prod] is [n], then [i] is + comprised between 0 and [n], inclusive. *) - We need to be careful not to accidentally detect similar - forms, that cannot be printed as sugar. + type item = + production * int - let x: 'a 'b . 'a => 'b => 'b = - fun (type a) (type b) => - (fun aVal bVal => bVal : int => int => int); + (* Ordering functions. *) - Should *NOT* be formatted as: + val compare_terminals: _ terminal -> _ terminal -> int + val compare_nonterminals: _ nonterminal -> _ nonterminal -> int + val compare_symbols: xsymbol -> xsymbol -> int + val compare_productions: production -> production -> int + val compare_items: item -> item -> int - let x: type a b. int => int => int = fun aVal bVal => bVal; + (* [incoming_symbol s] is the incoming symbol of the state [s], that is, + the symbol that the parser must recognize before (has recognized when) + it enters the state [s]. This function gives access to the semantic + value [v] stored in a stack element [Element (s, v, _, _)]. Indeed, + by case analysis on the symbol [incoming_symbol s], one discovers the + type ['a] of the value [v]. *) - The helper function - [same_ast_modulo_varification_and_extensions] was created to - help compare the varified constraint pattern body, and the - non-varified expression constraint type. + val incoming_symbol: 'a lr1state -> 'a symbol - The second requirement that we check before assuming that the - sugar form is correct, is to make sure the list of type vars - corresponds to a leading prefix of the Pexp_newtype variables. - *) - self#locallyAbstractPolymorphicFunctionBinding - prefixText - layoutPattern - funWithNewTypes - absVars - nonVarifiedExprType - | _ -> - let typeLayout = SourceMap (ty.ptyp_loc, (self#core_type ty)) in - let appTerms = self#unparseExprApplicationItems x.pvb_expr in - self#formatSimplePatternBinding - prefixText - layoutPattern - (Some typeLayout) - appTerms - ) - | (_) -> - let layoutPattern = - SourceMap (x.pvb_pat.ppat_loc, self#pattern x.pvb_pat) in - let appTerms = self#unparseExprApplicationItems x.pvb_expr in - self#formatSimplePatternBinding prefixText layoutPattern None appTerms - in - self#attach_std_item_attrs x.pvb_attributes (SourceMap (x.pvb_loc, body)) + (* [items s] is the set of the LR(0) items in the LR(0) core of the LR(1) + state [s]. This set is not epsilon-closed. This set is presented as a + list, in an arbitrary order. *) - (* Ensures that the constraint is formatted properly for sake of function - binding (formatted without arrows) - let x y z : no_unguarded_arrows_allowed_here => ret; - *) - method normalizeFunctionArgsConstraint argsList return = - match return.pexp_desc with - | Pexp_constraint (e, ct) -> - let typeLayout = SourceMap (ct.ptyp_loc, (self#non_arrowed_non_simple_core_type ct)) in - (argsList@[formatJustTheTypeConstraint typeLayout], e) - | _ -> (argsList, return) + val items: _ lr1state -> item list - method normalizeConstructorArgsConstraint argsList return = - match return.pcl_desc with - | Pcl_constraint (e, ct) when return.pcl_attributes = [] -> - let typeLayout = SourceMap (ct.pcty_loc, (self#non_arrowed_class_constructor_type ct)) in - (argsList@[formatJustTheTypeConstraint typeLayout], e) - | _ -> (argsList, return) + (* [lhs prod] is the left-hand side of the production [prod]. This is + always a non-terminal symbol. *) - method bindingsLocationRange l = - let len = List.length l in - let fstLoc = (List.nth l 0).pvb_loc in - let lstLoc = (List.nth l (len - 1)).pvb_loc in - { - loc_start = fstLoc.loc_start; - loc_end = lstLoc.loc_end; - loc_ghost = false - } + val lhs: production -> xsymbol - method bindings (rf, l) = - let first, rest = match l with - | [] -> raise (NotPossible "no bindings supplied") - | x :: xs -> x, xs - in - let label = match rf with - | Nonrecursive -> "let" - | Recursive -> "let rec" - in - let first = self#binding label first in - match rest with - | [] -> first - | _ -> - makeList - ~postSpace:true - ~break:Always - ~indent:0 - ~inline:(true, true) - (first :: List.map (self#binding "and") rest) + (* [rhs prod] is the right-hand side of the production [prod]. This is + a (possibly empty) sequence of (terminal or nonterminal) symbols. *) - method letList exprTerm = - match (exprTerm.pexp_attributes, exprTerm.pexp_desc) with - | ([], Pexp_let (rf, l, e)) -> - (* For "letList" bindings, the start/end isn't as simple as with - * module value bindings. For "let lists", the sequences were formed - * within braces {}. The parser relocates the first let binding to the - * first brace. *) - let bindingsLayout = (self#bindings (rf, l)) in - let bindingsLoc = self#bindingsLocationRange l in - let bindingsSourceMapped = SourceMap (bindingsLoc, bindingsLayout) in - bindingsSourceMapped::(self#letList e) - | ([], Pexp_open (ovf, lid, e)) -> - let listItems = (self#letList e) in - if (List.length listItems == 1) && ovf == Fresh then - (* The following logic is a syntax sugar - * for an 'open' expression that has only one let item. - * - * Instead of printing: - * let result = { - * open Fmt; - * strf - * "-pkgs %a" - * (list sep::(unit ",") string) - * } - * - * We format as: - * - * let result = Fmt.(strf "-pkgs %a" (list sep::(unit ",") string)) - * - * (Also see https://github.com/facebook/Reason/issues/114) - *) - let expression = match e.pexp_desc with - (* syntax sugar for M.{x:1} *) - | Pexp_record _ - (* syntax sugar for M.(a, b) *) - | Pexp_tuple _ - (* syntax sugar for M.{} *) - | Pexp_object {pcstr_fields = []} - (* syntax sugar for M.[x,y] *) - | Pexp_construct ( {txt= Lident"::"},Some _) -> - (self#simplifyUnparseExpr e) - (* syntax sugar for the rest, wrap with parens to avoid ambiguity. - * E.g., avoid M.(M2.v) being printed as M.M2.v - *) - | _ -> - (makeList ~wrap:("(",")") ~break:IfNeed listItems) - in - let openLayout = label - (label (self#longident_loc lid) (atom ("."))) - expression - in [openLayout] - else - let overrideStr = match ovf with | Override -> "!" | Fresh -> "" in - let openLayout = label ~space:true - (atom ("open" ^ overrideStr)) - (self#longident_loc lid) - in - (* Just like the bindings, have to synthesize a location since the - * Pexp location is parsed (potentially) beginning with the open - * brace {} in the let sequence. *) - let openSourceMapped = SourceMap (lid.loc, openLayout) in - openSourceMapped::listItems - | ([], Pexp_letmodule (s, me, e)) -> - let prefixText = "module" in - let bindingName = atom ~loc:s.loc s.txt in - let moduleExpr = me in - let letModuleLayout = - (self#let_module_binding prefixText bindingName moduleExpr) in - let letModuleLoc = { - loc_start = s.loc.loc_start; - loc_end = me.pmod_loc.loc_end; - loc_ghost = false - } in - (* Just like the bindings, have to synthesize a location since the - * Pexp location is parsed (potentially) beginning with the open - * brace {} in the let sequence. *) - let letModuleSourceMapped = SourceMap (letModuleLoc, letModuleLayout) in - letModuleSourceMapped::(self#letList e) - | ([], Pexp_letexception (extensionConstructor, expr)) -> - let exc = self#exception_declaration extensionConstructor in - exc::(self#letList expr) - | ([], Pexp_sequence (({pexp_desc=Pexp_sequence _ }) as e1, e2)) - | ([], Pexp_sequence (({pexp_desc=Pexp_let _ }) as e1, e2)) - | ([], Pexp_sequence (({pexp_desc=Pexp_open _ }) as e1, e2)) - | ([], Pexp_sequence (({pexp_desc=Pexp_letmodule _}) as e1, e2)) - | ([], Pexp_sequence (e1, e2)) -> - let e1Layout = (self#unparseExpr e1) in - (* It's kind of difficult to synthesize a location here in the case - * where this is the first expression in the braces. We could consider - * deeply inspecting the leftmost token/term in the expression. *) - let e1SourceMapped = SourceMap (e1.pexp_loc, e1Layout) in - e1SourceMapped::(self#letList e2) - | _ -> - let exprTermLayout = (self#unparseExpr exprTerm) in - let exprTermSourceMapped = SourceMap (exprTerm.pexp_loc, exprTermLayout) in - (* Should really do something to prevent infinite loops here. Never - allowing a top level call into letList to recurse back to - self#unparseExpr- top level calls into letList *must* be one of the - special forms above whereas lower level recursive calls may be of - any form. *) - [exprTermSourceMapped] + val rhs: production -> xsymbol list - method constructor_expression ?(polyVariant=false) ~arityIsClear stdAttrs ctor eo = - let (implicit_arity, arguments) = - match eo.pexp_desc with - | Pexp_construct ( {txt= Lident "()"},_) -> - (* `foo() is a polymorphic variant that contains a single unit construct as expression - * This requires special formatting: `foo(()) -> `foo() *) - (false, atom "()") - (* special printing: MyConstructor(()) -> MyConstructor() *) - | Pexp_tuple l when is_single_unit_construct l -> - (false, atom "()") - | Pexp_tuple l when polyVariant == true -> - (false, self#unparseSequence ~wrap:("(", ")") ~construct:`Tuple l) - | Pexp_tuple l -> - (* There is no ambiguity when the number of tuple components is 1. - We don't need put implicit_arity in that case *) - (match l with - | exprList when isSingleArgParenApplication exprList -> - (false, self#singleArgParenApplication exprList) - | exprList -> - (not arityIsClear, makeTup (List.map self#unparseConstraintExpr l))) - | _ when isSingleArgParenApplication [eo] -> - (false, self#singleArgParenApplication [eo]) - | _ -> (false, makeTup [self#unparseConstraintExpr eo]) - in - let construction = - label ctor (if isSequencey arguments - then arguments - else (ensureSingleTokenSticksToLabel arguments)) - in - let attrs = - if implicit_arity && (not polyVariant) then - ({txt="implicit_arity"; loc=eo.pexp_loc}, PStr []) :: stdAttrs - else - stdAttrs - in - match attrs with - | [] -> construction - | _::_ -> formatAttributed construction (self#attributes attrs) + (* [nullable nt] tells whether the non-terminal symbol [nt] is nullable. + That is, it is true if and only if this symbol produces the empty + word [epsilon]. *) - (* TODOATTRIBUTES: Handle stdAttrs here (merge with implicit_arity) *) - method constructor_pattern ?(polyVariant=false) ~arityIsClear ctor po = - let (implicit_arity, arguments) = - match po.ppat_desc with - | Ppat_tuple l -> - (* There is no ambiguity when the number of tuple components is 1. - We don't need put implicit_arity in that case *) - (List.length l > 1 && not arityIsClear, l) - | _ -> (false, [po]) - in - let space, arguments = match arguments with - | [x] when is_direct_pattern x -> (true, self#simple_pattern x) - | xs when isSingleArgParenPattern xs -> (false, self#singleArgParenPattern xs) - | xs -> (false, makeTup (List.map self#pattern xs)) - in - let construction = label ~space ctor arguments in - if implicit_arity && (not polyVariant) then - formatAttributed construction - (self#attributes [({txt="implicit_arity"; loc=po.ppat_loc}, PStr [])]) - else - construction + val nullable: _ nonterminal -> bool - (* - * Provides special printing for constructor arguments: - * iff there's one argument & they have some kind of wrapping, - * they're wrapping need to 'hug' the surrounding parens. - * Example: - * switch x { - * | Some({ - * a, - * b, - * }) => () - * } - * - * Notice how ({ and }) hug. - * This applies for records, arrays, tuples & lists. - * Also see `isSingleArgParenPattern` to determine if this kind of wrapping applies. - *) - method singleArgParenPattern = function - | [{ppat_desc = Ppat_record (l, closed)}] -> - self#patternRecord ~wrap:("(", ")") l closed - | [{ppat_desc = Ppat_array l}] -> - self#patternArray ~wrap:("(", ")") l - | [{ppat_desc = Ppat_tuple l}] -> - self#patternTuple ~wrap:("(", ")") l - | [{ppat_desc = Ppat_construct (({txt=Lident "::"}), po)} as listPattern] -> - self#patternList ~wrap:("(", ")") listPattern - | _ -> assert false + (* [first nt t] tells whether the FIRST set of the nonterminal symbol [nt] + contains the terminal symbol [t]. That is, it is true if and only if + [nt] produces a word that begins with [t]. *) - method patternArray ?(wrap=("","")) l = - let (left, right) = wrap in - let wrap = (left ^ "[|", "|]" ^ right) in - makeList ~wrap ~break:IfNeed ~postSpace:true ~sep:"," (List.map self#pattern l) + val first: _ nonterminal -> _ terminal -> bool - method patternTuple ?(wrap=("","")) l = - let (left, right) = wrap in - let wrap = (left ^ "(", ")" ^ right) in - makeList ~wrap ~sep:"," ~postSpace:true ~break:IfNeed (List.map self#constrained_pattern l) + (* [xfirst] is analogous to [first], but expects a first argument of type + [xsymbol] instead of [_ terminal]. *) - method patternRecord ?(wrap=("","")) l closed = - let longident_x_pattern (li, p) = - match (li, p.ppat_desc) with - | ({txt = ident}, Ppat_var {txt}) when Longident.last ident = txt -> - (* record field punning when destructuring. {x: x, y: y} becomes {x, y} *) - (* works with module prefix too: {MyModule.x: x, y: y} becomes {MyModule.x, y} *) - self#longident_loc li - | ({txt = ident}, - Ppat_alias ({ppat_desc = (Ppat_var {txt = ident2}) }, {txt = aliasIdent})) - when Longident.last ident = ident2 -> - (* record field punning when destructuring with renaming. {state: state as prevState} becomes {state as prevState *) - (* works with module prefix too: {ReasonReact.state: state as prevState} becomes {ReasonReact.state as prevState *) - makeList ~sep:" " [self#longident_loc li; atom "as"; atom aliasIdent] - | _ -> - label ~space:true (makeList [self#longident_loc li; atom ":"]) (self#pattern p) - in - let rows = (List.map longident_x_pattern l)@( - match closed with - | Closed -> [] - | _ -> [atom "_"] - ) in - let (left, right) = wrap in - let wrap = (left ^ "{", "}" ^ right) in - makeList ~wrap ~break:IfNeed ~sep:"," ~postSpace:true rows + val xfirst: xsymbol -> _ terminal -> bool - method patternFunction loc l = - let estimatedFunLocation = { - loc_start = loc.loc_start; - loc_end = {loc.loc_start with pos_cnum = loc.loc_start.Lexing.pos_cnum + 3}; - loc_ghost = false; - } in - makeList - ~postSpace:true - ~break:IfNeed - ~inline:(true, true) - ~pad:(false, false) - ((atom ~loc:estimatedFunLocation "fun") :: (self#case_list l)) + (* [foreach_terminal] enumerates the terminal symbols, including [error]. + [foreach_terminal_but_error] enumerates the terminal symbols, excluding + [error]. *) - (* Expressions requiring parens, in most contexts such as separated by infix *) - method expression_requiring_parens_in_infix x = - let {stdAttrs} = partitionAttributes x.pexp_attributes in - assert (stdAttrs == []); - match x.pexp_desc with - (* The only reason Pexp_fun must also be wrapped in parens when under - pipe, is that its => token will be confused with the match token. - Simple expression will also invoke `#reset`. *) - | Pexp_function _ when pipe || semi -> None (* Would be rendered as simplest_expression *) - | Pexp_function l -> Some (self#patternFunction x.pexp_loc l) - | _ -> - (* The Pexp_function cases above don't use location because comment printing - breaks for them. *) - let itm = match x.pexp_desc with - | Pexp_fun _ - | Pexp_newtype _ -> - let (sweet, args, ret) = self#curriedPatternsAndReturnVal x in - ( match args with - | [] -> raise (NotPossible ("no arrow args in unparse ")) - | firstArg::tl -> - (* Suboptimal printing of parens: + val foreach_terminal: (xsymbol -> 'a -> 'a) -> 'a -> 'a + val foreach_terminal_but_error: (xsymbol -> 'a -> 'a) -> 'a -> 'a - something >>= fun x => x + 1; + (* The type [env] is meant to be the same as in [INCREMENTAL_ENGINE]. *) - Will be printed as: + type 'a env - something >>= (fun x => x + 1); + (* [feed symbol startp semv endp env] causes the parser to consume the + (terminal or nonterminal) symbol [symbol], accompanied with the semantic + value [semv] and with the start and end positions [startp] and [endp]. + Thus, the automaton makes a transition, and reaches a new state. The + stack grows by one cell. This operation is permitted only if the current + state (as determined by [env]) has an outgoing transition labeled with + [symbol]. Otherwise, [Invalid_argument _] is raised. *) - Because the arrow has lower precedence than >>=, but it wasn't - needed because + val feed: 'a symbol -> position -> 'a -> position -> 'b env -> 'b env - (something >>= fun x) => x + 1; +end - Is not a valid parse. Parens around the `=>` weren't needed to - prevent reducing instead of shifting. To optimize this part, we need - a much deeper encoding of the parse rules to print parens only when - needed, testing which rules will be reduced. It really should be - integrated deeply with Menhir. +(* This signature combines the incremental API and the inspection API. *) - One question is, if it's this difficult to describe when parens are - needed, should we even print them with the minimum amount? We can - instead model everything as "infix" with ranked precedences. *) - let retValUnparsed = self#unparseExprApplicationItems ret in - Some (self#wrapCurriedFunctionBinding ~sweet "fun" ~arrow:"=>" firstArg tl retValUnparsed) - ) - | Pexp_try (e, l) -> - let estimatedBracePoint = { - loc_start = e.pexp_loc.loc_end; - loc_end = x.pexp_loc.loc_end; - loc_ghost = false; - } - in - let cases = (self#case_list ~allowUnguardedSequenceBodies:true l) in - let switchWith = label ~space:true (atom "try") - (self#reset#simplifyUnparseExpr e) - in - Some ( - label - ~space:true - switchWith - (SourceMap (estimatedBracePoint, (makeList ~indent:settings.trySwitchIndent ~wrap:("{", "}") ~break:Always_rec ~postSpace:true cases))) - ) - (* These should have already been handled and we should never havgotten this far. *) - | Pexp_setinstvar (s, e) -> raise (Invalid_argument "Cannot handle setinstvar here - call unparseExpr") - | Pexp_setfield (_, _, _) -> raise (Invalid_argument "Cannot handle setfield here - call unparseExpr") - | Pexp_apply (e, l) -> raise (Invalid_argument "Cannot handle apply here - call unparseExpr") - | Pexp_match (e, l) -> - let estimatedBracePoint = { - loc_start = e.pexp_loc.loc_end; - loc_end = x.pexp_loc.loc_end; - loc_ghost = false; - } - in - let cases = (self#case_list ~allowUnguardedSequenceBodies:true l) in - let switchWith = - let exp = self#reset#simplifyUnparseExpr e in - label ~space:true (atom "switch") exp in - let lbl = - label - ~space:true - switchWith - (SourceMap (estimatedBracePoint, (makeList ~indent:settings.trySwitchIndent ~wrap:("{", "}") ~break:Always_rec ~postSpace:true cases))) - in - Some lbl - | Pexp_ifthenelse (e1, e2, eo) -> - let (blocks, finalExpression) = sequentialIfBlocks eo in - let rec singleExpression exp = - match exp.pexp_desc with - | Pexp_ident _ -> true - | Pexp_constant _ -> true - | Pexp_construct (_, arg) -> - (match arg with - | None -> true - | Some x -> singleExpression x) - | _ -> false - in - let singleLineIf = - (singleExpression e1) && - (singleExpression e2) && - (match eo with - | Some expr -> singleExpression expr - | None -> true - ) - in - let makeLetSequence = - if singleLineIf then - makeLetSequenceSingleLine - else - makeLetSequence - in - let rec sequence soFar remaining = ( - match (remaining, finalExpression) with - | ([], None) -> soFar - | ([], Some e) -> - let soFarWithElseAppended = makeList ~postSpace:true [soFar; atom "else"] in - label ~space:true soFarWithElseAppended (makeLetSequence (self#letList e)) - | (hd::tl, _) -> - let (e1, e2) = hd in - let soFarWithElseIfAppended = - label - ~space:true - (makeList ~postSpace:true [soFar; atom "else if"]) - (makeList ~wrap:("(",")") [self#unparseExpr e1]) - in - let nextSoFar = - label ~space:true soFarWithElseIfAppended (makeLetSequence (self#letList e2)) in - sequence nextSoFar tl - ) in - let init = - label - ~space:true - (SourceMap (e1.pexp_loc, (label ~space:true (atom "if") (makeList ~wrap:("(",")") [self#unparseExpr e1])))) - (makeLetSequence (self#letList e2)) in - Some (sequence init blocks) - | Pexp_while (e1, e2) -> - let lbl = - label - ~space:true - (label ~space:true (atom "while") (makeList ~wrap:("(",")") [self#unparseExpr e1])) - (makeLetSequence (self#letList e2)) in - Some lbl - | Pexp_for (s, e1, e2, df, e3) -> - (* - * for longIdentifier in - * (longInit expr) to - * (longEnd expr) { - * print_int longIdentifier; - * }; - *) - let identifierIn = (makeList ~postSpace:true [self#pattern s; atom "in";]) in - let dockedToFor = makeList - ~break:IfNeed - ~postSpace:true - ~inline:(true, true) - ~wrap:("(",")") - [ - identifierIn; - makeList ~postSpace:true [self#unparseExpr e1; self#direction_flag df]; - (self#unparseExpr e2); - ] - in - let upToBody = makeList ~inline:(true, true) ~postSpace:true [atom "for"; dockedToFor] in - Some (label ~space:true upToBody (makeLetSequence (self#letList e3))) - | Pexp_new (li) -> - Some (label ~space:true (atom "new") (self#longident_class_or_type_loc li)) - | Pexp_assert e -> - Some ( - label ~space:true - (atom "assert") - (self#reset#simplifyUnparseExpr e); - ) - | Pexp_lazy (e) -> - Some (label ~space:true (atom "lazy") (self#simplifyUnparseExpr e)) - | Pexp_poly _ -> - failwith ( - "This version of the pretty printer assumes it is impossible to " ^ - "construct a Pexp_poly outside of a method definition - yet it sees one." - ) - | _ -> None - in - match itm with - | None -> None - | Some i -> Some (SourceMap (x.pexp_loc, i)) +module type EVERYTHING = sig - method potentiallyConstrainedExpr x = - match x.pexp_desc with - | Pexp_constraint (e, ct) -> - formatTypeConstraint (self#unparseExpr e) (self#core_type ct) - | _ -> self#unparseExpr x + include INCREMENTAL_ENGINE + include INSPECTION + with type 'a lr1state := 'a lr1state + with type production := production + with type 'a env := 'a env - (* - * Because the rule BANG simple_expr was given %prec below_DOT_AND_SHARP, - * !x.y.z will parse as !(x.y.z) and not (!x).y.z. - * - * !x.y.z == !((x.y).z) - * !x#y#z == !((x#y)#z) - * - * So the intuition is: In general, any simple expression can exist to the - * left of a `.`, except `BANG simple_expr`, which has special precedence, - * and must be guarded in this one case. - * - * TODO: Instead of special casing this here, we should continue to extend - * unparseExpr to also unparse simple expressions, (by encoding the - * rules precedence below_DOT_AND_SHARP). - * - * TODO: - * Some would even have the prefix application be parsed with lower - * precedence function *application*. In the case of !, where ! means not, - * it makes a lot of sense because (!identifier)(arg) would be meaningless. - * - * !callTheFunction(1, 2, 3)(andEvenCurriedArgs) - * - * Only problem is that it could then not appear anywhere simple expressions - * would appear. - * - * We could make a special case for ! followed by one simple expression, and - * consider the result simple. - * - * Alternatively, we can figure out a way to not require simple expressions - * in the most common locations such as if/while tests. This is really hard - * (impossible w/ grammars Menhir supports?) - * - * if ! myFunc argOne argTwo { - * - * } else { - * - * }; - * - *) - method simple_enough_to_be_lhs_dot_send x = match x.pexp_desc with - | (Pexp_apply (eFun, _)) -> ( - match printedStringAndFixityExpr eFun with - | AlmostSimplePrefix _ -> - SourceMap (x.pexp_loc, formatPrecedence (self#simplifyUnparseExpr x)) - | UnaryPlusPrefix _ - | UnaryMinusPrefix _ - | UnaryNotPrefix _ - | UnaryPostfix _ - | Infix _ -> self#simplifyUnparseExpr x - | Normal -> - if x.pexp_attributes = [] then - (* `let a = foo().bar` instead of `let a = (foo()).bar *) - (* same for foo()##bar, foo()#=bar, etc. *) - self#unparseExpr x - else - self#simplifyUnparseExpr x - ) - | _ -> self#simplifyUnparseExpr x +end +end +module EngineTypes = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - method unparseRecord - ?wrap:(wrap=("", "")) - ?withStringKeys:(withStringKeys=false) - ?allowPunning:(allowPunning=true) - ?forceBreak:(forceBreak=false) - l eo = - (* forceBreak is a ref which can be set to always break the record rows. - * Example, when we have a row which contains a nested record, - * this ref can be set to true from inside the printing of that row, - * which forces breaks for the outer record structure. *) - let forceBreak = ref forceBreak in - let quote = (atom "\"") in - let maybeQuoteFirstElem fst rest = - if withStringKeys then (match fst.txt with - | Lident s -> quote::(atom s)::quote::rest - | Ldot _ | Lapply _ -> assert false - ) - else - (self#longident_loc fst)::rest - in - let makeRow (li, e) appendComma shouldPun = - let comma = atom "," in - let totalRowLoc = { - loc_start = li.Asttypes.loc.loc_start; - loc_end = e.pexp_loc.loc_end; - loc_ghost = false; - } in - let theRow = match (e.pexp_desc, shouldPun, allowPunning) with - (* record value punning. Turns {foo: foo, bar: 1} into {foo, bar: 1} *) - (* also turns {Foo.bar: bar, baz: 1} into {Foo.bar, baz: 1} *) - (* don't turn {bar: Foo.bar, baz: 1} into {bar, baz: 1}, naturally *) - | (Pexp_ident {txt = Lident value}, true, true) when Longident.last li.txt = value -> - makeList (maybeQuoteFirstElem li (if appendComma then [comma] else [])) +(* This file defines several types and module types that are used in the + specification of module [Engine]. *) - (* Force breaks for nested records or bs obj sugar - * Example: - * let person = {name: {first: "Bob", last: "Zhmith"}, age: 32}; - * is a lot less readable than - * let person = { - * "name": { - * "first": "Bob", - * "last": "Zhmith" - * }, - * "age": 32 - * }; - *) - | (Pexp_record (recordRows, optionalGadt), _, _) -> - forceBreak := true; - let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in - let value = self#unparseRecord ~forceBreak: true recordRows optionalGadt in - let row = label ~space:true keyWithColon value in - if appendComma then makeList [row; comma] else row - | (Pexp_extension (s, p), _, _) when s.txt = "bs.obj" -> - forceBreak := true; - let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in - let value = self#formatBsObjExtensionSugar ~forceBreak:true p in - let row = label ~space:true keyWithColon value in - if appendComma then makeList [row; comma] else row - | (Pexp_object classStructure, _, _) -> - forceBreak := true; - let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in - let value = self#classStructure ~forceBreak:true classStructure in - let row = label ~space:true keyWithColon value in - if appendComma then makeList [row; comma] else row - | _ -> - let (sweet, argsList, return) = self#curriedPatternsAndReturnVal e in - match argsList with - | [] -> - let appTerms = self#unparseExprApplicationItems e in - let upToColon = makeList (maybeQuoteFirstElem li [atom ":"]) in - let labelExpr = formatAttachmentApplication - applicationFinalWrapping (Some (true, upToColon)) appTerms - in - if appendComma then makeList [labelExpr; comma] else labelExpr - | firstArg :: tl -> - let upToColon = makeList (maybeQuoteFirstElem li [atom ":"]) in - let returnedAppTerms = self#unparseExprApplicationItems return in - let labelExpr = self#wrapCurriedFunctionBinding - ~sweet ~attachTo:upToColon "fun" ~arrow:"=>" - firstArg tl returnedAppTerms - in - if appendComma then makeList [labelExpr; comma] else labelExpr - in SourceMap (totalRowLoc, theRow) - in - let rec getRows l = - match l with - | [] -> [] - | hd::[] -> [makeRow hd false true] - | hd::hd2::tl -> (makeRow hd true true)::(getRows (hd2::tl)) - in +(* --------------------------------------------------------------------------- *) - let allRows = match eo with - | None -> ( - match l with - (* No punning (or comma) for records with only a single field. It's ambiguous with an expression in a scope *) - (* See comment in parser.mly for lbl_expr_list_with_at_least_one_non_punned_field *) - | [hd] -> [makeRow hd false false] - | _ -> getRows l - ) - | Some withRecord -> - let firstRow = ( - (* Unclear why "sugar_expr" was special cased here. *) - let appTerms = self#unparseExprApplicationItems withRecord in - let firstRowContents = - formatAttachmentApplication applicationFinalWrapping (Some (false, (atom "..."))) appTerms in - if l == [] then firstRowContents else makeList [firstRowContents; atom ","] - ) in - SourceMap (withRecord.pexp_loc, firstRow)::(getRows l) - in - let break = if !forceBreak then Always else IfNeed in - let (left, right) = wrap in - makeList ~wrap:(left ^ "{" ,"}" ^ right) ~break ~preSpace:true allRows +(* It would be nice if we could keep the structure of stacks and environments + hidden. However, stacks and environments must be accessible to semantic + actions, so the following data structure definitions must be public. *) - method unparseObject ?wrap:(wrap=("", "")) ?(withStringKeys=false) l o = - let core_field_type (s, attrs, ct) = - let l = extractStdAttrs attrs in - let row = - let rowKey = if withStringKeys then - (makeList ~wrap:("\"", "\"") [atom s]) - else (atom s) - in - label ~space:true - (makeList ~break:Never [rowKey; (atom ":")]) - (self#core_type ct) - in - (match l with - | [] -> row - | _::_ -> - makeList - ~postSpace:true - ~break:IfNeed - ~inline:(true, true) - [self#attributes attrs; row]) - in - let rows = List.map core_field_type l in - let openness = match o with - | Closed -> atom "." - | Open -> atom ".." - in - (* if an object has more than 2 rows, always break for readability *) - let break = if List.length rows >= 2 then Always_rec else IfNeed in - let (left, right) = wrap in - makeList ~break:IfNeed ~preSpace:(List.length rows > 0) ~wrap:(left ^ "{", "}" ^ right) - (openness::[makeList ~break ~inline:(true, true) ~postSpace:true ~sep:"," rows]) +(* --------------------------------------------------------------------------- *) - method unparseSequence ?wrap:(wrap=("", "")) ~construct l = - match construct with - | `ES6List -> - let seq, ext = (match List.rev l with - | ext :: seq_rev -> (List.rev seq_rev, ext) - | [] -> assert false) in - makeES6List ~wrap (List.map self#unparseExpr seq) (self#unparseExpr ext) - | _ -> - let (left, right) = wrap in - let (xf, (leftDelim, rightDelim)) = (match construct with - | `List -> (self#unparseExpr, ("[", "]")) - | `Array -> (self#unparseExpr, ("[|", "|]")) - | `Tuple -> (self#potentiallyConstrainedExpr, ("(", ")")) - | `ES6List -> assert false) - in - let wrap = (left ^ leftDelim, rightDelim ^ right) in - makeList - ~wrap - ~sep:"," - ~break:IfNeed - ~postSpace:true - (List.map xf l) +(* A stack is a linked list of cells. A sentinel cell -- which is its own + successor -- is used to mark the bottom of the stack. The sentinel cell + itself is not significant -- it contains dummy values. *) +type ('state, 'semantic_value) stack = { - method formatBsObjExtensionSugar ?wrap:(wrap=("", "")) ?(forceBreak=false) payload = - match payload with - | PStr [itm] -> ( - match itm with - | {pstr_desc = Pstr_eval ({ pexp_desc = Pexp_record (l, eo) }, []) } -> - self#unparseRecord ~forceBreak ~wrap ~withStringKeys:true ~allowPunning:false l eo - | _ -> assert false) - | _ -> assert false + (* The state that we should go back to if we pop this stack cell. *) - method simplest_expression x = - let {stdAttrs; jsxAttrs} = partitionAttributes x.pexp_attributes in - if stdAttrs <> [] then - None - else - let item = match x.pexp_desc with - (* The only reason Pexp_fun must also be wrapped in parens is that its => - token will be confused with the match token. *) - | Pexp_fun _ when pipe || semi -> Some (self#reset#simplifyUnparseExpr x) - | Pexp_function l when pipe || semi -> Some (formatPrecedence ~loc:x.pexp_loc (self#reset#patternFunction x.pexp_loc l)) - | Pexp_apply (e, l) -> ( - match self#simple_get_application x with - (* If it's the simple form of application. *) - | Some simpleGet -> Some simpleGet - | None -> None - ) - | Pexp_object cs -> Some (self#classStructure cs) - | Pexp_override l -> (* FIXME *) - let string_x_expression (s, e) = - label ~space:true (atom (s.txt ^ ":")) (self#unparseExpr e) - in - Some ( - makeList - ~postSpace:true - ~wrap:("{<", ">}") - ~sep:"," - (List.map string_x_expression l) - ) - | Pexp_construct _ when is_simple_construct (view_expr x) -> - let hasJsxAttribute = jsxAttrs != [] in - Some ( - match view_expr x with - | `nil -> if hasJsxAttribute then atom "<> " else atom "[]" - | `tuple -> atom "()" - | `list xs -> (* LIST EXPRESSION *) - if hasJsxAttribute then - let actualChildren = - match self#formatChildren xs [] with - | None -> [] - | Some ch -> ch - in - makeList - ~break:IfNeed - ~inline:(false, false) - ~postSpace:true - ~wrap:("<>", "") - ~pad:(true, true) - actualChildren - else - self#unparseSequence ~construct:`List xs - | `cons xs -> - self#unparseSequence ~construct:`ES6List xs - | `simple x -> self#longident x - | _ -> assert false - ) - | Pexp_ident li -> - (* Lone identifiers shouldn't break when to the right of a label *) - Some (ensureSingleTokenSticksToLabel (self#longident_loc li)) - | Pexp_constant c -> - (* Constants shouldn't break when to the right of a label *) - Some (ensureSingleTokenSticksToLabel (self#constant c)) - | Pexp_pack me -> - Some ( - makeList - ~break:IfNeed - ~postSpace:true - ~wrap:("(", ")") - ~inline:(true, true) - [atom "module"; self#module_expr me;] - ) - | Pexp_tuple l -> - (* TODO: These may be simple, non-simple, or type constrained - non-simple expressions *) - Some (self#unparseSequence ~construct:`Tuple l) - | Pexp_constraint (e, ct) -> - Some ( - makeList - ~break:IfNeed - ~wrap:("(", ")") - [formatTypeConstraint (self#unparseExpr e) (self#core_type ct)] - ) - | Pexp_coerce (e, cto1, ct) -> - let optFormattedType = match cto1 with - | None -> None - | Some typ -> Some (self#core_type typ) in - Some ( - makeList - ~break:IfNeed - ~wrap:("(", ")") - [formatCoerce (self#unparseExpr e) optFormattedType (self#core_type ct)] - ) - | Pexp_variant (l, None) -> - Some (ensureSingleTokenSticksToLabel (atom ("`" ^ l))) - | Pexp_record (l, eo) -> Some (self#unparseRecord l eo) - | Pexp_array (l) -> - Some (self#unparseSequence ~construct:`Array l) - | Pexp_let (rf, l, e) -> - Some (makeLetSequence (self#letList x)) - | Pexp_letmodule (s, me, e) -> - Some (makeLetSequence (self#letList x)) - | Pexp_letexception _ -> - Some (makeLetSequence (self#letList x)) - | Pexp_open (ovf, lid, e) -> - let letItems = (self#letList x) in - (match letItems with - (* if an open expression has only one letItem in the list, - * we don't wrap it in "{}" so it becomes something like: - * - * let a = Fmt.(strf "-pkgs %a" (list sep::(unit ",") string)) - * - * instead of: - * - * let a = { - * Fmt.(strf "-pkgs %a" (list sep::(unit ",") string)) - * } - *) - | [item] -> Some item - | _ -> Some (makeLetSequence letItems) - ) - | Pexp_sequence _ -> - Some (makeLetSequence (self#letList x)) - | Pexp_field (e, li) -> - Some (label (makeList [self#simple_enough_to_be_lhs_dot_send e; atom "."]) (self#longident_loc li)) - | Pexp_send (e, s) -> - let needparens = match e.pexp_desc with - | Pexp_apply (ee, _) -> - (match printedStringAndFixityExpr ee with - | UnaryPostfix "^" -> true - | _ -> false) - | _ -> false - in - let lhs = self#simple_enough_to_be_lhs_dot_send e in - let lhs = if needparens then makeList ~wrap:("(",")") [lhs] else lhs in - Some (label (makeList [lhs; atom "#";]) (atom s)) - | Pexp_extension e -> Some (self#extension e) - | _ -> None - in - match item with - | None -> None - | Some i -> Some (SourceMap (x.pexp_loc, i)) + (* This convention means that the state contained in the top stack cell is + not the current state [env.current]. It also means that the state found + within the sentinel is a dummy -- it is never consulted. This convention + is the same as that adopted by the code-based back-end. *) - method formatChildren children processedRev = - match children with - | {pexp_desc = Pexp_constant (constant)} :: remaining -> - self#formatChildren remaining (self#constant constant :: processedRev) - | {pexp_desc = Pexp_construct ({txt = Lident "::"}, Some {pexp_desc = Pexp_tuple(children)} )} :: remaining -> - self#formatChildren (remaining @ children) processedRev - | {pexp_desc = Pexp_apply(expr, l); pexp_attributes} :: remaining -> - self#formatChildren remaining (self#simplifyUnparseExpr (List.hd children) :: processedRev) - | {pexp_desc = Pexp_ident li} :: remaining -> - self#formatChildren remaining (self#longident_loc li :: processedRev) - | {pexp_desc = Pexp_construct ({txt = Lident "[]"}, None)} :: remaining -> self#formatChildren remaining processedRev - | head :: remaining -> self#formatChildren remaining (self#simplifyUnparseExpr head :: processedRev) - | [] -> match processedRev with - | [] -> None - | _::_ -> Some (List.rev processedRev) + state: 'state; - method direction_flag = function - | Upto -> atom "to" - | Downto -> atom "downto" + (* The semantic value associated with the chunk of input that this cell + represents. *) - method payload ppxToken ppxId e = - let wrap = ("[" ^ ppxToken ^ ppxId.txt, "]") in - let break = IfNeed in - let pad = (true, false) in - let postSpace = true in - let sep = ";" in - match e with - | PStr [] -> atom ("[" ^ ppxToken ^ ppxId.txt ^ "]") - | PStr [itm] -> makeList ~break ~wrap ~pad [self#structure_item itm] - | PStr (_::_ as items) -> - let rows = (List.map (self#structure_item) items) in - makeList ~wrap ~break ~pad ~postSpace ~sep rows - | PTyp x -> - makeList ~wrap ~break ~pad [label ~space:true (atom ":") (self#core_type x)] - (* Signatures in attributes were added recently *) - | PSig x -> makeList [atom ":"; self#signature x] - | PPat (x, None) -> - makeList ~wrap ~break ~pad [label ~space:true (atom "?") (self#pattern x)] - | PPat (x, Some e) -> - makeList ~wrap ~break ~pad ~postSpace [ - label ~space:true (atom "?") (self#pattern x); - label ~space:true (atom "when") (self#unparseExpr e) - ] + semv: 'semantic_value; - method extension (s, p) = - match (s.txt) with - (* We special case "bs.obj" for now to allow for a nicer interop with - * BuckleScript. We might be able to generalize to any kind of record - * looking thing with struct keys. *) - | "bs.obj" -> self#formatBsObjExtensionSugar p - | _ -> (self#payload "%" s p) + (* The start and end positions of the chunk of input that this cell + represents. *) - method item_extension (s, e) = (self#payload "%%" s e) + startp: Lexing.position; + endp: Lexing.position; + (* The next cell down in the stack. If this is a self-pointer, then this + cell is the sentinel, and the stack is conceptually empty. *) - (* [@ ...] Simple attributes *) - method attribute = function - | { Location. txt = ("ocaml.doc" | "ocaml.text") }, - PStr [{ pstr_desc = Pstr_eval ({ pexp_desc = Pexp_constant (Pconst_string(text, None)); _ } , _); - pstr_loc; _ }] -> - let text = if text = "" then "/**/" else "/**" ^ text ^ "*/" in - makeList ~inline:(true, true) ~postSpace:true ~preSpace:true ~indent:0 ~break:IfNeed [atom ~loc:pstr_loc text] - | (s, e) -> self#payload "@" s e + next: ('state, 'semantic_value) stack; - (* [@@ ... ] Attributes that occur after a major item in a structure/class *) - method item_attribute = self#attribute +} - (* [@@ ...] Attributes that occur not *after* an item in some structure/class/sig, but - rather as their own standalone item. Note that syntactic distinction - between item_attribute and floating_attribute is no longer necessary with - Reason. Thank you semicolons. *) - method floating_attribute = self#item_attribute +(* --------------------------------------------------------------------------- *) - method attributes l = - makeList ~break:IfNeed ~postSpace:true (List.map self#attribute l) +(* A parsing environment contains all of the parser's state (except for the + current program point). *) - method attach_std_attrs l toThis = - let l = extractStdAttrs l in - match l with - | [] -> toThis - | _::_ -> makeList ~postSpace:true [(self#attributes l); toThis] +type ('state, 'semantic_value, 'token) env = { - method attach_std_item_attrs l toThis = - let l = extractStdAttrs l in - match l with - | [] -> toThis - | _::_ -> - makeList ~postSpace:true ~indent:0 ~break:Always ~inline:(true, true) - (List.map self#item_attribute l @ [toThis]) + (* If this flag is true, then the first component of [env.triple] should + be ignored, as it has been logically overwritten with the [error] + pseudo-token. *) - method exception_declaration ed = - let pcd_name = ed.pext_name in - let pcd_loc = ed.pext_loc in - let pcd_attributes = [] in - let exn_arg = match ed.pext_kind with - | Pext_decl (args, type_opt) -> - let pcd_args, pcd_res = args, type_opt in - [self#type_variant_leaf_nobar {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes}] - | Pext_rebind id -> - [atom pcd_name.txt; atom "="; (self#longident_loc id)] in - self#attach_std_item_attrs ed.pext_attributes - (makeList ~postSpace:true ((atom "exception")::exn_arg)) + error: bool; - (* - Note: that override doesn't appear in class_sig_field, but does occur in - class/object expressions. - TODO: TODOATTRIBUTES - *) - method method_sig_flags_for s = function - | Virtual -> [atom "virtual"; atom s] - | Concrete -> [atom s] + (* The last token that was obtained from the lexer, together with its start + and end positions. Warning: before the first call to the lexer has taken + place, a dummy (and possibly invalid) token is stored here. *) - method value_type_flags_for s = function - | (Virtual, Mutable) -> [atom "virtual"; atom "mutable"; atom s] - | (Virtual, Immutable) -> [atom "virtual"; atom s] - | (Concrete, Mutable) -> [atom "mutable"; atom s] - | (Concrete, Immutable) -> [atom s] + triple: 'token * Lexing.position * Lexing.position; - method class_sig_field x = - match x.pctf_desc with - | Pctf_inherit (ct) -> - label ~space:true (atom "inherit") (self#class_constructor_type ct) - | Pctf_val (s, mf, vf, ct) -> - let valueFlags = self#value_type_flags_for (s ^ ":") (vf, mf) in - label - ~space:true - ( - label ~space:true - (atom "val") - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed valueFlags) - ) - (self#core_type ct) - | Pctf_method (s, pf, vf, ct) -> - let methodFlags = self#method_sig_flags_for (s ^ ":") vf - in - let pubOrPrivate = - match pf with - | Private -> "pri" - | Public -> "pub" - in - let m = label - ~space:true - (label ~space:true - (atom pubOrPrivate) - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed methodFlags) - ) - (self#core_type ct) - in - (self#attach_std_item_attrs x.pctf_attributes m) - | Pctf_constraint (ct1, ct2) -> - label - (atom "constraint") - (label ~space:true - (makeList ~postSpace:true [self#core_type ct1; atom "="]) - (self#core_type ct2) - ) - | Pctf_attribute a -> self#floating_attribute a - | Pctf_extension e -> self#item_extension e + (* The stack. In [CodeBackend], it is passed around on its own, + whereas, here, it is accessed via the environment. *) + stack: ('state, 'semantic_value) stack; - (* The type of something returned from a constructor. Formerly [class_signature] *) - method shouldDisplayClassInstTypeItem x = match x.pctf_desc with - (*| Pctf_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) - | _ -> true + (* The current state. In [CodeBackend], it is passed around on its + own, whereas, here, it is accessed via the environment. *) - method shouldDisplaySigItem x = match x.psig_desc with - (*| Psig_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) - | _ -> true + current: 'state; - method shouldDisplayStructureItem x = match x.pstr_desc with - (*| Pstr_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) - | _ -> true +} - (* - [@@bs.val] [@@bs.module "react-dom"] (* formattedAttrs *) - external render : reactElement => element => unit = (* frstHalf *) - "render"; (* sndHalf *) +(* --------------------------------------------------------------------------- *) - To improve the formatting with breaking & indentation: - * consider the part before the '=' as a label - * combine that label with '=' in a list - * consider the part after the '=' as a list - * combine both parts as a label - * format the attributes with a ~postSpace:true (inline, inline) list - * format everything together in a ~postSpace:true (inline, inline) list - for nicer breaking - *) - method primitive_declaration vd = - let lblBefore = - label ~space:true - (makeList ~postSpace:true [atom "external"; protectIdentifier vd.pval_name.txt; atom ":"]) - (self#core_type vd.pval_type) - in - let frstHalf = makeList ~postSpace:true [lblBefore; atom "="] in - let sndHalf = makeSpacedBreakableInlineList (List.map self#constant_string vd.pval_prim) in - let primDecl = label ~space:true frstHalf sndHalf in - match vd.pval_attributes with - | [] -> primDecl - | attrs -> - let attrs = List.map (fun x -> self#item_attribute x) attrs in - let formattedAttrs = makeSpacedBreakableInlineList attrs in - makeSpacedBreakableInlineList [formattedAttrs; primDecl] +(* This signature describes the parameters that must be supplied to the LR + engine. *) - method class_instance_type x = - match x.pcty_desc with - | Pcty_signature cs -> - let {pcsig_self = ct; pcsig_fields = l} = cs in - let instTypeFields = - List.map self#class_sig_field (List.filter self#shouldDisplayClassInstTypeItem l) in - let allItems = match ct.ptyp_desc with - | Ptyp_any -> instTypeFields - | _ -> - label ~space:true (atom "as") (self#core_type ct) :: - instTypeFields - in - self#attach_std_item_attrs x.pcty_attributes ( - makeList - ~wrap:("{", "}") - ~postSpace:true - ~break:Always_rec - ~sep:";" - allItems - ) - | Pcty_constr (li, l) -> - self#attach_std_attrs x.pcty_attributes ( - match l with - | [] -> self#longident_loc li - | _::_ -> - label - ~space:true - (makeList ~wrap:("(", ")") ~sep:"," (List.map self#core_type l)) - (self#longident_loc li) - ) - | Pcty_extension e -> - self#attach_std_item_attrs x.pcty_attributes (self#extension e) - | Pcty_arrow _ -> failwith "class_instance_type should not be printed with Pcty_arrow" +module type TABLE = sig - method class_declaration_list l = - let class_declaration ?(class_keyword=false) - ({pci_params=ls; pci_name={txt}; pci_virt; pci_expr={pcl_desc}; pci_loc} as x) = - let (firstToken, pattern, patternAux) = self#class_opening class_keyword txt pci_virt ls in - let classBinding = self#wrappedClassBinding firstToken pattern patternAux x.pci_expr in - let itm = self#attach_std_item_attrs x.pci_attributes classBinding in - SourceMap (pci_loc, itm) - in - (match l with - | [] -> raise (NotPossible "Class definitions will have at least one item.") - | x::rest -> - makeNonIndentedBreakingList ( - class_declaration ~class_keyword:true x :: - List.map class_declaration rest - ) - ) - (* For use with [class type a = class_instance_type]. Class type - declarations/definitions declare the types of instances generated by class - constructors. - We have to call self#class_instance_type because self#class_constructor_type - would add a "new" before the type. - TODO: TODOATTRIBUTES: - *) - method class_type_declaration_list l = - let class_type_declaration kwd ({pci_params=ls;pci_name={txt};pci_attributes} as x) = - let opener = match x.pci_virt with - | Virtual -> kwd ^ " " ^ "virtual" - | Concrete -> kwd - in + (* The type of automaton states. *) - let upToName = - if ls == [] then - label ~space:true (atom opener) (atom txt) - else - label - ~space:true - (label ~space:true (atom opener) (atom txt)) - (self#class_params_def ls) - in - let includingEqual = makeList ~postSpace:true [upToName; atom "="] in - self#attach_std_item_attrs pci_attributes @@ - label ~space:true includingEqual (self#class_instance_type x.pci_expr) - in - match l with - | [] -> failwith "Should not call class_type_declaration with no classes" - | [x] -> class_type_declaration "class type" x - | x :: xs -> - makeList - ~break:Always_rec - ~indent:0 - ~inline:(true, true) - ( - (class_type_declaration "class type" x):: - List.map (class_type_declaration "and") xs - ) + type state - (* - Formerly the [class_type] - Notice how class_constructor_type doesn't have any type attributes - - class_instance_type does. - TODO: Divide into class_constructor_types that allow arrows and ones - that don't. - *) - method class_constructor_type x = - match x.pcty_desc with - | Pcty_arrow (l, co, cl) -> - let rec allArrowSegments acc = function - | { pcty_desc = Pcty_arrow (l, ct1, ct2); } -> - allArrowSegments (self#type_with_label (l, ct1) :: acc) ct2 - (* This "new" is unfortunate. See reason_parser.mly for details. *) - | xx -> (List.rev acc, self#class_constructor_type xx) - in - let (params, return) = allArrowSegments [] x in - let normalized = - makeList ~break:IfNeed - ~sep:"=>" - ~preSpace:true ~postSpace:true ~inline:(true, true) - [makeCommaBreakableListSurround "(" ")" params; return] - in - SourceMap (x.pcty_loc, normalized) - | _ -> - (* Unfortunately, we have to have final components of a class_constructor_type - be prefixed with the `new` keyword. Hopefully this is temporary. *) - self#class_instance_type x + (* States are numbered. *) - method non_arrowed_class_constructor_type x = - match x.pcty_desc with - | Pcty_arrow (l, co, cl) -> - let normalized = formatPrecedence (self#class_constructor_type x) in - SourceMap (x.pcty_loc, normalized) - | _ -> self#class_instance_type x + val number: state -> int - method class_field x = - let itm = - match x.pcf_desc with - | Pcf_inherit (ovf, ce, so) -> - let inheritText = ("inherit" ^ override ovf) in - let inheritExp = self#class_expr ce in - label - ~space:true - (atom inheritText) - ( - match so with - | None -> inheritExp; - | Some (s) -> label ~space:true inheritExp (atom ("as " ^ s)) - ) - | Pcf_val (s, mf, Cfk_concrete (ovf, e)) -> - let opening = match mf with - | Mutable -> - let mutableName = [atom "mutable"; atom s.txt] in - label - ~space:true - (atom ("val" ^ override ovf)) - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed mutableName) - | Immutable -> label ~space:true (atom ("val" ^ override ovf)) (atom s.txt) - in - let valExprAndConstraint = match e.pexp_desc with - | Pexp_constraint (ex, ct) -> - let openingWithTypeConstraint = formatTypeConstraint opening (self#core_type ct) in - label - ~space:true - (makeList ~postSpace:true [openingWithTypeConstraint; atom "="]) - (self#unparseExpr ex) - | _ -> - label ~space:true (makeList ~postSpace:true [opening; atom "="]) (self#unparseExpr e) - in - valExprAndConstraint - | Pcf_val (s, mf, Cfk_virtual ct) -> - let opening = match mf with - | Mutable -> - let mutableVirtualName = [atom "mutable"; atom "virtual"; atom s.txt] in - let openingTokens = - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed mutableVirtualName) in - label ~space:true (atom "val") openingTokens - | Immutable -> - let virtualName = [atom "virtual"; atom s.txt] in - let openingTokens = - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed virtualName) in - label ~space:true (atom "val") openingTokens - in - formatTypeConstraint opening (self#core_type ct) - | Pcf_method (s, pf, Cfk_virtual ct) -> - let opening = match pf with - | Private -> - let privateVirtualName = [atom "virtual"; atom s.txt] in - let openingTokens = - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed privateVirtualName) in - label ~space:true (atom "pri") openingTokens - | Public -> - let virtualName = [atom "virtual"; atom s.txt] in - let openingTokens = - (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed virtualName) in - label ~space:true (atom "pub") openingTokens - in - formatTypeConstraint opening (self#core_type ct) - | Pcf_method (s, pf, Cfk_concrete (ovf, e)) -> - let methodText = - let postFix = if ovf == Override then "!" else "" in - ( - match pf with - | Private -> "pri" ^ postFix - | Public -> "pub" ^ postFix - ) in - (* Should refactor the binding logic so faking out the AST isn't needed, - currently, it includes a ton of nuanced logic around recovering explicitly - polymorphic type definitions, and that furthermore, that representation... - Actually, let's do it. + (* The type of tokens. These can be thought of as real tokens, that is, + tokens returned by the lexer. They carry a semantic value. This type + does not include the [error] pseudo-token. *) - For some reason, concrete methods are only ever parsed as Pexp_poly. - If there *is* no polymorphic function for the method, then the return - value of the function is wrapped in a ghost Pexp_poly with [None] for - the type vars.*) - (match e.pexp_desc with - | (Pexp_poly - ({pexp_desc=Pexp_constraint (methodFunWithNewtypes, nonVarifiedExprType)}, - Some ({ptyp_desc=Ptyp_poly (typeVars, varifiedPolyType)}) - ) - ) when ( - let (leadingAbstractVars, nonVarified) = - self#leadingCurriedAbstractTypes methodFunWithNewtypes in - self#isRenderableAsPolymorphicAbstractTypes - typeVars - (* If even artificially varified. Don't know until this returns*) - varifiedPolyType - leadingAbstractVars - nonVarifiedExprType - ) -> - let (leadingAbstractVars, nonVarified) = - self#leadingCurriedAbstractTypes methodFunWithNewtypes in - self#locallyAbstractPolymorphicFunctionBinding - methodText - (atom s.txt) - methodFunWithNewtypes - leadingAbstractVars - nonVarifiedExprType - | Pexp_poly (e, Some ct) -> - let typeLayout = SourceMap (ct.ptyp_loc, (self#core_type ct)) in - let appTerms = self#unparseExprApplicationItems e in - self#formatSimplePatternBinding methodText (atom s.txt) (Some typeLayout) appTerms - (* This form means that there is no type constraint - it's a strange node name.*) - | Pexp_poly (e, None) -> - self#wrappedBinding methodText ~arrow:"=>" (atom s.txt) [] e - | _ -> failwith "Concrete methods should only ever have Pexp_poly." - ) - | Pcf_constraint (ct1, ct2) -> - label - ~space:true - (atom "constraint") - ( - makeList ~postSpace:true ~inline:(true, false) [ - makeList ~postSpace:true [self#core_type ct1; atom "="]; - self#core_type ct2 - ] - ) - | Pcf_initializer (e) -> - label - ~space:true - (atom "initializer") - (self#simplifyUnparseExpr e) - | Pcf_attribute a -> self#floating_attribute a - | Pcf_extension e -> - (* And don't forget, we still need to print post_item_attributes even for - this case *) - self#item_extension e - in - SourceMap (x.pcf_loc, itm) + type token - method class_self_pattern_and_structure {pcstr_self = p; pcstr_fields = l} = - let fields = List.map self#class_field l in - (* Recall that by default self is bound to "this" at parse time. You'd - have to go out of your way to bind it to "_". *) - match (p.ppat_attributes, p.ppat_desc) with - | ([], Ppat_var ({loc; txt = "this"})) -> fields - | _ -> - SourceMap (p.ppat_loc, (label ~space:true (atom "as") (self#pattern p))) - ::fields + (* The type of terminal symbols. These can be thought of as integer codes. + They do not carry a semantic value. This type does include the [error] + pseudo-token. *) - method simple_class_expr x = - let {stdAttrs} = partitionAttributes x.pcl_attributes in - if stdAttrs <> [] then - formatSimpleAttributed - (self#simple_class_expr {x with pcl_attributes=[]}) - (self#attributes stdAttrs) - else - let itm = - match x.pcl_desc with - | Pcl_constraint (ce, ct) -> - formatTypeConstraint (self#class_expr ce) (self#class_constructor_type ct) - (* In OCaml, - - In the most recent version of OCaml, when in the top level of a - module, let _ = ... is a PStr_eval. - - When in a function, it is a Pexp_let PPat_any - - When in class pre-member let bindings it is a Pcl_let PPat_any + type terminal - Reason normalizes all of these to be simple imperative expressions - with trailing semicolons, *except* in the case of classes because it - will likely introduce a conflict with some proposed syntaxes for - objects. - *) - | Pcl_let _ - | Pcl_structure _ -> - let rows = (self#classExprLetsAndRest x) in - makeList ~wrap:("{", "}") ~inline:(true, false) ~postSpace:true ~break:Always_rec (List.map semiTerminated rows) - | Pcl_extension e -> self#extension e - | _ -> formatPrecedence (self#class_expr x) - in SourceMap (x.pcl_loc, itm) + (* The type of nonterminal symbols. *) - method classExprLetsAndRest x = - match x.pcl_desc with - | Pcl_structure cs -> self#class_self_pattern_and_structure cs - | Pcl_let (rf, l, ce) -> - (* For "letList" bindings, the start/end isn't as simple as with - * module value bindings. For "let lists", the sequences were formed - * within braces {}. The parser relocates the first let binding to the - * first brace. *) - let bindingsLayout = (self#bindings (rf, l)) in - let bindingsLoc = self#bindingsLocationRange l in - let bindingsSourceMapped = SourceMap (bindingsLoc, bindingsLayout) in - bindingsSourceMapped::(self#classExprLetsAndRest ce) - | _ -> [self#class_expr x] + type nonterminal - method class_expr x = - let {stdAttrs} = partitionAttributes x.pcl_attributes in - (* We cannot handle the attributes here. Must handle them in each item *) - if stdAttrs <> [] then - (* Do not need a "simple" attributes precedence wrapper. *) - formatAttributed - (self#simple_class_expr {x with pcl_attributes=[]}) - (self#attributes stdAttrs) - else - match x.pcl_desc with - | Pcl_fun _ -> - (match self#curriedConstructorPatternsAndReturnVal x with - | None, _ -> - (* x just matched Pcl_fun, there is at least one parameter *) - assert false - | Some args, e -> - label ~space:true - (makeList ~postSpace:true - [label ~space:true (atom "fun") args; atom "=>"]) - (self#class_expr e)) - | Pcl_apply (ce, l) -> - formatAttachmentApplication applicationFinalWrapping None - (self#classExpressionToFormattedApplicationItems x, None) - | Pcl_constr (li, []) -> - label ~space:true (atom "class") (self#longident_loc li) - | Pcl_constr (li, l) -> - label - (makeList ~postSpace:true [atom "class"; self#longident_loc li]) - (makeTup (List.map self#non_arrowed_non_simple_core_type l)) - | Pcl_constraint _ - | Pcl_extension _ - | Pcl_let _ - | Pcl_structure _ -> self#simple_class_expr x; + (* The type of semantic values. *) - method classStructure ?(forceBreak=false) ?(wrap=("", "")) cs = - let (left, right) = wrap in - let wrap = (left ^ "{", "}" ^ right) in - let break = if forceBreak then Always else IfNeed in - makeList - ~sep:";" - ~wrap - ~break - ~postSpace:true - ~inline:(true, false) - (self#class_self_pattern_and_structure cs) + type semantic_value - method signature signatureItems = - let signatureItems = List.filter self#shouldDisplaySigItem signatureItems in - if List.length signatureItems == 0 then - atom "" - else - let signatureItems = List.filter self#shouldDisplaySigItem signatureItems in - let first = List.nth signatureItems 0 in - let last = List.nth signatureItems (List.length signatureItems - 1) in - SourceMap ( - {loc_start=first.psig_loc.loc_start; loc_end=last.psig_loc.loc_end; loc_ghost=false}, - makeList - ~newlinesAboveComments:1 - ~newlinesAboveItems:1 - ~newlinesAboveDocComments:1 - ~renderFinalSep:true - ~postSpace:true - ~break:Always_rec - ~indent:0 - ~inline:(true, false) - ~sep:";" - (List.map self#signature_item signatureItems) - ) + (* A token is conceptually a pair of a (non-[error]) terminal symbol and + a semantic value. The following two functions are the pair projections. *) - method signature_item x :layoutNode = - let item: layoutNode = - match x.psig_desc with - | Psig_type (rf, l) -> - self#type_def_list (rf, l) - | Psig_value vd -> - if vd.pval_prim <> [] then - self#primitive_declaration vd - else - let intro = atom "let" in - self#attach_std_item_attrs vd.pval_attributes - (formatTypeConstraint - (label ~space:true intro (wrapLayoutWithLoc (Some (vd.pval_name.loc)) (protectIdentifier vd.pval_name.txt))) - (self#core_type vd.pval_type)) + val token2terminal: token -> terminal + val token2value: token -> semantic_value - | Psig_typext te -> - self#type_extension te - | Psig_exception ed -> - self#exception_declaration ed - | Psig_class l -> - let class_description - ?(class_keyword=false) - ({pci_params=ls; pci_name={txt}; pci_loc} as x) = - let (firstToken, pattern, patternAux) = self#class_opening class_keyword txt x.pci_virt ls in - let withColon = self#wrapCurriedFunctionBinding - ~arrow:":" - firstToken - pattern - patternAux - ([(self#class_constructor_type x.pci_expr)], None) - in - let itm = self#attach_std_item_attrs x.pci_attributes withColon in - SourceMap (pci_loc, itm) - in - makeNonIndentedBreakingList ( - match l with - | [] -> raise (NotPossible "No recursive class bindings") - | [x] -> [class_description ~class_keyword:true x] - | x :: xs -> - (class_description ~class_keyword:true x):: - (List.map class_description xs) - ) - | Psig_module {pmd_name; pmd_type={pmty_desc=Pmty_alias alias}; pmd_attributes} -> - self#attach_std_item_attrs pmd_attributes @@ - label ~space:true - (makeList ~postSpace:true [ - atom "module"; - atom pmd_name.txt; - atom "=" - ]) - (self#longident_loc alias) - | Psig_module pmd -> - self#attach_std_item_attrs pmd.pmd_attributes @@ - self#formatSimpleSignatureBinding - "module" - (atom pmd.pmd_name.txt) - (self#module_type pmd.pmd_type); - | Psig_open od -> - self#attach_std_item_attrs od.popen_attributes @@ - label ~space:true - (atom ("open" ^ (override od.popen_override))) - (self#longident_loc od.popen_lid) - | Psig_include incl -> - self#attach_std_item_attrs incl.pincl_attributes @@ - label ~space:true - (atom "include") - (self#module_type incl.pincl_mod) - | Psig_modtype x -> - let name = atom x.pmtd_name.txt in - let main = match x.pmtd_type with - | None -> makeList ~postSpace:true [atom "module type"; name] - | Some mt -> - label ~space:true - (makeList ~postSpace:true [atom "module type"; name; atom "="]) - (self#module_type mt) - in - self#attach_std_item_attrs x.pmtd_attributes main - | Psig_class_type l -> self#class_type_declaration_list l - | Psig_recmodule decls -> - let first xx = - self#attach_std_item_attrs xx.pmd_attributes @@ - self#formatSimpleSignatureBinding - "module rec" - (atom xx.pmd_name.txt) - (self#module_type xx.pmd_type) - in - let notFirst xx = - self#attach_std_item_attrs xx.pmd_attributes @@ - self#formatSimpleSignatureBinding - "and" - (atom xx.pmd_name.txt) - (self#module_type xx.pmd_type) - in - let moduleBindings = match decls with - | [] -> raise (NotPossible "No recursive module bindings") - | hd::tl -> (first hd)::(List.map notFirst tl) - in - makeNonIndentedBreakingList moduleBindings - | Psig_attribute a -> self#floating_attribute a - | Psig_extension (e, a) -> - self#attach_std_item_attrs a (self#item_extension e) - in - SourceMap (x.psig_loc, item) + (* Even though the [error] pseudo-token is not a real token, it is a + terminal symbol. Furthermore, for regularity, it must have a semantic + value. *) - method non_arrowed_module_type x = - match x.pmty_desc with - | Pmty_alias li -> - formatPrecedence (label ~space:true (atom "module") (self#longident_loc li)) - | Pmty_typeof me -> - makeList ~wrap:("(", ")") [ - label ~space:true - (atom "module type of") - (self#module_expr me) - ] - | _ -> self#simple_module_type x + val error_terminal: terminal + val error_value: semantic_value - method simple_module_type x = - match x.pmty_desc with - | Pmty_ident li -> - self#longident_loc li; - | Pmty_signature s -> - makeList - ~break:IfNeed - ~inline:(true, false) - ~wrap:("{", "}") - ~newlinesAboveComments:0 - ~newlinesAboveItems:0 - ~newlinesAboveDocComments:1 - ~renderFinalSep:true - ~postSpace:true - ~sep:";" - (List.map self#signature_item (List.filter self#shouldDisplaySigItem s)) - | Pmty_extension (s, e) -> self#payload "%" s e - | _ -> makeList ~break:IfNeed ~wrap:("(", ")") [self#module_type x] + (* [foreach_terminal] allows iterating over all terminal symbols. *) - method module_type x = - let pmty = match x.pmty_desc with - | Pmty_functor _ -> - (* The segments that should be separated by arrows. *) - let rec extract_args args xx = match xx.pmty_desc with - | Pmty_functor (_, None, mt2) -> extract_args (`Unit :: args) mt2 - | Pmty_functor (s, Some mt1, mt2) -> - let arg = - if s.txt = "_" - then self#module_type mt1 - else formatTypeConstraint (atom s.txt) (self#module_type mt1) - in - extract_args (`Arg arg :: args) mt2 - | _ -> - let prepare_arg = function - | `Unit -> atom "()" - | `Arg x -> x - in - let args = match args with - | [`Unit] -> [] - | xs -> List.rev_map prepare_arg args - in - (args, self#module_type xx) - in - let args, ret = extract_args [] x in - makeList ~break:IfNeed ~sep:"=>" ~preSpace:true ~postSpace:true ~inline:(true, true) - [makeTup args; ret] + val foreach_terminal: (terminal -> 'a -> 'a) -> 'a -> 'a - (* See comments in sugar_parser.mly about why WITH constraints aren't "non - * arrowed" *) - | Pmty_with (mt, l) -> - let modSub atm li2 token = makeList ~postSpace:true [ - atom "module"; - atm; - atom token; - self#longident_loc li2 - ] in - let typeAtom = atom "type" in - let eqAtom = atom "=" in - let destrAtom = atom ":=" in - let with_constraint = function - | Pwith_type (li, td) -> - self#formatOneTypeDef - typeAtom - (SourceMap (li.loc, (self#longident_loc li))) - eqAtom - td - | Pwith_module (li, li2) -> - modSub (self#longident_loc li) li2 "=" - | Pwith_typesubst td -> - self#formatOneTypeDef - typeAtom - (SourceMap (td.ptype_name.loc, (atom td.ptype_name.txt))) - destrAtom - td - | Pwith_modsubst (s, li2) -> modSub (atom s.txt) li2 ":=" - in - (match l with - | [] -> self#module_type mt - | _ -> - label ~space:true - (makeList ~postSpace:true [self#module_type mt; atom "with"]) - (makeList - ~break:IfNeed - ~inline:(true, true) - ~sep:"and" - ~postSpace:true - ~preSpace:true - (List.map with_constraint l)); - ) - (* Seems like an infinite loop just waiting to happen. *) - | _ -> self#non_arrowed_module_type x - in - SourceMap (x.pmty_loc, pmty) + (* The type of productions. *) - method simple_module_expr x = match x.pmod_desc with - | Pmod_unpack e -> - formatPrecedence (makeList ~postSpace:true [atom "val"; self#unparseExpr e]) - | Pmod_ident (li) -> - ensureSingleTokenSticksToLabel (self#longident_loc li) - | Pmod_constraint (unconstrainedRet, mt) -> - formatPrecedence ( - formatTypeConstraint - (self#module_expr unconstrainedRet) - (self#module_type mt) - ) - | Pmod_structure (s) -> - makeList - ~break:Always_rec - ~inline:(true, false) - ~wrap:("{", "}") - ~newlinesAboveComments:0 - ~newlinesAboveItems:0 - ~newlinesAboveDocComments:1 - ~renderFinalSep:true - ~postSpace:true - ~sep:";" - (List.map self#structure_item (List.filter self#shouldDisplayStructureItem s)) - | _ -> - (* For example, functor application will be wrapped. *) - formatPrecedence (self#module_expr x) + type production - method module_expr x = - match x.pmod_desc with - | Pmod_functor _ -> - let (argsList, return) = self#curriedFunctorPatternsAndReturnStruct x in - (* See #19/20 in syntax.mls - cannot annotate return type at - the moment. *) - self#wrapCurriedFunctionBinding "fun" ~sweet:true ~arrow:"=>" (makeTup argsList) [] - ([self#moduleExpressionToFormattedApplicationItems return], None) - | Pmod_apply _ -> - self#moduleExpressionToFormattedApplicationItems x - | Pmod_extension (s, e) -> self#payload "%" s e - | Pmod_unpack _ - | Pmod_ident _ - | Pmod_constraint _ - | Pmod_structure _ -> self#simple_module_expr x + val production_index: production -> int + val find_production: int -> production + (* If a state [s] has a default reduction on production [prod], then, upon + entering [s], the automaton should reduce [prod] without consulting the + lookahead token. The following function allows determining which states + have default reductions. *) - method structure structureItems = - if List.length structureItems == 0 then - atom "" - else - let structureItems = List.filter self#shouldDisplayStructureItem structureItems in - let first = List.nth structureItems 0 in - let last = List.nth structureItems (List.length structureItems - 1) in - SourceMap ( - {loc_start=first.pstr_loc.loc_start; loc_end=last.pstr_loc.loc_end; loc_ghost=false}, - makeList - ~newlinesAboveComments:1 - ~newlinesAboveItems:1 - ~newlinesAboveDocComments:1 - ~renderFinalSep:true - ~postSpace:true - ~break:Always_rec - ~indent:0 - ~inline:(true, false) - ~sep:";" - (List.map self#structure_item structureItems) - ) + (* Instead of returning a value of a sum type -- either [DefRed prod], or + [NoDefRed] -- it accepts two continuations, and invokes just one of + them. This mechanism allows avoiding a memory allocation. *) + val default_reduction: + state -> + ('env -> production -> 'answer) -> + ('env -> 'answer) -> + 'env -> 'answer - (* - How do modules become parsed? - let module (X: sig) = blah; - Will not parse! (Should just make it parse to let [X:sig =]). - let module X: sig = blah; - Becomes Pmod_constraint - let module X: sig = (blah:sig); - Becomes Pmod_constraint .. Pmod_constraint - let module X = blah:typ; - Becomes Pmod_constraint - let module X (Y:y) (Z:z):r => Q - Becomes Pmod_functor...=> Pmod_constraint + (* An LR automaton can normally take three kinds of actions: shift, reduce, + or fail. (Acceptance is a particular case of reduction: it consists in + reducing a start production.) *) - let module X (Y:y) (Z:z):r => (Q:r2) - Probably becomes Pmod_functor...=> (Pmod_constraint.. - Pmod_constraint) + (* There are two variants of the shift action. [shift/discard s] instructs + the automaton to discard the current token, request a new one from the + lexer, and move to state [s]. [shift/nodiscard s] instructs it to move to + state [s] without requesting a new token. This instruction should be used + when [s] has a default reduction on [#]. See [CodeBackend.gettoken] for + details. *) - let (module X) = - Is a *completely* different thing (unpacking/packing first class modules). - We should make sure this is very well distinguished. - - Just replace all "let module" with a new three letter keyword (mod)? - - Reserve let (module X) for unpacking first class modules. + (* This is the automaton's action table. It maps a pair of a state and a + terminal symbol to an action. *) - See the notes about how Ppat_constraint become parsed and attempt to unify - those as well. - *) + (* Instead of returning a value of a sum type -- one of shift/discard, + shift/nodiscard, reduce, or fail -- this function accepts three + continuations, and invokes just one them. This mechanism allows avoiding + a memory allocation. *) - method let_module_binding prefixText bindingName moduleExpr = - let (argsList, return) = self#curriedFunctorPatternsAndReturnStruct moduleExpr in ( - match (argsList, return.pmod_desc) with - (* Simple module with type constraint, no functor args. *) - | ([], Pmod_constraint (unconstrainedRetTerm, ct)) -> - self#formatSimplePatternBinding prefixText bindingName (Some (self#module_type ct)) - ([self#moduleExpressionToFormattedApplicationItems unconstrainedRetTerm], None) - (* Simple module with type no constraint, no functor args. *) - | ([], _) -> - self#formatSimplePatternBinding prefixText bindingName None - ([self#moduleExpressionToFormattedApplicationItems return], None) - | (_, _) -> - (* A functor *) - let (argsWithConstraint, actualReturn) = ( - match return.pmod_desc with - (* A functor with constrained return type: - * - * let module X = (A) (B) : Ret => ... - * *) - | Pmod_constraint (me, ct) -> ([makeTup argsList; formatJustTheTypeConstraint (self#non_arrowed_module_type ct)], me) - | _ -> ([makeTup argsList], return) - ) in - self#wrapCurriedFunctionBinding prefixText ~arrow:"=>" - (makeList [bindingName; atom " ="]) argsWithConstraint - ([self#moduleExpressionToFormattedApplicationItems actualReturn], None) - ) + (* In summary, the parameters to [action] are as follows: - method class_opening class_keyword name pci_virt ls = - let firstToken = if class_keyword then "class" else "and" in - match (pci_virt, ls) with - (* When no class params, it's a very simple formatting for the - opener - no breaking. *) - | (Virtual, []) -> - (firstToken, atom "virtual", [atom name]) - | (Concrete, []) -> - (firstToken, atom name, []) - | (Virtual, _::_) -> - (firstToken, atom "virtual", [atom name; self#class_params_def ls]) - | (Concrete, _::_) -> - (firstToken, atom name, [self#class_params_def ls]) + - the first two parameters, a state and a terminal symbol, are used to + look up the action table; + - the next parameter is the semantic value associated with the above + terminal symbol; it is not used, only passed along to the shift + continuation, as explained below; - (* TODO: TODOATTRIBUTES: Structure items don't have attributes, but each - pstr_desc *) - method structure_item term = - let item = ( - match term.pstr_desc with - | Pstr_eval (e, attrs) -> - let {stdAttrs; jsxAttrs} = partitionAttributes attrs in - let layout = self#attach_std_item_attrs stdAttrs (self#unparseUnattributedExpr e) in - (* If there was a JSX attribute BUT JSX component wasn't detected, - that JSX attribute needs to be pretty printed so it doesn't get - lost *) - (match jsxAttrs with - | [] -> layout - | _::_ -> - let jsxAttrNodes = List.map self#attribute jsxAttrs in - makeList ~sep:" " (jsxAttrNodes @ [layout])) - | Pstr_type (_, []) -> assert false - | Pstr_type (rf, l) -> (self#type_def_list (rf, l)) - | Pstr_value (rf, l) -> (self#bindings (rf, l)) - | Pstr_typext te -> (self#type_extension te) - | Pstr_exception ed -> (self#exception_declaration ed) - | Pstr_module x -> - let bindingName = atom ~loc:x.pmb_name.loc x.pmb_name.txt in - self#attach_std_item_attrs x.pmb_attributes @@ - self#let_module_binding "module" bindingName x.pmb_expr - | Pstr_open od -> - self#attach_std_item_attrs od.popen_attributes @@ - makeList ~postSpace:true [ - atom ("open" ^ (override od.popen_override)); - self#longident_loc od.popen_lid; - ] - | Pstr_modtype x -> - let name = atom x.pmtd_name.txt in - let main = match x.pmtd_type with - | None -> - makeList ~postSpace:true [atom "module type"; name] - | Some mt -> - label ~space:true - (makeList ~postSpace:true [atom "module type"; name; atom "="]) - (self#module_type mt) - in - self#attach_std_item_attrs x.pmtd_attributes main - | Pstr_class l -> self#class_declaration_list l - | Pstr_class_type (l) -> self#class_type_declaration_list l - | Pstr_primitive vd -> self#primitive_declaration vd - | Pstr_include incl -> - self#attach_std_item_attrs incl.pincl_attributes @@ - (* Kind of a hack *) - let moduleExpr = incl.pincl_mod in - formatAttachmentApplication - applicationFinalWrapping - (Some (true, atom "include")) - ([self#moduleExpressionToFormattedApplicationItems moduleExpr], None) + - the shift continuation expects an environment; a flag that tells + whether to discard the current token; the terminal symbol that + is being shifted; its semantic value; and the target state of + the transition; - | Pstr_recmodule decls -> (* 3.07 *) - let first xx = - self#attach_std_item_attrs xx.pmb_attributes @@ - self#let_module_binding "module rec" (atom xx.pmb_name.txt) xx.pmb_expr - in - let notFirst xx = - self#attach_std_item_attrs xx.pmb_attributes @@ - self#let_module_binding "and" (atom xx.pmb_name.txt) xx.pmb_expr - in - let moduleBindings = match decls with - | [] -> raise (NotPossible "No recursive module bindings") - | hd::tl -> (first hd)::(List.map notFirst tl) - in - makeNonIndentedBreakingList moduleBindings - | Pstr_attribute a -> self#floating_attribute a - | Pstr_extension (e, a) -> - (* Notice how extensions have attributes - but not every structure - item does. *) - self#attach_std_item_attrs a (self#item_extension e) - ) in - SourceMap(term.pstr_loc, item) + - the reduce continuation expects an environment and a production; - method type_extension te = - let formatOneTypeExtStandard prepend ({ptyext_path} as te) = - let name = self#longident_loc ptyext_path in - let item = self#formatOneTypeExt prepend name (atom "+=") te in - self#attach_std_item_attrs te.ptyext_attributes item - in - formatOneTypeExtStandard (atom "type") te + - the fail continuation expects an environment; - (* [allowUnguardedSequenceBodies] allows sequence expressions {} to the right of `=>` to not - be guarded in `{}` braces. *) - method case_list ?(allowUnguardedSequenceBodies=false) l = - let rec appendLabelToLast items rhs = - match items with - | hd::[] -> (label ~indent:0 ~space:true hd rhs)::[] - | hd::tl -> hd::(appendLabelToLast tl rhs) - | [] -> raise (NotPossible "Cannot append to last of nothing") - in + - the last parameter is the environment; it is not used, only passed + along to the selected continuation. *) - let case_row {pc_lhs; pc_guard; pc_rhs} = - let theOrs = orList pc_lhs in + val action: + state -> + terminal -> + semantic_value -> + ('env -> bool -> terminal -> semantic_value -> state -> 'answer) -> + ('env -> production -> 'answer) -> + ('env -> 'answer) -> + 'env -> 'answer - (* match x with *) - (* | AnotherReallyLongVariantName (_, _, _) *) - (* | AnotherReallyLongVariantName2 (_, _, _) - when true => { *) + (* This is the automaton's goto table. This table maps a pair of a state + and a nonterminal symbol to a new state. By extension, it also maps a + pair of a state and a production to a new state. *) - (* } *) + (* The function [goto_nt] can be applied to [s] and [nt] ONLY if the state + [s] has an outgoing transition labeled [nt]. Otherwise, its result is + undefined. Similarly, the call [goto_prod prod s] is permitted ONLY if + the state [s] has an outgoing transition labeled with the nonterminal + symbol [lhs prod]. The function [maybe_goto_nt] involves an additional + dynamic check and CAN be called even if there is no outgoing transition. *) - (*match x with *) - (* everythingElse *) - (* *) + val goto_nt : state -> nonterminal -> state + val goto_prod: state -> production -> state + val maybe_goto_nt: state -> nonterminal -> state option + (* [is_start prod] tells whether the production [prod] is a start production. *) + val is_start: production -> bool - (* ............................................................ - : each or segment has a spaced list <> that ties its : - : bar "|" to its pattern : - ...:..........................................................:..... - : : each or-patterned match is grouped in SpacedBreakableInline : - : : : : - v v v v - <>|<> FirstThingStandalone t =>t - <>| AnotherReallyLongVariantName (_, _, _) - ^ <>|<>AnotherReallyLongVariantNam2 (_, _, _) (label the last in or ptn for or and label it again for arrow) - : ^ ^ ^ when true =>{ - : : : : } ^ ^ - : : : : ^ ^ : : - : : : : : : : : - : : : :If there is :a WHERE : : - : : : :an extra :label is : : - : : : :inserted bef:ore the : : - : : : :arrow. : : : : - : : : :............:.....:...: : - : : : : : : - : : : : : : - : : : : : : - : : :The left side of:this final label: - : : :uses a list to :append the arrow: - : : :................:.....:..........: - : : : : - : : : : - : : : : - : :Final or segment is: : - : :wrapped in lbl that: : - : :partitions pattern : : - : :and arrow from : : - : :expression. : : - : : : : - : :...................: : - : [orsWithWhereAndArrowOnLast] : - : : - :..................................: - [row] + (* By convention, a semantic action is responsible for: - *) - let bar xx = makeList ~postSpace:true [atom "|"; xx] in - let appendWhereAndArrow p = match pc_guard with - | None -> makeList ~interleaveComments:false ~postSpace:true [p; atom "=>"] - | Some g -> - (* when x should break as a whole - extra list added around it to make it break as one *) - let withWhen = label ~space:true p (makeList ~break:Never ~inline:(true, true) ~postSpace:true [label ~space:true (atom "when") (self#unparseExpr g)]) in - makeList ~interleaveComments:false ~inline:(true, true) ~postSpace:true [withWhen; atom "=>"] - in + 1. fetching whatever semantic values and positions it needs off the stack; - let rec appendWhereAndArrowToLastOr = function - | [] -> [] - | hd::tl -> ( - let formattedHd = match tl with - | [] -> appendWhereAndArrow (self#pattern hd) - | tl::tlTl -> (self#pattern hd) - in - formattedHd::(appendWhereAndArrowToLastOr tl) - ) - in - let orsWithWhereAndArrowOnLast = appendWhereAndArrowToLastOr theOrs in - let rhs = - if allowUnguardedSequenceBodies then - match (self#under_pipe#letList pc_rhs) with - (* TODO: Still render a list with located information here so that - comments (eol) are interleaved *) - | [hd] -> hd - (* In this case, we don't need any additional indentation, because there aren't - wrapping {} which would cause zero indentation to look strange. *) - | lst -> makeUnguardedLetSequence lst - else self#under_pipe#unparseExpr pc_rhs in - let row = - let withoutBars = appendLabelToLast orsWithWhereAndArrowOnLast rhs in - makeList ~break:Always_rec ~inline:(true, true) (List.map bar withoutBars) - in - SourceMap ( - (* Fake shift the location to accomodate for the bar, to make sure - * the wrong comments don't make their way past the next bar. *) - expandLocation ~expand:(0, 0) { - loc_start = pc_lhs.ppat_loc.loc_start; - loc_end = pc_rhs.pexp_loc.loc_end; - loc_ghost = false; - }, - row - ) + 2. popping an appropriate number of cells off the stack, as dictated + by the length of the right-hand side of the production; - in - (List.map case_row l) + 3. computing a new semantic value, as well as new start and end positions; - (* Formats a list of a single expr param in such a way that the parens of the function or - * (poly)-variant application and the wrapping of the param stick together when the layout breaks. - * Example: `foo({a: 1, b: 2})` needs to be formatted as - * foo({ - * a: 1, - * b: 2 - * }) - * when the line length dictates breaking. Notice how `({` and `})` 'hug'. - * Also see "isSingleArgParenApplication" which determines if - * this kind of formatting should happen. *) - method singleArgParenApplication = function - | [{pexp_attributes = []; pexp_desc = Pexp_record (l, eo)}] -> - self#unparseRecord ~wrap:("(", ")") l eo - | [{pexp_attributes = []; pexp_desc = Pexp_tuple l}] -> - self#unparseSequence ~wrap:("(", ")") ~construct:`Tuple l - | [{pexp_attributes = []; pexp_desc = Pexp_array l}] -> - self#unparseSequence ~wrap:("(", ")") ~construct:`Array l - | [{pexp_attributes = []; pexp_desc = Pexp_object cs}] -> - self#classStructure ~wrap:("(", ")") cs - | [{pexp_attributes = []; pexp_desc = Pexp_extension (s, p)}] when s.txt = "bs.obj" -> - self#formatBsObjExtensionSugar ~wrap:("(", ")") p - | [({pexp_attributes = []; pexp_desc} as exp)] when (is_simple_list_expr exp) -> - (match view_expr exp with - | `list xs -> - self#unparseSequence ~construct:`List ~wrap:("(", ")") xs - | `cons xs -> - self#unparseSequence ~construct:`ES6List ~wrap:("(", ")") xs - | _ -> assert false) - | _ -> assert false + 4. pushing a new stack cell, which contains the three values + computed in step 3; + 5. returning the new stack computed in steps 2 and 4. - method label_x_expression_param (l, e) = - let term = self#unparseConstraintExpr e in - let param = match l with - | Nolabel -> term - | Labelled lbl when is_punned_labelled_expression e lbl -> - makeList [atom namedArgSym; term] - | Optional lbl when is_punned_labelled_expression e lbl -> - makeList [atom namedArgSym; label term (atom "?")] - | Labelled lbl -> - label (atom (namedArgSym ^ lbl ^ "=")) term - | Optional lbl -> - label (atom (namedArgSym ^ lbl ^ "=?")) term - in - SourceMap (e.pexp_loc, param) + Point 1 is essentially forced upon us: if semantic values were fetched + off the stack by this interpreter, then the calling convention for + semantic actions would be variadic: not all semantic actions would have + the same number of arguments. The rest follows rather naturally. *) - method label_x_expression_params xs = - let xs = (match xs with - (* function applications with unit as only argument should be printed differently - * e.g. print_newline(()) should be printed as print_newline() *) - | [(Nolabel, ({pexp_attributes = []; pexp_desc = Pexp_construct ( {txt= Lident "()"}, None)} as x))] - -> [self#unparseExpr x] + (* Semantic actions are allowed to raise [Error]. *) - (* The following cases provide special formatting when there's only one expr_param that is a tuple/array/list/record etc. - * e.g. foo({a: 1, b: 2}) - * becomes -> - * foo({ - * a: 1, - * b: 2, - * }) - * when the line-length indicates breaking. - *) - | [(Nolabel, exp)] when isSingleArgParenApplication [exp] -> - [self#singleArgParenApplication [exp]] - | params -> - [makeTup (List.map self#label_x_expression_param params)]) - in - match xs with - | [x] -> x - | xs -> makeBreakableList xs -end;; + exception Error + type semantic_action = + (state, semantic_value, token) env -> (state, semantic_value) stack -let easy = new printer () + val semantic_action: production -> semantic_action -let toplevel_phrase f x = - match x with - | Ptop_def (s) -> - easyFormatToFormatter f (layoutToEasyFormatNoComments (easy#structure s)) - | Ptop_dir (s, da) -> print_string "(* top directives not supported *)" + (* [may_reduce state prod] tests whether the state [state] is capable of + reducing the production [prod]. This function is currently costly and + is not used by the core LR engine. It is used in the implementation + of certain functions, such as [force_reduction], which allow the engine + to be driven programmatically. *) -let case_list f x = - let l = easy#case_list x in - (List.iter (fun x -> easyFormatToFormatter f (layoutToEasyFormatNoComments x)) l) + val may_reduce: state -> production -> bool -let top_phrase f x = - pp_print_newline f () ; - toplevel_phrase f x; - pp f ";;" ; - pp_print_newline f ();; + (* The LR engine requires a number of hooks, which are used for logging. *) -(* Convert a Longident to a list of strings. - E.g. M.Constructor will be ["Constructor"; "M.Constructor"] - Also support ".Constructor" to specify access without a path. - *) -let longident_for_arity lid = - let rec toplevel = function - | Lident s -> - [s] - | Ldot (lid, s) -> - let append_s x = x ^ "." ^ s in - s :: (List.map append_s (toplevel lid)) - | Lapply (y,s) -> - toplevel s in - match lid with - | Lident s -> - ("." ^ s) :: toplevel lid - | _ -> - toplevel lid + (* The comments below indicate the conventional messages that correspond + to these hooks in the code-based back-end; see [CodeBackend]. *) -(* add expilcit_arity to a list of attributes - *) -let add_explicit_arity loc attributes = - ({txt="explicit_arity"; loc}, PStr []) :: - normalized_attributes "explicit_arity" attributes + (* If the flag [log] is false, then the logging functions are not called. + If it is [true], then they are called. *) -(* explicit_arity_exists check if expilcit_arity exists - *) -let explicit_arity_not_exists attributes = - not (attribute_exists "explicit_arity" attributes) + val log : bool -(* wrap_expr_with_tuple wraps an expression - * with tuple as a sole argument. - *) -let wrap_expr_with_tuple exp = - {exp with pexp_desc = Pexp_tuple [exp]} + module Log : sig -(* wrap_pat_with_tuple wraps an pattern - * with tuple as a sole argument. - *) -let wrap_pat_with_tuple pat = - {pat with ppat_desc = Ppat_tuple [pat]} + (* State %d: *) + val state: state -> unit + (* Shifting () to state *) -(* explicit_arity_constructors is a set of constructors that are known to have - * multiple arguments - * - *) + val shift: terminal -> state -> unit -module StringSet = Set.Make(String);; + (* Reducing a production should be logged either as a reduction + event (for regular productions) or as an acceptance event (for + start productions). *) -let built_in_explicit_arity_constructors = ["Some"; "Assert_failure"; "Match_failure"] + (* Reducing production / Accepting *) -let explicit_arity_constructors = StringSet.of_list(built_in_explicit_arity_constructors @ (!configuredSettings).constructorLists) + val reduce_or_accept: production -> unit -let add_explicit_arity_mapper super = -{ super with - expr = begin fun mapper expr -> - let expr = - match expr with - | {pexp_desc=Pexp_construct(lid, Some sp); - pexp_loc; - pexp_attributes} when - List.exists - (fun c -> StringSet.mem c explicit_arity_constructors) - (longident_for_arity lid.txt) && - explicit_arity_not_exists pexp_attributes -> - {pexp_desc=Pexp_construct(lid, Some (wrap_expr_with_tuple sp)); - pexp_loc; - pexp_attributes=add_explicit_arity pexp_loc pexp_attributes} - | x -> x - in - super.expr mapper expr - end; - pat = begin fun mapper pat -> - let pat = - match pat with - | {ppat_desc=Ppat_construct(lid, Some sp); - ppat_loc; - ppat_attributes} when - List.exists - (fun c -> StringSet.mem c explicit_arity_constructors) - (longident_for_arity lid.txt) && - explicit_arity_not_exists ppat_attributes -> - {ppat_desc=Ppat_construct(lid, Some (wrap_pat_with_tuple sp)); - ppat_loc; - ppat_attributes=add_explicit_arity ppat_loc ppat_attributes} - | x -> x - in - super.pat mapper pat - end; -} + (* Lookahead token is now (-) *) -let preprocessing_mapper = - ml_to_reason_swap_operator_mapper - (escape_stars_slashes_mapper - (add_explicit_arity_mapper default_mapper)) - -let core_type f x = - easyFormatToFormatter f (layoutToEasyFormatNoComments (easy#core_type (apply_mapper_to_type x preprocessing_mapper))) -let pattern f x = - easyFormatToFormatter f (layoutToEasyFormatNoComments (easy#pattern (apply_mapper_to_pattern x preprocessing_mapper))) -let signature (comments : commentWithCategory) f x = - easyFormatToFormatter f (layoutToEasyFormat (easy#signature (apply_mapper_to_signature x preprocessing_mapper)) comments) -let structure (comments : commentWithCategory) f x = - easyFormatToFormatter f (layoutToEasyFormat (easy#structure (apply_mapper_to_structure x preprocessing_mapper)) comments) -let expression f x = - easyFormatToFormatter f (layoutToEasyFormatNoComments (easy#unparseExpr (apply_mapper_to_expr x preprocessing_mapper))) -let case_list = case_list -end -in -object - method core_type = Formatter.core_type - method pattern = Formatter.pattern - method signature = Formatter.signature - method structure = Formatter.structure - (* For merlin-destruct *) - method toplevel_phrase = Formatter.toplevel_phrase - method expression = Formatter.expression - method case_list = Formatter.case_list -end + val lookahead_token: terminal -> Lexing.position -> Lexing.position -> unit -let defaultSettings = defaultSettings + (* Initiating error handling *) -end -module Printer_maker -= struct -#1 "printer_maker.ml" -open Migrate_parsetree -open Ast_404 + val initiating_error_handling: unit -> unit -type parse_itype = [ `ML | `Reason | `Binary | `BinaryReason | `Auto ] -type print_itype = [ `ML | `Reason | `Binary | `BinaryReason | `AST | `None ] + (* Resuming error handling *) -exception Invalid_config of string + val resuming_error_handling: unit -> unit -module type PRINTER = - sig - type t + (* Handling error in state *) - val parse : use_stdin:bool -> - parse_itype -> - string -> - ((t * Reason_pprint_ast.commentWithCategory) * bool) + val handling_error: state -> unit + end - val print : print_itype -> - string -> - bool -> - out_channel -> - Format.formatter -> - ((t * Reason_pprint_ast.commentWithCategory) -> unit) - end +end -let err s = raise (Invalid_config s) +(* --------------------------------------------------------------------------- *) -let prepare_output_file = function - | Some name -> open_out_bin name - | None -> set_binary_mode_out stdout true; stdout +(* This signature describes the monolithic (traditional) LR engine. *) -let close_output_file output_file output_chan = - match output_file with - | Some _ -> close_out output_chan - | None -> () +(* In this interface, the parser controls the lexer. *) -let ocamlBinaryParser use_stdin filename = - let chan = - match use_stdin with - | true -> stdin - | false -> - let file_chan = open_in filename in - seek_in file_chan 0; - file_chan - in - match Ast_io.from_channel chan with - | Result.Error err -> assert false - | Result.Ok (_, Ast_io.Impl ((module Version), ast)) -> - let module Convert = Convert(Version)(OCaml_404) in - ((Obj.magic (Convert.copy_structure ast), []), true, false) - | Result.Ok (_, Ast_io.Intf ((module Version), ast)) -> - let module Convert = Convert(Version)(OCaml_404) in - ((Obj.magic (Convert.copy_signature ast), []), true, true) +module type MONOLITHIC_ENGINE = sig -let reasonBinaryParser use_stdin filename = - let chan = - match use_stdin with - | true -> stdin - | false -> - let file_chan = open_in filename in - seek_in file_chan 0; - file_chan - in - let (magic_number, filename, ast, comments, parsedAsML, parsedAsInterface) = input_value chan in - ((ast, comments), parsedAsML, parsedAsInterface) + type state -end -module Reason_config -= struct -#1 "reason_config.ml" -(** - * Copyright (c) 2015-present, Facebook, Inc. All rights reserved. - *) + type token -let recoverable = ref false + type semantic_value -let configure ~r = ( - recoverable := r; -) + (* An entry point to the engine requires a start state, a lexer, and a lexing + buffer. It either succeeds and produces a semantic value, or fails and + raises [Error]. *) -end -module MenhirLib : sig -#1 "menhirLib.mli" -module General : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + exception Error -(* This module offers general-purpose functions on lists and streams. *) + val entry: + state -> + (Lexing.lexbuf -> token) -> + Lexing.lexbuf -> + semantic_value -(* As of 2017/03/31, this module is DEPRECATED. It might be removed in - the future. *) +end (* --------------------------------------------------------------------------- *) -(* Lists. *) +(* The following signatures describe the incremental LR engine. *) -(* [take n xs] returns the [n] first elements of the list [xs]. It is - acceptable for the list [xs] to have length less than [n], in - which case [xs] itself is returned. *) +(* First, see [INCREMENTAL_ENGINE] in the file [IncrementalEngine.ml]. *) -val take: int -> 'a list -> 'a list +(* The [start] function is set apart because we do not wish to publish + it as part of the generated [parser.mli] file. Instead, the table + back-end will publish specialized versions of it, with a suitable + type cast. *) -(* [drop n xs] returns the list [xs], deprived of its [n] first elements. - It is acceptable for the list [xs] to have length less than [n], in - which case an empty list is returned. *) +module type INCREMENTAL_ENGINE_START = sig -val drop: int -> 'a list -> 'a list + (* [start] is an entry point. It requires a start state and a start position + and begins the parsing process. If the lexer is based on an OCaml lexing + buffer, the start position should be [lexbuf.lex_curr_p]. [start] produces + a checkpoint, which usually will be an [InputNeeded] checkpoint. (It could + be [Accepted] if this starting state accepts only the empty word. It could + be [Rejected] if this starting state accepts no word at all.) It does not + raise any exception. *) -(* [uniq cmp xs] assumes that the list [xs] is sorted according to the - ordering [cmp] and returns the list [xs] deprived of any duplicate - elements. *) + (* [start s pos] should really produce a checkpoint of type ['a checkpoint], + for a fixed ['a] that depends on the state [s]. We cannot express this, so + we use [semantic_value checkpoint], which is safe. The table back-end uses + [Obj.magic] to produce safe specialized versions of [start]. *) -val uniq: ('a -> 'a -> int) -> 'a list -> 'a list + type state + type semantic_value + type 'a checkpoint -(* [weed cmp xs] returns the list [xs] deprived of any duplicate elements. *) + val start: + state -> + Lexing.position -> + semantic_value checkpoint -val weed: ('a -> 'a -> int) -> 'a list -> 'a list +end (* --------------------------------------------------------------------------- *) -(* A stream is a list whose elements are produced on demand. *) - -type 'a stream = - 'a head Lazy.t +(* This signature describes the LR engine, which combines the monolithic + and incremental interfaces. *) -and 'a head = - | Nil - | Cons of 'a * 'a stream +module type ENGINE = sig -(* The length of a stream. *) + include MONOLITHIC_ENGINE -val length: 'a stream -> int + include IncrementalEngine.INCREMENTAL_ENGINE + with type token := token + and type 'a lr1state = state (* useful for us; hidden from the end user *) -(* Folding over a stream. *) + include INCREMENTAL_ENGINE_START + with type state := state + and type semantic_value := semantic_value + and type 'a checkpoint := 'a checkpoint -val foldr: ('a -> 'b -> 'b) -> 'a stream -> 'b -> 'b end -module Convert : sig +end +module Engine = struct (******************************************************************************) (* *) (* Menhir *) @@ -43650,971 +38301,1322 @@ module Convert : sig (* *) (******************************************************************************) -(* An ocamlyacc-style, or Menhir-style, parser requires access to - the lexer, which must be parameterized with a lexing buffer, and - to the lexing buffer itself, where it reads position information. *) +type position = Lexing.position +open EngineTypes -(* This traditional API is convenient when used with ocamllex, but - inelegant when used with other lexer generators. *) +(* The LR parsing engine. *) -type ('token, 'semantic_value) traditional = - (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value +(* This module is used: -(* This revised API is independent of any lexer generator. Here, the - parser only requires access to the lexer, and the lexer takes no - parameters. The tokens returned by the lexer may contain position - information. *) + - at compile time, if so requested by the user, via the --interpret options; + - at run time, in the table-based back-end. *) -type ('token, 'semantic_value) revised = - (unit -> 'token) -> 'semantic_value +module Make (T : TABLE) = struct -(* --------------------------------------------------------------------------- *) + (* This propagates type and exception definitions. The functions [number], + [production_index], [find_production], too, are defined by this [include] + declaration. *) -(* Converting a traditional parser, produced by ocamlyacc or Menhir, - into a revised parser. *) + include T -(* A token of the revised lexer is essentially a triple of a token - of the traditional lexer (or raw token), a start position, and - and end position. The three [get] functions are accessors. *) + type 'a env = + (state, semantic_value, token) EngineTypes.env -(* We do not require the type ['token] to actually be a triple type. - This enables complex applications where it is a record type with - more than three fields. It also enables simple applications where - positions are of no interest, so ['token] is just ['raw_token] - and [get_startp] and [get_endp] return dummy positions. *) + (* ------------------------------------------------------------------------ *) -val traditional2revised: - ('token -> 'raw_token) -> - ('token -> Lexing.position) -> - ('token -> Lexing.position) -> - ('raw_token, 'semantic_value) traditional -> - ('token, 'semantic_value) revised + (* The type [checkpoint] represents an intermediate or final result of the + parser. See [EngineTypes]. *) -(* --------------------------------------------------------------------------- *) + (* The type [checkpoint] is presented to the user as a private type (see + [IncrementalEngine]). This prevents the user from manufacturing + checkpoints (i.e., continuations) that do not make sense. (Such + continuations could potentially violate the LR invariant and lead to + crashes.) *) -(* Converting a revised parser back to a traditional parser. *) + (* 2017/03/29 Although [checkpoint] is a private type, we now expose a + constructor function, [input_needed]. This function allows manufacturing + a checkpoint out of an environment. For this reason, the type [env] must + also be parameterized with ['a]. *) -val revised2traditional: - ('raw_token -> Lexing.position -> Lexing.position -> 'token) -> - ('token, 'semantic_value) revised -> - ('raw_token, 'semantic_value) traditional + type 'a checkpoint = + | InputNeeded of 'a env + | Shifting of 'a env * 'a env * bool + | AboutToReduce of 'a env * production + | HandlingError of 'a env + | Accepted of 'a + | Rejected -(* --------------------------------------------------------------------------- *) + (* ------------------------------------------------------------------------ *) -(* Simplified versions of the above, where concrete triples are used. *) + (* In the code-based back-end, the [run] function is sometimes responsible + for pushing a new cell on the stack. This is motivated by code sharing + concerns. In this interpreter, there is no such concern; [run]'s caller + is always responsible for updating the stack. *) -module Simplified : sig + (* In the code-based back-end, there is a [run] function for each state + [s]. This function can behave in two slightly different ways, depending + on when it is invoked, or (equivalently) depending on [s]. - val traditional2revised: - ('token, 'semantic_value) traditional -> - ('token * Lexing.position * Lexing.position, 'semantic_value) revised + If [run] is invoked after shifting a terminal symbol (or, equivalently, + if [s] has a terminal incoming symbol), then [run] discards a token, + unless [s] has a default reduction on [#]. (Indeed, in that case, + requesting the next token might drive the lexer off the end of the input + stream.) - val revised2traditional: - ('token * Lexing.position * Lexing.position, 'semantic_value) revised -> - ('token, 'semantic_value) traditional + If, on the other hand, [run] is invoked after performing a goto + transition, or invoked directly by an entry point, then there is nothing + to discard. -end -end -module IncrementalEngine : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + These two cases are reflected in [CodeBackend.gettoken]. -type position = Lexing.position + Here, the code is structured in a slightly different way. It is up to the + caller of [run] to indicate whether to discard a token, via the parameter + [please_discard]. This flag is set when [s] is being entered by shifting + a terminal symbol and [s] does not have a default reduction on [#]. *) -open General + (* The following recursive group of functions are tail recursive, produce a + checkpoint of type [semantic_value checkpoint], and cannot raise an + exception. A semantic action can raise [Error], but this exception is + immediately caught within [reduce]. *) -(* This signature describes the incremental LR engine. *) + let rec run env please_discard : semantic_value checkpoint = -(* In this mode, the user controls the lexer, and the parser suspends - itself when it needs to read a new token. *) + (* Log the fact that we just entered this state. *) -module type INCREMENTAL_ENGINE = sig + if log then + Log.state env.current; - type token - - (* A value of type [production] is (an index for) a production. The start - productions (which do not exist in an \mly file, but are constructed by - Menhir internally) are not part of this type. *) + (* If [please_discard] is set, we discard the current lookahead token and + fetch the next one. In order to request a token from the user, we + return an [InputNeeded] continuation, which, when invoked by the user, + will take us to [discard]. If [please_discard] is not set, we skip this + step and jump directly to [check_for_default_reduction]. *) - type production + if please_discard then + InputNeeded env + else + check_for_default_reduction env - (* The type ['a checkpoint] represents an intermediate or final state of the - parser. An intermediate checkpoint is a suspension: it records the parser's - current state, and allows parsing to be resumed. The parameter ['a] is - the type of the semantic value that will eventually be produced if the - parser succeeds. *) + (* [discard env triple] stores [triple] into [env], overwriting the previous + token. It is invoked by [offer], which itself is invoked by the user in + response to an [InputNeeded] checkpoint. *) - (* [Accepted] and [Rejected] are final checkpoints. [Accepted] carries a - semantic value. *) + and discard env triple = + if log then begin + let (token, startp, endp) = triple in + Log.lookahead_token (T.token2terminal token) startp endp + end; + let env = { env with error = false; triple } in + check_for_default_reduction env - (* [InputNeeded] is an intermediate checkpoint. It means that the parser wishes - to read one token before continuing. *) + and check_for_default_reduction env = - (* [Shifting] is an intermediate checkpoint. It means that the parser is taking - a shift transition. It exposes the state of the parser before and after - the transition. The Boolean parameter tells whether the parser intends to - request a new token after this transition. (It always does, except when - it is about to accept.) *) + (* Examine what situation we are in. This case analysis is analogous to + that performed in [CodeBackend.gettoken], in the sub-case where we do + not have a terminal incoming symbol. *) - (* [AboutToReduce] is an intermediate checkpoint. It means that the parser is - about to perform a reduction step. It exposes the parser's current - state as well as the production that is about to be reduced. *) + T.default_reduction + env.current + announce_reduce (* there is a default reduction; perform it *) + check_for_error_token (* there is none; continue below *) + env - (* [HandlingError] is an intermediate checkpoint. It means that the parser has - detected an error and is currently handling it, in several steps. *) + and check_for_error_token env = - (* A value of type ['a env] represents a configuration of the automaton: - current state, stack, lookahead token, etc. The parameter ['a] is the - type of the semantic value that will eventually be produced if the parser - succeeds. *) + (* There is no default reduction. Consult the current lookahead token + so as to determine which action should be taken. *) - (* In normal operation, the parser works with checkpoints: see the functions - [offer] and [resume]. However, it is also possible to work directly with - environments (see the functions [pop], [force_reduction], and [feed]) and - to reconstruct a checkpoint out of an environment (see [input_needed]). - This is considered advanced functionality; its purpose is to allow error - recovery strategies to be programmed by the user. *) + (* Peeking at the first input token, without taking it off the input + stream, is done by reading [env.triple]. We are careful to first + check [env.error]. *) - type 'a env + (* Note that, if [please_discard] was true, then we have just called + [discard], so the lookahead token cannot be [error]. *) - type 'a checkpoint = private - | InputNeeded of 'a env - | Shifting of 'a env * 'a env * bool - | AboutToReduce of 'a env * production - | HandlingError of 'a env - | Accepted of 'a - | Rejected + (* Returning [HandlingError env] is equivalent to calling [error env] + directly, except it allows the user to regain control. *) - (* [offer] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [InputNeeded env]. [offer] expects the - old checkpoint as well as a new token and produces a new checkpoint. It does not - raise any exception. *) + if env.error then begin + if log then + Log.resuming_error_handling(); + HandlingError env + end + else + let (token, _, _) = env.triple in - val offer: - 'a checkpoint -> - token * position * position -> - 'a checkpoint + (* We consult the two-dimensional action table, indexed by the + current state and the current lookahead token, in order to + determine which action should be taken. *) - (* [resume] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [AboutToReduce (env, prod)] or - [HandlingError env]. [resume] expects the old checkpoint and produces a new - checkpoint. It does not raise any exception. *) + T.action + env.current (* determines a row *) + (T.token2terminal token) (* determines a column *) + (T.token2value token) + shift (* shift continuation *) + announce_reduce (* reduce continuation *) + initiate (* failure continuation *) + env - val resume: - 'a checkpoint -> - 'a checkpoint + (* ------------------------------------------------------------------------ *) - (* A token supplier is a function of no arguments which delivers a new token - (together with its start and end positions) every time it is called. *) + (* This function takes care of shift transitions along a terminal symbol. + (Goto transitions are taken care of within [reduce] below.) The symbol + can be either an actual token or the [error] pseudo-token. *) - type supplier = - unit -> token * position * position + (* Here, the lookahead token CAN be [error]. *) - (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) + and shift env + (please_discard : bool) + (terminal : terminal) + (value : semantic_value) + (s' : state) = - val lexer_lexbuf_to_supplier: - (Lexing.lexbuf -> token) -> - Lexing.lexbuf -> - supplier + (* Log the transition. *) - (* The functions [offer] and [resume] are sufficient to write a parser loop. - One can imagine many variations (which is why we expose these functions - in the first place!). Here, we expose a few variations of the main loop, - ready for use. *) + if log then + Log.shift terminal s'; - (* [loop supplier checkpoint] begins parsing from [checkpoint], reading - tokens from [supplier]. It continues parsing until it reaches a - checkpoint of the form [Accepted v] or [Rejected]. In the former case, it - returns [v]. In the latter case, it raises the exception [Error]. *) + (* Push a new cell onto the stack, containing the identity of the + state that we are leaving. *) - val loop: supplier -> 'a checkpoint -> 'a + let (_, startp, endp) = env.triple in + let stack = { + state = env.current; + semv = value; + startp; + endp; + next = env.stack; + } in - (* [loop_handle succeed fail supplier checkpoint] begins parsing from - [checkpoint], reading tokens from [supplier]. It continues parsing until - it reaches a checkpoint of the form [Accepted v] or [HandlingError env] - (or [Rejected], but that should not happen, as [HandlingError _] will be - observed first). In the former case, it calls [succeed v]. In the latter - case, it calls [fail] with this checkpoint. It cannot raise [Error]. + (* Switch to state [s']. *) - This means that Menhir's traditional error-handling procedure (which pops - the stack until a state that can act on the [error] token is found) does - not get a chance to run. Instead, the user can implement her own error - handling code, in the [fail] continuation. *) + let new_env = { env with stack; current = s' } in - val loop_handle: - ('a -> 'answer) -> - ('a checkpoint -> 'answer) -> - supplier -> 'a checkpoint -> 'answer + (* Expose the transition to the user. (In principle, we have a choice + between exposing the transition before we take it, after we take + it, or at some point in between. This affects the number and type + of the parameters carried by [Shifting]. Here, we choose to expose + the transition after we take it; this allows [Shifting] to carry + only three parameters, whose meaning is simple.) *) - (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair - of checkpoints to the failure continuation. + Shifting (env, new_env, please_discard) - The first (and oldest) checkpoint is the last [InputNeeded] checkpoint that - was encountered before the error was detected. The second (and newest) - checkpoint is where the error was detected, as in [loop_handle]. Going back - to the first checkpoint can be thought of as undoing any reductions that - were performed after seeing the problematic token. (These reductions must - be default reductions or spurious reductions.) + (* ------------------------------------------------------------------------ *) - [loop_handle_undo] must initially be applied to an [InputNeeded] checkpoint. - The parser's initial checkpoints satisfy this constraint. *) + (* The function [announce_reduce] stops the parser and returns a checkpoint + which allows the parser to be resumed by calling [reduce]. *) - val loop_handle_undo: - ('a -> 'answer) -> - ('a checkpoint -> 'a checkpoint -> 'answer) -> - supplier -> 'a checkpoint -> 'answer + (* Only ordinary productions are exposed to the user. Start productions + are not exposed to the user. Reducing a start production simply leads + to the successful termination of the parser. *) - (* [shifts checkpoint] assumes that [checkpoint] has been obtained by - submitting a token to the parser. It runs the parser from [checkpoint], - through an arbitrary number of reductions, until the parser either - accepts this token (i.e., shifts) or rejects it (i.e., signals an error). - If the parser decides to shift, then [Some env] is returned, where [env] - is the parser's state just before shifting. Otherwise, [None] is - returned. *) + and announce_reduce env (prod : production) = + if T.is_start prod then + accept env prod + else + AboutToReduce (env, prod) - (* It is desirable that the semantic actions be side-effect free, or that - their side-effects be harmless (replayable). *) + (* The function [reduce] takes care of reductions. It is invoked by + [resume] after an [AboutToReduce] event has been produced. *) - val shifts: 'a checkpoint -> 'a env option + (* Here, the lookahead token CAN be [error]. *) - (* The function [acceptable] allows testing, after an error has been - detected, which tokens would have been accepted at this point. It is - implemented using [shifts]. Its argument should be an [InputNeeded] - checkpoint. *) + (* The production [prod] CANNOT be a start production. *) - (* For completeness, one must undo any spurious reductions before carrying out - this test -- that is, one must apply [acceptable] to the FIRST checkpoint - that is passed by [loop_handle_undo] to its failure continuation. *) + and reduce env (prod : production) = - (* This test causes some semantic actions to be run! The semantic actions - should be side-effect free, or their side-effects should be harmless. *) + (* Log a reduction event. *) - (* The position [pos] is used as the start and end positions of the - hypothetical token, and may be picked up by the semantic actions. We - suggest using the position where the error was detected. *) + if log then + Log.reduce_or_accept prod; - val acceptable: 'a checkpoint -> token -> position -> bool + (* Invoke the semantic action. The semantic action is responsible for + truncating the stack and pushing a new cell onto the stack, which + contains a new semantic value. It can raise [Error]. *) - (* The abstract type ['a lr1state] describes the non-initial states of the - LR(1) automaton. The index ['a] represents the type of the semantic value - associated with this state's incoming symbol. *) + (* If the semantic action terminates normally, it returns a new stack, + which becomes the current stack. *) - type 'a lr1state + (* If the semantic action raises [Error], we catch it and initiate error + handling. *) - (* The states of the LR(1) automaton are numbered (from 0 and up). *) + (* This [match/with/exception] construct requires OCaml 4.02. *) - val number: _ lr1state -> int + match T.semantic_action prod env with + | stack -> - (* Productions are numbered. *) + (* By our convention, the semantic action has produced an updated + stack. The state now found in the top stack cell is the return + state. *) - (* [find_production i] requires the index [i] to be valid. Use with care. *) + (* Perform a goto transition. The target state is determined + by consulting the goto table at the return state and at + production [prod]. *) - val production_index: production -> int - val find_production: int -> production + let current = T.goto_prod stack.state prod in + let env = { env with stack; current } in + run env false - (* An element is a pair of a non-initial state [s] and a semantic value [v] - associated with the incoming symbol of this state. The idea is, the value - [v] was pushed onto the stack just before the state [s] was entered. Thus, - for some type ['a], the state [s] has type ['a lr1state] and the value [v] - has type ['a]. In other words, the type [element] is an existential type. *) + | exception Error -> + initiate env - type element = - | Element: 'a lr1state * 'a * position * position -> element + and accept env prod = + (* Log an accept event. *) + if log then + Log.reduce_or_accept prod; + (* Extract the semantic value out of the stack. *) + let v = env.stack.semv in + (* Finish. *) + Accepted v - (* The parser's stack is (or, more precisely, can be viewed as) a stream of - elements. The type [stream] is defined by the module [General]. *) + (* ------------------------------------------------------------------------ *) - (* As of 2017/03/31, the types [stream] and [stack] and the function [stack] - are DEPRECATED. They might be removed in the future. An alternative way - of inspecting the stack is via the functions [top] and [pop]. *) + (* The following functions deal with errors. *) - type stack = (* DEPRECATED *) - element stream + (* [initiate] initiates or resumes error handling. *) - (* This is the parser's stack, a stream of elements. This stream is empty if - the parser is in an initial state; otherwise, it is non-empty. The LR(1) - automaton's current state is the one found in the top element of the - stack. *) + (* Here, the lookahead token CAN be [error]. *) - val stack: 'a env -> stack (* DEPRECATED *) + and initiate env = + if log then + Log.initiating_error_handling(); + let env = { env with error = true } in + HandlingError env - (* [top env] returns the parser's top stack element. The state contained in - this stack element is the current state of the automaton. If the stack is - empty, [None] is returned. In that case, the current state of the - automaton must be an initial state. *) + (* [error] handles errors. *) - val top: 'a env -> element option + and error env = + assert env.error; - (* [pop_many i env] pops [i] cells off the automaton's stack. This is done - via [i] successive invocations of [pop]. Thus, [pop_many 1] is [pop]. The - index [i] must be nonnegative. The time complexity is O(i). *) + (* Consult the column associated with the [error] pseudo-token in the + action table. *) - val pop_many: int -> 'a env -> 'a env option + T.action + env.current (* determines a row *) + T.error_terminal (* determines a column *) + T.error_value + error_shift (* shift continuation *) + error_reduce (* reduce continuation *) + error_fail (* failure continuation *) + env - (* [get i env] returns the parser's [i]-th stack element. The index [i] is - 0-based: thus, [get 0] is [top]. If [i] is greater than or equal to the - number of elements in the stack, [None] is returned. The time complexity - is O(i). *) + and error_shift env please_discard terminal value s' = - val get: int -> 'a env -> element option + (* Here, [terminal] is [T.error_terminal], + and [value] is [T.error_value]. *) - (* [current_state_number env] is (the integer number of) the automaton's - current state. This works even if the automaton's stack is empty, in - which case the current state is an initial state. This number can be - passed as an argument to a [message] function generated by [menhir - --compile-errors]. *) + assert (terminal = T.error_terminal && value = T.error_value); - val current_state_number: 'a env -> int + (* This state is capable of shifting the [error] token. *) - (* [equal env1 env2] tells whether the parser configurations [env1] and - [env2] are equal in the sense that the automaton's current state is the - same in [env1] and [env2] and the stack is *physically* the same in - [env1] and [env2]. If [equal env1 env2] is [true], then the sequence of - the stack elements, as observed via [pop] and [top], must be the same in - [env1] and [env2]. Also, if [equal env1 env2] holds, then the checkpoints - [input_needed env1] and [input_needed env2] must be equivalent. The - function [equal] has time complexity O(1). *) + if log then + Log.handling_error env.current; + shift env please_discard terminal value s' - val equal: 'a env -> 'a env -> bool + and error_reduce env prod = - (* These are the start and end positions of the current lookahead token. If - invoked in an initial state, this function returns a pair of twice the - initial position. *) + (* This state is capable of performing a reduction on [error]. *) - val positions: 'a env -> position * position + if log then + Log.handling_error env.current; + reduce env prod + (* Intentionally calling [reduce] instead of [announce_reduce]. + It does not seem very useful, and it could be confusing, to + expose the reduction steps taken during error handling. *) - (* When applied to an environment taken from a checkpoint of the form - [AboutToReduce (env, prod)], the function [env_has_default_reduction] - tells whether the reduction that is about to take place is a default - reduction. *) + and error_fail env = - val env_has_default_reduction: 'a env -> bool + (* This state is unable to handle errors. Attempt to pop a stack + cell. *) - (* [state_has_default_reduction s] tells whether the state [s] has a default - reduction. This includes the case where [s] is an accepting state. *) + let cell = env.stack in + let next = cell.next in + if next == cell then - val state_has_default_reduction: _ lr1state -> bool + (* The stack is empty. Die. *) - (* [pop env] returns a new environment, where the parser's top stack cell - has been popped off. (If the stack is empty, [None] is returned.) This - amounts to pretending that the (terminal or nonterminal) symbol that - corresponds to this stack cell has not been read. *) + Rejected - val pop: 'a env -> 'a env option + else begin - (* [force_reduction prod env] should be called only if in the state [env] - the parser is capable of reducing the production [prod]. If this - condition is satisfied, then this production is reduced, which means that - its semantic action is executed (this can have side effects!) and the - automaton makes a goto (nonterminal) transition. If this condition is not - satisfied, [Invalid_argument _] is raised. *) + (* The stack is nonempty. Pop a cell, updating the current state + with that found in the popped cell, and try again. *) - val force_reduction: production -> 'a env -> 'a env + let env = { env with + stack = next; + current = cell.state + } in + HandlingError env - (* [input_needed env] returns [InputNeeded env]. That is, out of an [env] - that might have been obtained via a series of calls to the functions - [pop], [force_reduction], [feed], etc., it produces a checkpoint, which - can be used to resume normal parsing, by supplying this checkpoint as an - argument to [offer]. *) + end - (* This function should be used with some care. It could "mess up the - lookahead" in the sense that it allows parsing to resume in an arbitrary - state [s] with an arbitrary lookahead symbol [t], even though Menhir's - reachability analysis (menhir --list-errors) might well think that it is - impossible to reach this particular configuration. If one is using - Menhir's new error reporting facility, this could cause the parser to - reach an error state for which no error message has been prepared. *) + (* End of the nest of tail recursive functions. *) - val input_needed: 'a env -> 'a checkpoint + (* ------------------------------------------------------------------------ *) + (* ------------------------------------------------------------------------ *) -end + (* The incremental interface. See [EngineTypes]. *) -(* This signature is a fragment of the inspection API that is made available - to the user when [--inspection] is used. This fragment contains type - definitions for symbols. *) + (* [start s] begins the parsing process. *) -module type SYMBOLS = sig + let start (s : state) (initial : position) : semantic_value checkpoint = - (* The type ['a terminal] represents a terminal symbol. The type ['a - nonterminal] represents a nonterminal symbol. In both cases, the index - ['a] represents the type of the semantic values associated with this - symbol. The concrete definitions of these types are generated. *) + (* Build an empty stack. This is a dummy cell, which is its own successor. + Its [next] field WILL be accessed by [error_fail] if an error occurs and + is propagated all the way until the stack is empty. Its [endp] field WILL + be accessed (by a semantic action) if an epsilon production is reduced + when the stack is empty. *) - type 'a terminal - type 'a nonterminal + let rec empty = { + state = s; (* dummy *) + semv = T.error_value; (* dummy *) + startp = initial; (* dummy *) + endp = initial; + next = empty; + } in - (* The type ['a symbol] represents a terminal or nonterminal symbol. It is - the disjoint union of the types ['a terminal] and ['a nonterminal]. *) + (* Build an initial environment. *) - type 'a symbol = - | T : 'a terminal -> 'a symbol - | N : 'a nonterminal -> 'a symbol + (* Unfortunately, there is no type-safe way of constructing a + dummy token. Tokens carry semantic values, which in general + we cannot manufacture. This instance of [Obj.magic] could + be avoided by adopting a different representation (e.g., no + [env.error] field, and an option in the first component of + [env.triple]), but I like this representation better. *) - (* The type [xsymbol] is an existentially quantified version of the type - ['a symbol]. This type is useful in situations where the index ['a] - is not statically known. *) + let dummy_token = Obj.magic () in + let env = { + error = false; + triple = (dummy_token, initial, initial); (* dummy *) + stack = empty; + current = s; + } in - type xsymbol = - | X : 'a symbol -> xsymbol + (* Begin parsing. *) -end + (* The parameter [please_discard] here is [true], which means we know + that we must read at least one token. This claim relies on the fact + that we have ruled out the two special cases where a start symbol + recognizes the empty language or the singleton language {epsilon}. *) -(* This signature describes the inspection API that is made available to the - user when [--inspection] is used. *) + run env true -module type INSPECTION = sig + (* [offer checkpoint triple] is invoked by the user in response to a + checkpoint of the form [InputNeeded env]. It checks that [checkpoint] is + indeed of this form, and invokes [discard]. *) - (* The types of symbols are described above. *) + (* [resume checkpoint] is invoked by the user in response to a checkpoint of + the form [AboutToReduce (env, prod)] or [HandlingError env]. It checks + that [checkpoint] is indeed of this form, and invokes [reduce] or + [error], as appropriate. *) - include SYMBOLS + (* In reality, [offer] and [resume] accept an argument of type + [semantic_value checkpoint] and produce a checkpoint of the same type. + The choice of [semantic_value] is forced by the fact that this is the + parameter of the checkpoint [Accepted]. *) - (* The type ['a lr1state] is meant to be the same as in [INCREMENTAL_ENGINE]. *) + (* We change this as follows. *) - type 'a lr1state + (* We change the argument and result type of [offer] and [resume] from + [semantic_value checkpoint] to ['a checkpoint]. This is safe, in this + case, because we give the user access to values of type [t checkpoint] + only if [t] is indeed the type of the eventual semantic value for this + run. (More precisely, by examining the signatures [INCREMENTAL_ENGINE] + and [INCREMENTAL_ENGINE_START], one finds that the user can build a value + of type ['a checkpoint] only if ['a] is [semantic_value]. The table + back-end goes further than this and produces versions of [start] composed + with a suitable cast, which give the user access to a value of type + [t checkpoint] where [t] is the type of the start symbol.) *) - (* The type [production] is meant to be the same as in [INCREMENTAL_ENGINE]. - It represents a production of the grammar. A production can be examined - via the functions [lhs] and [rhs] below. *) + let offer : 'a . 'a checkpoint -> + token * position * position -> + 'a checkpoint + = function + | InputNeeded env -> + Obj.magic discard env + | _ -> + invalid_arg "offer expects InputNeeded" - type production + let resume : 'a . 'a checkpoint -> 'a checkpoint = function + | HandlingError env -> + Obj.magic error env + | Shifting (_, env, please_discard) -> + Obj.magic run env please_discard + | AboutToReduce (env, prod) -> + Obj.magic reduce env prod + | _ -> + invalid_arg "resume expects HandlingError | Shifting | AboutToReduce" - (* An LR(0) item is a pair of a production [prod] and a valid index [i] into - this production. That is, if the length of [rhs prod] is [n], then [i] is - comprised between 0 and [n], inclusive. *) + (* ------------------------------------------------------------------------ *) + (* ------------------------------------------------------------------------ *) - type item = - production * int + (* The traditional interface. See [EngineTypes]. *) - (* Ordering functions. *) + (* ------------------------------------------------------------------------ *) - val compare_terminals: _ terminal -> _ terminal -> int - val compare_nonterminals: _ nonterminal -> _ nonterminal -> int - val compare_symbols: xsymbol -> xsymbol -> int - val compare_productions: production -> production -> int - val compare_items: item -> item -> int + (* Wrapping a lexer and lexbuf as a token supplier. *) - (* [incoming_symbol s] is the incoming symbol of the state [s], that is, - the symbol that the parser must recognize before (has recognized when) - it enters the state [s]. This function gives access to the semantic - value [v] stored in a stack element [Element (s, v, _, _)]. Indeed, - by case analysis on the symbol [incoming_symbol s], one discovers the - type ['a] of the value [v]. *) + type supplier = + unit -> token * position * position - val incoming_symbol: 'a lr1state -> 'a symbol + let lexer_lexbuf_to_supplier + (lexer : Lexing.lexbuf -> token) + (lexbuf : Lexing.lexbuf) + : supplier = + fun () -> + let token = lexer lexbuf in + let startp = lexbuf.Lexing.lex_start_p + and endp = lexbuf.Lexing.lex_curr_p in + token, startp, endp - (* [items s] is the set of the LR(0) items in the LR(0) core of the LR(1) - state [s]. This set is not epsilon-closed. This set is presented as a - list, in an arbitrary order. *) + (* ------------------------------------------------------------------------ *) - val items: _ lr1state -> item list + (* The main loop repeatedly handles intermediate checkpoints, until a final + checkpoint is obtained. This allows implementing the monolithic interface + ([entry]) in terms of the incremental interface ([start], [offer], + [handle], [reduce]). *) - (* [lhs prod] is the left-hand side of the production [prod]. This is - always a non-terminal symbol. *) + (* By convention, acceptance is reported by returning a semantic value, + whereas rejection is reported by raising [Error]. *) - val lhs: production -> xsymbol + (* [loop] is polymorphic in ['a]. No cheating is involved in achieving this. + All of the cheating resides in the types assigned to [offer] and [handle] + above. *) - (* [rhs prod] is the right-hand side of the production [prod]. This is - a (possibly empty) sequence of (terminal or nonterminal) symbols. *) + let rec loop : 'a . supplier -> 'a checkpoint -> 'a = + fun read checkpoint -> + match checkpoint with + | InputNeeded _ -> + (* The parser needs a token. Request one from the lexer, + and offer it to the parser, which will produce a new + checkpoint. Then, repeat. *) + let triple = read() in + let checkpoint = offer checkpoint triple in + loop read checkpoint + | Shifting _ + | AboutToReduce _ + | HandlingError _ -> + (* The parser has suspended itself, but does not need + new input. Just resume the parser. Then, repeat. *) + let checkpoint = resume checkpoint in + loop read checkpoint + | Accepted v -> + (* The parser has succeeded and produced a semantic value. + Return this semantic value to the user. *) + v + | Rejected -> + (* The parser rejects this input. Raise an exception. *) + raise Error - val rhs: production -> xsymbol list + let entry (s : state) lexer lexbuf : semantic_value = + let initial = lexbuf.Lexing.lex_curr_p in + loop (lexer_lexbuf_to_supplier lexer lexbuf) (start s initial) - (* [nullable nt] tells whether the non-terminal symbol [nt] is nullable. - That is, it is true if and only if this symbol produces the empty - word [epsilon]. *) + (* ------------------------------------------------------------------------ *) - val nullable: _ nonterminal -> bool + (* [loop_handle] stops if it encounters an error, and at this point, invokes + its failure continuation, without letting Menhir do its own traditional + error-handling (which involves popping the stack, etc.). *) - (* [first nt t] tells whether the FIRST set of the nonterminal symbol [nt] - contains the terminal symbol [t]. That is, it is true if and only if - [nt] produces a word that begins with [t]. *) + let rec loop_handle succeed fail read checkpoint = + match checkpoint with + | InputNeeded _ -> + let triple = read() in + let checkpoint = offer checkpoint triple in + loop_handle succeed fail read checkpoint + | Shifting _ + | AboutToReduce _ -> + let checkpoint = resume checkpoint in + loop_handle succeed fail read checkpoint + | HandlingError _ + | Rejected -> + (* The parser has detected an error. Invoke the failure continuation. *) + fail checkpoint + | Accepted v -> + (* The parser has succeeded and produced a semantic value. Invoke the + success continuation. *) + succeed v - val first: _ nonterminal -> _ terminal -> bool + (* ------------------------------------------------------------------------ *) - (* [xfirst] is analogous to [first], but expects a first argument of type - [xsymbol] instead of [_ terminal]. *) + (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair + of checkpoints to the failure continuation. - val xfirst: xsymbol -> _ terminal -> bool + The first (and oldest) checkpoint is the last [InputNeeded] checkpoint + that was encountered before the error was detected. The second (and + newest) checkpoint is where the error was detected, as in [loop_handle]. + Going back to the first checkpoint can be thought of as undoing any + reductions that were performed after seeing the problematic token. (These + reductions must be default reductions or spurious reductions.) *) - (* [foreach_terminal] enumerates the terminal symbols, including [error]. - [foreach_terminal_but_error] enumerates the terminal symbols, excluding - [error]. *) + let rec loop_handle_undo succeed fail read (inputneeded, checkpoint) = + match checkpoint with + | InputNeeded _ -> + (* Update the last recorded [InputNeeded] checkpoint. *) + let inputneeded = checkpoint in + let triple = read() in + let checkpoint = offer checkpoint triple in + loop_handle_undo succeed fail read (inputneeded, checkpoint) + | Shifting _ + | AboutToReduce _ -> + let checkpoint = resume checkpoint in + loop_handle_undo succeed fail read (inputneeded, checkpoint) + | HandlingError _ + | Rejected -> + fail inputneeded checkpoint + | Accepted v -> + succeed v - val foreach_terminal: (xsymbol -> 'a -> 'a) -> 'a -> 'a - val foreach_terminal_but_error: (xsymbol -> 'a -> 'a) -> 'a -> 'a + (* For simplicity, we publish a version of [loop_handle_undo] that takes a + single checkpoint as an argument, instead of a pair of checkpoints. We + check that the argument is [InputNeeded _], and duplicate it. *) - (* The type [env] is meant to be the same as in [INCREMENTAL_ENGINE]. *) + (* The parser cannot accept or reject before it asks for the very first + character of input. (Indeed, we statically reject a symbol that + generates the empty language or the singleton language {epsilon}.) + So, the [start] checkpoint must match [InputNeeded _]. Hence, it is + permitted to call [loop_handle_undo] with a [start] checkpoint. *) - type 'a env + let loop_handle_undo succeed fail read checkpoint = + assert (match checkpoint with InputNeeded _ -> true | _ -> false); + loop_handle_undo succeed fail read (checkpoint, checkpoint) - (* [feed symbol startp semv endp env] causes the parser to consume the - (terminal or nonterminal) symbol [symbol], accompanied with the semantic - value [semv] and with the start and end positions [startp] and [endp]. - Thus, the automaton makes a transition, and reaches a new state. The - stack grows by one cell. This operation is permitted only if the current - state (as determined by [env]) has an outgoing transition labeled with - [symbol]. Otherwise, [Invalid_argument _] is raised. *) + (* ------------------------------------------------------------------------ *) - val feed: 'a symbol -> position -> 'a -> position -> 'b env -> 'b env + let rec shifts checkpoint = + match checkpoint with + | Shifting (env, _, _) -> + (* The parser is about to shift, which means it is willing to + consume the terminal symbol that we have fed it. Return the + state just before this transition. *) + Some env + | AboutToReduce _ -> + (* The parser wishes to reduce. Just follow. *) + shifts (resume checkpoint) + | HandlingError _ -> + (* The parser fails, which means it rejects the terminal symbol + that we have fed it. *) + None + | InputNeeded _ + | Accepted _ + | Rejected -> + (* None of these cases can arise. Indeed, after a token is submitted + to it, the parser must shift, reduce, or signal an error, before + it can request another token or terminate. *) + assert false -end + let acceptable checkpoint token pos = + let triple = (token, pos, pos) in + let checkpoint = offer checkpoint triple in + match shifts checkpoint with + | None -> false + | Some _env -> true -(* This signature combines the incremental API and the inspection API. *) + (* ------------------------------------------------------------------------ *) -module type EVERYTHING = sig + (* The type ['a lr1state] describes the (non-initial) states of the LR(1) + automaton. The index ['a] represents the type of the semantic value + associated with the state's incoming symbol. *) - include INCREMENTAL_ENGINE + (* The type ['a lr1state] is defined as an alias for [state], which itself + is usually defined as [int] (see [TableInterpreter]). So, ['a lr1state] + is technically a phantom type, but should really be thought of as a GADT + whose data constructors happen to be represented as integers. It is + presented to the user as an abstract type (see [IncrementalEngine]). *) - include INSPECTION - with type 'a lr1state := 'a lr1state - with type production := production - with type 'a env := 'a env + type 'a lr1state = + state -end -end -module EngineTypes : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + (* ------------------------------------------------------------------------ *) -(* This file defines several types and module types that are used in the - specification of module [Engine]. *) + (* Stack inspection. *) -(* --------------------------------------------------------------------------- *) + (* We offer a read-only view of the parser's state as a stream of elements. + Each element contains a pair of a (non-initial) state and a semantic + value associated with (the incoming symbol of) this state. Note that the + type [element] is an existential type. *) -(* It would be nice if we could keep the structure of stacks and environments - hidden. However, stacks and environments must be accessible to semantic - actions, so the following data structure definitions must be public. *) + (* As of 2017/03/31, the type [stack] and the function [stack] are DEPRECATED. + If desired, they could now be implemented outside Menhir, by relying on + the functions [top] and [pop]. *) -(* --------------------------------------------------------------------------- *) + type element = + | Element: 'a lr1state * 'a * position * position -> element -(* A stack is a linked list of cells. A sentinel cell -- which is its own - successor -- is used to mark the bottom of the stack. The sentinel cell - itself is not significant -- it contains dummy values. *) + open General -type ('state, 'semantic_value) stack = { + type stack = + element stream - (* The state that we should go back to if we pop this stack cell. *) + (* If [current] is the current state and [cell] is the top stack cell, + then [stack cell current] is a view of the parser's state as a stream + of elements. *) - (* This convention means that the state contained in the top stack cell is - not the current state [env.current]. It also means that the state found - within the sentinel is a dummy -- it is never consulted. This convention - is the same as that adopted by the code-based back-end. *) + let rec stack cell current : element stream = + lazy ( + (* The stack is empty iff the top stack cell is its own successor. In + that case, the current state [current] should be an initial state + (which has no incoming symbol). + We do not allow the user to inspect this state. *) + let next = cell.next in + if next == cell then + Nil + else + (* Construct an element containing the current state [current] as well + as the semantic value contained in the top stack cell. This semantic + value is associated with the incoming symbol of this state, so it + makes sense to pair them together. The state has type ['a state] and + the semantic value has type ['a], for some type ['a]. Here, the OCaml + type-checker thinks ['a] is [semantic_value] and considers this code + well-typed. Outside, we will use magic to provide the user with a way + of inspecting states and recovering the value of ['a]. *) + let element = Element ( + current, + cell.semv, + cell.startp, + cell.endp + ) in + Cons (element, stack next cell.state) + ) - state: 'state; + let stack env : element stream = + stack env.stack env.current - (* The semantic value associated with the chunk of input that this cell - represents. *) + (* As explained above, the function [top] allows access to the top stack + element only if the stack is nonempty, i.e., only if the current state + is not an initial state. *) - semv: 'semantic_value; + let top env : element option = + let cell = env.stack in + let next = cell.next in + if next == cell then + None + else + Some (Element (env.current, cell.semv, cell.startp, cell.endp)) - (* The start and end positions of the chunk of input that this cell - represents. *) + (* [equal] compares the stacks for physical equality, and compares the + current states via their numbers (this seems cleaner than using OCaml's + polymorphic equality). *) - startp: Lexing.position; - endp: Lexing.position; + (* The two fields that are not compared by [equal], namely [error] and + [triple], are overwritten by the function [discard], which handles + [InputNeeded] checkpoints. Thus, if [equal env1 env2] holds, then the + checkpoints [input_needed env1] and [input_needed env2] are + equivalent: they lead the parser to behave in the same way. *) - (* The next cell down in the stack. If this is a self-pointer, then this - cell is the sentinel, and the stack is conceptually empty. *) + let equal env1 env2 = + env1.stack == env2.stack && + number env1.current = number env2.current - next: ('state, 'semantic_value) stack; + let current_state_number env = + number env.current -} + (* ------------------------------------------------------------------------ *) -(* --------------------------------------------------------------------------- *) + (* Access to the position of the lookahead token. *) -(* A parsing environment contains all of the parser's state (except for the - current program point). *) + let positions { triple = (_, startp, endp); _ } = + startp, endp -type ('state, 'semantic_value, 'token) env = { + (* ------------------------------------------------------------------------ *) - (* If this flag is true, then the first component of [env.triple] should - be ignored, as it has been logically overwritten with the [error] - pseudo-token. *) + (* Access to information about default reductions. *) - error: bool; + (* This can be a function of states, or a function of environments. + We offer both. *) - (* The last token that was obtained from the lexer, together with its start - and end positions. Warning: before the first call to the lexer has taken - place, a dummy (and possibly invalid) token is stored here. *) + (* Instead of a Boolean result, we could return a [production option]. + However, we would have to explicitly test whether [prod] is a start + production, and in that case, return [None], I suppose. Indeed, we + have decided not to expose the start productions. *) - triple: 'token * Lexing.position * Lexing.position; + let state_has_default_reduction (state : _ lr1state) : bool = + T.default_reduction state + (fun _env _prod -> true) + (fun _env -> false) + () - (* The stack. In [CodeBackend], it is passed around on its own, - whereas, here, it is accessed via the environment. *) + let env_has_default_reduction env = + state_has_default_reduction env.current - stack: ('state, 'semantic_value) stack; + (* ------------------------------------------------------------------------ *) - (* The current state. In [CodeBackend], it is passed around on its - own, whereas, here, it is accessed via the environment. *) + (* The following functions work at the level of environments (as opposed to + checkpoints). The function [pop] causes the automaton to go back into the + past, pretending that the last input symbol has never been read. The + function [force_reduction] causes the automaton to re-interpret the past, + by recognizing the right-hand side of a production and reducing this + production. The function [feed] causes the automaton to progress into the + future by pretending that a (terminal or nonterminal) symbol has been + read. *) - current: 'state; + (* The function [feed] would ideally be defined here. However, for this + function to be type-safe, the GADT ['a symbol] is needed. For this + reason, we move its definition to [InspectionTableInterpreter], where + the inspection API is available. *) -} + (* [pop] pops one stack cell. It cannot go wrong. *) -(* --------------------------------------------------------------------------- *) + let pop (env : 'a env) : 'a env option = + let cell = env.stack in + let next = cell.next in + if next == cell then + (* The stack is empty. *) + None + else + (* The stack is nonempty. Pop off one cell. *) + Some { env with stack = next; current = cell.state } -(* This signature describes the parameters that must be supplied to the LR - engine. *) + (* [force_reduction] is analogous to [reduce], except that it does not + continue by calling [run env] or [initiate env]. Instead, it returns + [env] to the user. *) -module type TABLE = sig + (* [force_reduction] is dangerous insofar as it executes a semantic action. + This semantic action could have side effects: nontermination, state, + exceptions, input/output, etc. *) - (* The type of automaton states. *) + let force_reduction prod (env : 'a env) : 'a env = + (* Check if this reduction is permitted. This check is REALLY important. + The stack must have the correct shape: that is, it must be sufficiently + high, and must contain semantic values of appropriate types, otherwise + the semantic action will crash and burn. *) + (* We currently check whether the current state is WILLING to reduce this + production (i.e., there is a reduction action in the action table row + associated with this state), whereas it would be more liberal to check + whether this state is CAPABLE of reducing this production (i.e., the + stack has an appropriate shape). We currently have no means of + performing such a check. *) + if not (T.may_reduce env.current prod) then + invalid_arg "force_reduction: this reduction is not permitted in this state" + else begin + (* We do not expose the start productions to the user, so this cannot be + a start production. Hence, it has a semantic action. *) + assert (not (T.is_start prod)); + (* Invoke the semantic action. *) + let stack = T.semantic_action prod env in + (* Perform a goto transition. *) + let current = T.goto_prod stack.state prod in + { env with stack; current } + end - type state + (* The environment manipulation functions -- [pop] and [force_reduction] + above, plus [feed] -- manipulate the automaton's stack and current state, + but do not affect the automaton's lookahead symbol. When the function + [input_needed] is used to go back from an environment to a checkpoint + (and therefore, resume normal parsing), the lookahead symbol is clobbered + anyway, since the only action that the user can take is to call [offer]. + So far, so good. One problem, though, is that this call to [offer] may + well place the automaton in a configuration of a state [s] and a + lookahead symbol [t] that is normally unreachable. Also, perhaps the + state [s] is a state where an input symbol normally is never demanded, so + this [InputNeeded] checkpoint is fishy. There does not seem to be a deep + problem here, but, when programming an error recovery strategy, one + should pay some attention to this issue. Ideally, perhaps, one should use + [input_needed] only in a state [s] where an input symbol is normally + demanded, that is, a state [s] whose incoming symbol is a terminal symbol + and which does not have a default reduction on [#]. *) - (* States are numbered. *) + let input_needed (env : 'a env) : 'a checkpoint = + InputNeeded env - val number: state -> int + (* The following functions are compositions of [top] and [pop]. *) - (* The type of tokens. These can be thought of as real tokens, that is, - tokens returned by the lexer. They carry a semantic value. This type - does not include the [error] pseudo-token. *) + let rec pop_many i env = + if i = 0 then + Some env + else match pop env with + | None -> + None + | Some env -> + pop_many (i - 1) env - type token + let get i env = + match pop_many i env with + | None -> + None + | Some env -> + top env - (* The type of terminal symbols. These can be thought of as integer codes. - They do not carry a semantic value. This type does include the [error] - pseudo-token. *) +end +end +module ErrorReports = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - type terminal +(* -------------------------------------------------------------------------- *) - (* The type of nonterminal symbols. *) +(* A two-place buffer stores zero, one, or two elements. *) - type nonterminal +type 'a content = +| Zero +| One of 'a +| Two of 'a * (* most recent: *) 'a - (* The type of semantic values. *) +type 'a buffer = + 'a content ref - type semantic_value +(* [update buffer x] pushes [x] into [buffer], causing the buffer to slide. *) - (* A token is conceptually a pair of a (non-[error]) terminal symbol and - a semantic value. The following two functions are the pair projections. *) +let update buffer x = + buffer := + match !buffer, x with + | Zero, _ -> + One x + | One x1, x2 + | Two (_, x1), x2 -> + Two (x1, x2) - val token2terminal: token -> terminal - val token2value: token -> semantic_value - - (* Even though the [error] pseudo-token is not a real token, it is a - terminal symbol. Furthermore, for regularity, it must have a semantic - value. *) - - val error_terminal: terminal - val error_value: semantic_value - - (* [foreach_terminal] allows iterating over all terminal symbols. *) - - val foreach_terminal: (terminal -> 'a -> 'a) -> 'a -> 'a - - (* The type of productions. *) - - type production - - val production_index: production -> int - val find_production: int -> production - - (* If a state [s] has a default reduction on production [prod], then, upon - entering [s], the automaton should reduce [prod] without consulting the - lookahead token. The following function allows determining which states - have default reductions. *) +(* [show f buffer] prints the contents of the buffer. The function [f] is + used to print an element. *) - (* Instead of returning a value of a sum type -- either [DefRed prod], or - [NoDefRed] -- it accepts two continuations, and invokes just one of - them. This mechanism allows avoiding a memory allocation. *) +let show f buffer : string = + match !buffer with + | Zero -> + (* The buffer cannot be empty. If we have read no tokens, + we cannot have detected a syntax error. *) + assert false + | One invalid -> + (* It is unlikely, but possible, that we have read just one token. *) + Printf.sprintf "before '%s'" (f invalid) + | Two (valid, invalid) -> + (* In the most likely case, we have read two tokens. *) + Printf.sprintf "after '%s' and before '%s'" (f valid) (f invalid) - val default_reduction: - state -> - ('env -> production -> 'answer) -> - ('env -> 'answer) -> - 'env -> 'answer +(* [last buffer] returns the last element of the buffer (that is, the invalid + token). *) - (* An LR automaton can normally take three kinds of actions: shift, reduce, - or fail. (Acceptance is a particular case of reduction: it consists in - reducing a start production.) *) +let last buffer = + match !buffer with + | Zero -> + (* The buffer cannot be empty. If we have read no tokens, + we cannot have detected a syntax error. *) + assert false + | One invalid + | Two (_, invalid) -> + invalid - (* There are two variants of the shift action. [shift/discard s] instructs - the automaton to discard the current token, request a new one from the - lexer, and move to state [s]. [shift/nodiscard s] instructs it to move to - state [s] without requesting a new token. This instruction should be used - when [s] has a default reduction on [#]. See [CodeBackend.gettoken] for - details. *) +(* [wrap buffer lexer] *) - (* This is the automaton's action table. It maps a pair of a state and a - terminal symbol to an action. *) +open Lexing - (* Instead of returning a value of a sum type -- one of shift/discard, - shift/nodiscard, reduce, or fail -- this function accepts three - continuations, and invokes just one them. This mechanism allows avoiding - a memory allocation. *) +let wrap lexer = + let buffer = ref Zero in + buffer, + fun lexbuf -> + let token = lexer lexbuf in + update buffer (lexbuf.lex_start_p, lexbuf.lex_curr_p); + token - (* In summary, the parameters to [action] are as follows: +(* -------------------------------------------------------------------------- *) +end +module Printers = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - - the first two parameters, a state and a terminal symbol, are used to - look up the action table; +module Make + (I : IncrementalEngine.EVERYTHING) + (User : sig + val print: string -> unit + val print_symbol: I.xsymbol -> unit + val print_element: (I.element -> unit) option + end) += struct - - the next parameter is the semantic value associated with the above - terminal symbol; it is not used, only passed along to the shift - continuation, as explained below; + let arrow = " -> " + let dot = "." + let space = " " + let newline = "\n" - - the shift continuation expects an environment; a flag that tells - whether to discard the current token; the terminal symbol that - is being shifted; its semantic value; and the target state of - the transition; + open User + open I - - the reduce continuation expects an environment and a production; + (* Printing a list of symbols. An optional dot is printed at offset + [i] into the list [symbols], if this offset lies between [0] and + the length of the list (included). *) - - the fail continuation expects an environment; + let rec print_symbols i symbols = + if i = 0 then begin + print dot; + print space; + print_symbols (-1) symbols + end + else begin + match symbols with + | [] -> + () + | symbol :: symbols -> + print_symbol symbol; + print space; + print_symbols (i - 1) symbols + end - - the last parameter is the environment; it is not used, only passed - along to the selected continuation. *) + (* Printing an element as a symbol. *) - val action: - state -> - terminal -> - semantic_value -> - ('env -> bool -> terminal -> semantic_value -> state -> 'answer) -> - ('env -> production -> 'answer) -> - ('env -> 'answer) -> - 'env -> 'answer + let print_element_as_symbol element = + match element with + | Element (s, _, _, _) -> + print_symbol (X (incoming_symbol s)) - (* This is the automaton's goto table. This table maps a pair of a state - and a nonterminal symbol to a new state. By extension, it also maps a - pair of a state and a production to a new state. *) + (* Some of the functions that follow need an element printer. They use + [print_element] if provided by the user; otherwise they use + [print_element_as_symbol]. *) - (* The function [goto_nt] can be applied to [s] and [nt] ONLY if the state - [s] has an outgoing transition labeled [nt]. Otherwise, its result is - undefined. Similarly, the call [goto_prod prod s] is permitted ONLY if - the state [s] has an outgoing transition labeled with the nonterminal - symbol [lhs prod]. The function [maybe_goto_nt] involves an additional - dynamic check and CAN be called even if there is no outgoing transition. *) + let print_element = + match print_element with + | Some print_element -> + print_element + | None -> + print_element_as_symbol - val goto_nt : state -> nonterminal -> state - val goto_prod: state -> production -> state - val maybe_goto_nt: state -> nonterminal -> state option + (* Printing a stack as a list of symbols. Stack bottom on the left, + stack top on the right. *) - (* [is_start prod] tells whether the production [prod] is a start production. *) + let rec print_stack env = + match top env, pop env with + | Some element, Some env -> + print_stack env; + print space; + print_element element + | _, _ -> + () - val is_start: production -> bool + let print_stack env = + print_stack env; + print newline - (* By convention, a semantic action is responsible for: + (* Printing an item. *) - 1. fetching whatever semantic values and positions it needs off the stack; + let print_item (prod, i) = + print_symbol (lhs prod); + print arrow; + print_symbols i (rhs prod); + print newline - 2. popping an appropriate number of cells off the stack, as dictated - by the length of the right-hand side of the production; + (* Printing a list of symbols (public version). *) - 3. computing a new semantic value, as well as new start and end positions; + let print_symbols symbols = + print_symbols (-1) symbols - 4. pushing a new stack cell, which contains the three values - computed in step 3; + (* Printing a production (without a dot). *) - 5. returning the new stack computed in steps 2 and 4. + let print_production prod = + print_item (prod, -1) - Point 1 is essentially forced upon us: if semantic values were fetched - off the stack by this interpreter, then the calling convention for - semantic actions would be variadic: not all semantic actions would have - the same number of arguments. The rest follows rather naturally. *) + (* Printing the current LR(1) state. *) - (* Semantic actions are allowed to raise [Error]. *) + let print_current_state env = + print "Current LR(1) state: "; + match top env with + | None -> + print ""; (* TEMPORARY unsatisfactory *) + print newline + | Some (Element (current, _, _, _)) -> + print (string_of_int (number current)); + print newline; + List.iter print_item (items current) - exception Error + let print_env env = + print_stack env; + print_current_state env; + print newline - type semantic_action = - (state, semantic_value, token) env -> (state, semantic_value) stack +end +end +module InfiniteArray = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - val semantic_action: production -> semantic_action +(** This module implements infinite arrays, that is, arrays that grow + transparently upon demand. *) - (* [may_reduce state prod] tests whether the state [state] is capable of - reducing the production [prod]. This function is currently costly and - is not used by the core LR engine. It is used in the implementation - of certain functions, such as [force_reduction], which allow the engine - to be driven programmatically. *) +type 'a t = { + default: 'a; + mutable table: 'a array; + mutable extent: int; (* the index of the greatest [set] ever, plus one *) + } - val may_reduce: state -> production -> bool +let default_size = + 16384 (* must be non-zero *) - (* The LR engine requires a number of hooks, which are used for logging. *) +let make x = { + default = x; + table = Array.make default_size x; + extent = 0; +} - (* The comments below indicate the conventional messages that correspond - to these hooks in the code-based back-end; see [CodeBackend]. *) +let rec new_length length i = + if i < length then + length + else + new_length (2 * length) i - (* If the flag [log] is false, then the logging functions are not called. - If it is [true], then they are called. *) +let ensure a i = + assert (0 <= i); + let table = a.table in + let length = Array.length table in + if i >= length then begin + let table' = Array.make (new_length (2 * length) i) a.default in + Array.blit table 0 table' 0 length; + a.table <- table' + end - val log : bool +let get a i = + ensure a i; + Array.unsafe_get a.table (i) - module Log : sig +let set a i x = + ensure a i; + Array.unsafe_set a.table (i) x; + if a.extent <= i then + a.extent <- i + 1 - (* State %d: *) +let extent a = + a.extent - val state: state -> unit +let domain a = + Array.sub a.table 0 a.extent - (* Shifting () to state *) +end +module PackedIntArray = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) - val shift: terminal -> state -> unit +(* A packed integer array is represented as a pair of an integer [k] and + a string [s]. The integer [k] is the number of bits per integer that we + use. The string [s] is just an array of bits, which is read in 8-bit + chunks. *) - (* Reducing a production should be logged either as a reduction - event (for regular productions) or as an acceptance event (for - start productions). *) +(* The ocaml programming language treats string literals and array literals + in slightly different ways: the former are statically allocated, while + the latter are dynamically allocated. (This is rather arbitrary.) In the + context of Menhir's table-based back-end, where compact, immutable + integer arrays are needed, ocaml strings are preferable to ocaml arrays. *) - (* Reducing production / Accepting *) +type t = + int * string - val reduce_or_accept: production -> unit +(* The magnitude [k] of an integer [v] is the number of bits required + to represent [v]. It is rounded up to the nearest power of two, so + that [k] divides [Sys.word_size]. *) - (* Lookahead token is now (-) *) +let magnitude (v : int) = + if v < 0 then + Sys.word_size + else + let rec check k max = (* [max] equals [2^k] *) + if (max <= 0) || (v < max) then + k + (* if [max] just overflew, then [v] requires a full ocaml + integer, and [k] is the number of bits in an ocaml integer + plus one, that is, [Sys.word_size]. *) + else + check (2 * k) (max * max) + in + check 1 2 - val lookahead_token: terminal -> Lexing.position -> Lexing.position -> unit +(* [pack a] turns an array of integers into a packed integer array. *) - (* Initiating error handling *) +(* Because the sign bit is the most significant bit, the magnitude of + any negative number is the word size. In other words, [pack] does + not achieve any space savings as soon as [a] contains any negative + numbers, even if they are ``small''. *) - val initiating_error_handling: unit -> unit +let pack (a : int array) : t = - (* Resuming error handling *) + let m = Array.length a in - val resuming_error_handling: unit -> unit + (* Compute the maximum magnitude of the array elements. This tells + us how many bits per element we are going to use. *) - (* Handling error in state *) + let k = + Array.fold_left (fun k v -> + max k (magnitude v) + ) 1 a + in - val handling_error: state -> unit + (* Because access to ocaml strings is performed on an 8-bit basis, + two cases arise. If [k] is less than 8, then we can pack multiple + array entries into a single character. If [k] is greater than 8, + then we must use multiple characters to represent a single array + entry. *) - end + if k <= 8 then begin -end + (* [w] is the number of array entries that we pack in a character. *) -(* --------------------------------------------------------------------------- *) + assert (8 mod k = 0); + let w = 8 / k in -(* This signature describes the monolithic (traditional) LR engine. *) + (* [n] is the length of the string that we allocate. *) -(* In this interface, the parser controls the lexer. *) + let n = + if m mod w = 0 then + m / w + else + m / w + 1 + in -module type MONOLITHIC_ENGINE = sig + let s = + Bytes.create n + in - type state + (* Define a reader for the source array. The reader might run off + the end if [w] does not divide [m]. *) - type token + let i = ref 0 in + let next () = + let ii = !i in + if ii = m then + 0 (* ran off the end, pad with zeroes *) + else + let v = a.(ii) in + i := ii + 1; + v + in - type semantic_value + (* Fill up the string. *) - (* An entry point to the engine requires a start state, a lexer, and a lexing - buffer. It either succeeds and produces a semantic value, or fails and - raises [Error]. *) + for j = 0 to n - 1 do + let c = ref 0 in + for _x = 1 to w do + c := (!c lsl k) lor next() + done; + Bytes.set s j (Char.chr !c) + done; - exception Error + (* Done. *) - val entry: - state -> - (Lexing.lexbuf -> token) -> - Lexing.lexbuf -> - semantic_value + k, Bytes.unsafe_to_string s -end + end + else begin (* k > 8 *) -(* --------------------------------------------------------------------------- *) + (* [w] is the number of characters that we use to encode an array entry. *) -(* The following signatures describe the incremental LR engine. *) + assert (k mod 8 = 0); + let w = k / 8 in -(* First, see [INCREMENTAL_ENGINE] in the file [IncrementalEngine.ml]. *) + (* [n] is the length of the string that we allocate. *) -(* The [start] function is set apart because we do not wish to publish - it as part of the generated [parser.mli] file. Instead, the table - back-end will publish specialized versions of it, with a suitable - type cast. *) + let n = + m * w + in -module type INCREMENTAL_ENGINE_START = sig + let s = + Bytes.create n + in - (* [start] is an entry point. It requires a start state and a start position - and begins the parsing process. If the lexer is based on an OCaml lexing - buffer, the start position should be [lexbuf.lex_curr_p]. [start] produces - a checkpoint, which usually will be an [InputNeeded] checkpoint. (It could - be [Accepted] if this starting state accepts only the empty word. It could - be [Rejected] if this starting state accepts no word at all.) It does not - raise any exception. *) + (* Fill up the string. *) - (* [start s pos] should really produce a checkpoint of type ['a checkpoint], - for a fixed ['a] that depends on the state [s]. We cannot express this, so - we use [semantic_value checkpoint], which is safe. The table back-end uses - [Obj.magic] to produce safe specialized versions of [start]. *) + for i = 0 to m - 1 do + let v = ref a.(i) in + for x = 1 to w do + Bytes.set s ((i + 1) * w - x) (Char.chr (!v land 255)); + v := !v lsr 8 + done + done; - type state - type semantic_value - type 'a checkpoint + (* Done. *) - val start: - state -> - Lexing.position -> - semantic_value checkpoint + k, Bytes.unsafe_to_string s -end + end -(* --------------------------------------------------------------------------- *) +(* Access to a string. *) -(* This signature describes the LR engine, which combines the monolithic - and incremental interfaces. *) +let read (s : string) (i : int) : int = + Char.code (String.unsafe_get s i) -module type ENGINE = sig +(* [get1 t i] returns the integer stored in the packed array [t] at index [i]. + It assumes (and does not check) that the array's bit width is [1]. The + parameter [t] is just a string. *) - include MONOLITHIC_ENGINE +let get1 (s : string) (i : int) : int = + let c = read s (i lsr 3) in + let c = c lsr ((lnot i) land 0b111) in + let c = c land 0b1 in + c - include IncrementalEngine.INCREMENTAL_ENGINE - with type token := token - and type 'a lr1state = state (* useful for us; hidden from the end user *) +(* [get t i] returns the integer stored in the packed array [t] at index [i]. *) - include INCREMENTAL_ENGINE_START - with type state := state - and type semantic_value := semantic_value - and type 'a checkpoint := 'a checkpoint +(* Together, [pack] and [get] satisfy the following property: if the index [i] + is within bounds, then [get (pack a) i] equals [a.(i)]. *) -end -end -module Engine : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -open EngineTypes +let get ((k, s) : t) (i : int) : int = + match k with + | 1 -> + get1 s i + | 2 -> + let c = read s (i lsr 2) in + let c = c lsr (2 * ((lnot i) land 0b11)) in + let c = c land 0b11 in + c + | 4 -> + let c = read s (i lsr 1) in + let c = c lsr (4 * ((lnot i) land 0b1)) in + let c = c land 0b1111 in + c + | 8 -> + read s i + | 16 -> + let j = 2 * i in + (read s j) lsl 8 + read s (j + 1) + | _ -> + assert (k = 32); (* 64 bits unlikely, not supported *) + let j = 4 * i in + (((read s j lsl 8) + read s (j + 1)) lsl 8 + read s (j + 2)) lsl 8 + read s (j + 3) -(* The LR parsing engine. *) +(* [unflatten1 (n, data) i j] accesses the two-dimensional bitmap + represented by [(n, data)] at indices [i] and [j]. The integer + [n] is the width of the bitmap; the string [data] is the second + component of the packed array obtained by encoding the table as + a one-dimensional array. *) -module Make (T : TABLE) -: ENGINE - with type state = T.state - and type token = T.token - and type semantic_value = T.semantic_value - and type production = T.production - and type 'a env = (T.state, T.semantic_value, T.token) EngineTypes.env +let unflatten1 (n, data) i j = + get1 data (n * i + j) -(* We would prefer not to expose the definition of the type [env]. - However, it must be exposed because some of the code in the - inspection API needs access to the engine's internals; see - [InspectionTableInterpreter]. Everything would be simpler if - --inspection was always ON, but that would lead to bigger parse - tables for everybody. *) end -module ErrorReports : sig +module RowDisplacement = struct (******************************************************************************) (* *) (* Menhir *) @@ -44628,213 +39630,253 @@ module ErrorReports : sig (* *) (******************************************************************************) -(* -------------------------------------------------------------------------- *) - -(* The following functions help keep track of the start and end positions of - the last two tokens in a two-place buffer. This is used to nicely display - where a syntax error took place. *) - -type 'a buffer +(* This module compresses a two-dimensional table, where some values + are considered insignificant, via row displacement. *) -(* [wrap lexer] returns a pair of a new (initially empty) buffer and a lexer - which internally relies on [lexer] and updates [buffer] on the fly whenever - a token is demanded. *) +(* This idea reportedly appears in Aho and Ullman's ``Principles + of Compiler Design'' (1977). It is evaluated in Tarjan and Yao's + ``Storing a Sparse Table'' (1979) and in Dencker, Dürre, and Heuft's + ``Optimization of Parser Tables for Portable Compilers'' (1984). *) -open Lexing +(* A compressed table is represented as a pair of arrays. The + displacement array is an array of offsets into the data array. *) -val wrap: - (lexbuf -> 'token) -> - (position * position) buffer * (lexbuf -> 'token) +type 'a table = + int array * (* displacement *) + 'a array (* data *) -(* [show f buffer] prints the contents of the buffer, producing a string that - is typically of the form "after '%s' and before '%s'". The function [f] is - used to print an element. The buffer MUST be nonempty. *) +(* In a natural version of this algorithm, displacements would be greater + than (or equal to) [-n]. However, in the particular setting of Menhir, + both arrays are intended to be compressed with [PackedIntArray], which + does not efficiently support negative numbers. For this reason, we are + careful not to produce negative displacements. *) -val show: ('a -> string) -> 'a buffer -> string +(* In order to avoid producing negative displacements, we simply use the + least significant bit as the sign bit. This is implemented by [encode] + and [decode] below. *) -(* [last buffer] returns the last element of the buffer. The buffer MUST be - nonempty. *) +(* One could also think, say, of adding [n] to every displacement, so as + to ensure that all displacements are nonnegative. This would work, but + would require [n] to be published, for use by the decoder. *) -val last: 'a buffer -> 'a +let encode (displacement : int) : int = + if displacement >= 0 then + displacement lsl 1 + else + (-displacement) lsl 1 + 1 -(* -------------------------------------------------------------------------- *) -end -module Printers : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) +let decode (displacement : int) : int = + if displacement land 1 = 0 then + displacement lsr 1 + else + -(displacement lsr 1) -(* This module is part of MenhirLib. *) +(* It is reasonable to assume that, as matrices grow large, their + density becomes low, i.e., they have many insignificant entries. + As a result, it is important to work with a sparse data structure + for rows. We internally represent a row as a list of its + significant entries, where each entry is a pair of a [j] index and + an element. *) -module Make +type 'a row = + (int * 'a) list - (I : IncrementalEngine.EVERYTHING) +(* [compress equal insignificant dummy m n t] turns the two-dimensional table + [t] into a compressed table. The parameter [equal] is equality of data + values. The parameter [wildcard] tells which data values are insignificant, + and can thus be overwritten with other values. The parameter [dummy] is + used to fill holes in the data array. [m] and [n] are the integer + dimensions of the table [t]. *) - (User : sig +let compress + (equal : 'a -> 'a -> bool) + (insignificant : 'a -> bool) + (dummy : 'a) + (m : int) (n : int) + (t : 'a array array) + : 'a table = - (* [print s] is supposed to send the string [s] to some output channel. *) + (* Be defensive. *) - val print: string -> unit + assert (Array.length t = m); + assert begin + for i = 0 to m - 1 do + assert (Array.length t.(i) = n) + done; + true + end; - (* [print_symbol s] is supposed to print a representation of the symbol [s]. *) + (* This turns a row-as-array into a row-as-sparse-list. The row is + accompanied by its index [i] and by its rank (the number of its + significant entries, that is, the length of the row-as-a-list. *) - val print_symbol: I.xsymbol -> unit + let sparse (i : int) (line : 'a array) : int * int * 'a row (* index, rank, row *) = - (* [print_element e] is supposed to print a representation of the element [e]. - This function is optional; if it is not provided, [print_element_as_symbol] - (defined below) is used instead. *) + let rec loop (j : int) (rank : int) (row : 'a row) = + if j < 0 then + i, rank, row + else + let x = line.(j) in + if insignificant x then + loop (j - 1) rank row + else + loop (j - 1) (1 + rank) ((j, x) :: row) + in - val print_element: (I.element -> unit) option + loop (n - 1) 0 [] - end) + in -: sig + (* Construct an array of all rows, together with their index and rank. *) - open I + let rows : (int * int * 'a row) array = (* index, rank, row *) + Array.mapi sparse t + in - (* Printing a list of symbols. *) + (* Sort this array by decreasing rank. This does not have any impact + on correctness, but reportedly improves compression. The + intuitive idea is that rows with few significant elements are + easy to fit, so they should be inserted last, after the problem + has become quite constrained by fitting the heavier rows. This + heuristic is attributed to Ziegler. *) - val print_symbols: xsymbol list -> unit + Array.fast_sort (fun (_, rank1, _) (_, rank2, _) -> + compare rank2 rank1 + ) rows; - (* Printing an element as a symbol. This prints just the symbol - that this element represents; nothing more. *) + (* Allocate a one-dimensional array of displacements. *) - val print_element_as_symbol: element -> unit + let displacement : int array = + Array.make m 0 + in - (* Printing a stack as a list of elements. This function needs an element - printer. It uses [print_element] if provided by the user; otherwise - it uses [print_element_as_symbol]. (Ending with a newline.) *) + (* Allocate a one-dimensional, infinite array of values. Indices + into this array are written [k]. *) - val print_stack: 'a env -> unit + let data : 'a InfiniteArray.t = + InfiniteArray.make dummy + in - (* Printing an item. (Ending with a newline.) *) + (* Determine whether [row] fits at offset [k] within the current [data] + array, up to extension of this array. *) - val print_item: item -> unit + (* Note that this check always succeeds when [k] equals the length of + the [data] array. Indeed, the loop is then skipped. This property + guarantees the termination of the recursive function [fit] below. *) - (* Printing a production. (Ending with a newline.) *) + let fits k (row : 'a row) : bool = - val print_production: production -> unit + let d = InfiniteArray.extent data in - (* Printing the current LR(1) state. The current state is first displayed - as a number; then the list of its LR(0) items is printed. (Ending with - a newline.) *) + let rec loop = function + | [] -> + true + | (j, x) :: row -> - val print_current_state: 'a env -> unit + (* [x] is a significant element. *) - (* Printing a summary of the stack and current state. This function just - calls [print_stack] and [print_current_state] in succession. *) + (* By hypothesis, [k + j] is nonnegative. If it is greater than or + equal to the current length of the data array, stop -- the row + fits. *) - val print_env: 'a env -> unit + assert (k + j >= 0); -end -end -module InfiniteArray : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + if k + j >= d then + true -(** This module implements infinite arrays. **) -type 'a t + (* We now know that [k + j] is within bounds of the data + array. Check whether it is compatible with the element [y] found + there. If it is, continue. If it isn't, stop -- the row does not + fit. *) -(** [make x] creates an infinite array, where every slot contains [x]. **) -val make: 'a -> 'a t + else + let y = InfiniteArray.get data (k + j) in + if insignificant y || equal x y then + loop row + else + false -(** [get a i] returns the element contained at offset [i] in the array [a]. - Slots are numbered 0 and up. **) -val get: 'a t -> int -> 'a + in + loop row -(** [set a i x] sets the element contained at offset [i] in the array - [a] to [x]. Slots are numbered 0 and up. **) -val set: 'a t -> int -> 'a -> unit + in -(** [extent a] is the length of an initial segment of the array [a] - that is sufficiently large to contain all [set] operations ever - performed. In other words, all elements beyond that segment have - the default value. *) -val extent: 'a t -> int + (* Find the leftmost position where a row fits. *) -(** [domain a] is a fresh copy of an initial segment of the array [a] - whose length is [extent a]. *) -val domain: 'a t -> 'a array -end -module PackedIntArray : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + (* If the leftmost significant element in this row is at offset [j], + then we can hope to fit as far left as [-j] -- so this element + lands at offset [0] in the data array. *) -(* A packed integer array is represented as a pair of an integer [k] and - a string [s]. The integer [k] is the number of bits per integer that we - use. The string [s] is just an array of bits, which is read in 8-bit - chunks. *) + (* Note that displacements may be negative. This means that, for + insignificant elements, accesses to the data array could fail: they could + be out of bounds, either towards the left or towards the right. This is + not a problem, as long as [get] is invoked only at significant + elements. *) -(* The ocaml programming language treats string literals and array literals - in slightly different ways: the former are statically allocated, while - the latter are dynamically allocated. (This is rather arbitrary.) In the - context of Menhir's table-based back-end, where compact, immutable - integer arrays are needed, ocaml strings are preferable to ocaml arrays. *) + let rec fit k row : int = + if fits k row then + k + else + fit (k + 1) row + in -type t = - int * string + let fit row = + match row with + | [] -> + 0 (* irrelevant *) + | (j, _) :: _ -> + fit (-j) row + in -(* [pack a] turns an array of integers into a packed integer array. *) + (* Write [row] at (compatible) offset [k]. *) -(* Because the sign bit is the most significant bit, the magnitude of - any negative number is the word size. In other words, [pack] does - not achieve any space savings as soon as [a] contains any negative - numbers, even if they are ``small''. *) + let rec write k = function + | [] -> + () + | (j, x) :: row -> + InfiniteArray.set data (k + j) x; + write k row + in -val pack: int array -> t + (* Iterate over the sorted array of rows. Fit and write each row at + the leftmost compatible offset. Update the displacement table. *) -(* [get t i] returns the integer stored in the packed array [t] at index [i]. *) + Array.iter (fun (i, _, row) -> + let k = fit row in (* if [row] has leading insignificant elements, then [k] can be negative *) + write k row; + displacement.(i) <- encode k + ) rows; -(* Together, [pack] and [get] satisfy the following property: if the index [i] - is within bounds, then [get (pack a) i] equals [a.(i)]. *) + (* Return the compressed tables. *) -val get: t -> int -> int + displacement, InfiniteArray.domain data -(* [get1 t i] returns the integer stored in the packed array [t] at index [i]. - It assumes (and does not check) that the array's bit width is [1]. The - parameter [t] is just a string. *) +(* [get ct i j] returns the value found at indices [i] and [j] in the + compressed table [ct]. This function call is permitted only if the + value found at indices [i] and [j] in the original table is + significant -- otherwise, it could fail abruptly. *) -val get1: string -> int -> int +(* Together, [compress] and [get] have the property that, if the value + found at indices [i] and [j] in an uncompressed table [t] is + significant, then [get (compress t) i j] is equal to that value. *) -(* [unflatten1 (n, data) i j] accesses the two-dimensional bitmap - represented by [(n, data)] at indices [i] and [j]. The integer - [n] is the width of the bitmap; the string [data] is the second - component of the packed array obtained by encoding the table as - a one-dimensional array. *) +let get (displacement, data) i j = + assert (0 <= i && i < Array.length displacement); + let k = decode displacement.(i) in + assert (0 <= k + j && k + j < Array.length data); + (* failure of this assertion indicates an attempt to access an + insignificant element that happens to be mapped out of the bounds + of the [data] array. *) + data.(k + j) -val unflatten1: int * string -> int -> int -> int +(* [getget] is a variant of [get] which only requires read access, + via accessors, to the two components of the table. *) +let getget get_displacement get_data (displacement, data) i j = + let k = decode (get_displacement displacement i) in + get_data data (k + j) end -module RowDisplacement : sig +module LinearizedArray = struct (******************************************************************************) (* *) (* Menhir *) @@ -44848,57 +39890,75 @@ module RowDisplacement : sig (* *) (******************************************************************************) -(* This module compresses a two-dimensional table, where some values - are considered insignificant, via row displacement. *) +(* The [entry] array contains offsets into the [data] array. It has [n+1] + elements if the original (unencoded) array has [n] elements. The value + of [entry.(n)] is the length of the [data] array. This convention is + natural and allows avoiding a special case. *) -(* A compressed table is represented as a pair of arrays. The - displacement array is an array of offsets into the data array. *) +type 'a t = + (* data: *) 'a array * + (* entry: *) int array -type 'a table = - int array * (* displacement *) - 'a array (* data *) +let make (a : 'a array array) : 'a t = + let n = Array.length a in + (* Build the entry array. *) + let size = ref 0 in + let entry = Array.init (n + 1) (fun i -> + let s = !size in + if i < n then + size := s + Array.length a.(i); + s + ) in + assert (entry.(n) = !size); + (* Build the data array. *) + let i = ref 0 + and j = ref 0 in + let data = Array.init !size (fun _ -> + while !j = Array.length a.(!i) do + i := !i + 1; + j := 0; + done; + let x = a.(!i).(!j) in + j := !j + 1; + x + ) in + data, entry -(* [compress equal insignificant dummy m n t] turns the two-dimensional table - [t] into a compressed table. The parameter [equal] is equality of data - values. The parameter [wildcard] tells which data values are insignificant, - and can thus be overwritten with other values. The parameter [dummy] is - used to fill holes in the data array. [m] and [n] are the integer - dimensions of the table [t]. *) +let length ((_, entry) : 'a t) : int = + Array.length entry -val compress: - ('a -> 'a -> bool) -> - ('a -> bool) -> - 'a -> - int -> int -> - 'a array array -> - 'a table +let row_length ((_, entry) : 'a t) i : int = + entry.(i + 1) - entry.(i) -(* [get ct i j] returns the value found at indices [i] and [j] in the - compressed table [ct]. This function call is permitted only if the - value found at indices [i] and [j] in the original table is - significant -- otherwise, it could fail abruptly. *) +let row_length_via get_entry i = + get_entry (i + 1) - get_entry i -(* Together, [compress] and [get] have the property that, if the value - found at indices [i] and [j] in an uncompressed table [t] is - significant, then [get (compress t) i j] is equal to that value. *) +let read ((data, entry) as la : 'a t) i j : 'a = + assert (0 <= j && j < row_length la i); + data.(entry.(i) + j) -val get: - 'a table -> - int -> int -> - 'a +let read_via get_data get_entry i j = + assert (0 <= j && j < row_length_via get_entry i); + get_data (get_entry i + j) -(* [getget] is a variant of [get] which only requires read access, - via accessors, to the two components of the table. *) +let write ((data, entry) as la : 'a t) i j (v : 'a) : unit = + assert (0 <= j && j < row_length la i); + data.(entry.(i) + j) <- v -val getget: - ('displacement -> int -> int) -> - ('data -> int -> 'a) -> - 'displacement * 'data -> - int -> int -> - 'a +let rec read_interval_via get_data i j = + if i = j then + [] + else + get_data i :: read_interval_via get_data (i + 1) j + +let read_row_via get_data get_entry i = + read_interval_via get_data (get_entry i) (get_entry (i + 1)) + +let read_row ((data, entry) : 'a t) i : 'a list = + read_row_via (Array.get data) (Array.get entry) i end -module LinearizedArray : sig +module TableFormat = struct (******************************************************************************) (* *) (* Menhir *) @@ -44912,86 +39972,12 @@ module LinearizedArray : sig (* *) (******************************************************************************) -(* An array of arrays (of possibly different lengths!) can be ``linearized'', - i.e., encoded as a data array (by concatenating all of the little arrays) - and an entry array (which contains offsets into the data array). *) +(* This signature defines the format of the parse tables. It is used as + an argument to [TableInterpreter.Make]. *) -type 'a t = - (* data: *) 'a array * - (* entry: *) int array +module type TABLES = sig -(* [make a] turns the array of arrays [a] into a linearized array. *) - -val make: 'a array array -> 'a t - -(* [read la i j] reads the linearized array [la] at indices [i] and [j]. - Thus, [read (make a) i j] is equivalent to [a.(i).(j)]. *) - -val read: 'a t -> int -> int -> 'a - -(* [write la i j v] writes the value [v] into the linearized array [la] - at indices [i] and [j]. *) - -val write: 'a t -> int -> int -> 'a -> unit - -(* [length la] is the number of rows of the array [la]. Thus, [length (make - a)] is equivalent to [Array.length a]. *) - -val length: 'a t -> int - -(* [row_length la i] is the length of the row at index [i] in the linearized - array [la]. Thus, [row_length (make a) i] is equivalent to [Array.length - a.(i)]. *) - -val row_length: 'a t -> int -> int - -(* [read_row la i] reads the row at index [i], producing a list. Thus, - [read_row (make a) i] is equivalent to [Array.to_list a.(i)]. *) - -val read_row: 'a t -> int -> 'a list - -(* The following variants read the linearized array via accessors - [get_data : int -> 'a] and [get_entry : int -> int]. *) - -val row_length_via: - (* get_entry: *) (int -> int) -> - (* i: *) int -> - int - -val read_via: - (* get_data: *) (int -> 'a) -> - (* get_entry: *) (int -> int) -> - (* i: *) int -> - (* j: *) int -> - 'a - -val read_row_via: - (* get_data: *) (int -> 'a) -> - (* get_entry: *) (int -> int) -> - (* i: *) int -> - 'a list - -end -module TableFormat : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* This signature defines the format of the parse tables. It is used as - an argument to [TableInterpreter.Make]. *) - -module type TABLES = sig - - (* This is the parser's type of tokens. *) + (* This is the parser's type of tokens. *) type token @@ -45111,7 +40097,7 @@ module type TABLES = sig end end -module InspectionTableFormat : sig +module InspectionTableFormat = struct (******************************************************************************) (* *) (* Menhir *) @@ -45187,7 +40173,7 @@ module type TABLES = sig end end -module InspectionTableInterpreter : sig +module InspectionTableInterpreter = struct (******************************************************************************) (* *) (* Menhir *) @@ -45201,24 +40187,34 @@ module InspectionTableInterpreter : sig (* *) (******************************************************************************) -(* This functor is invoked inside the generated parser, in [--table] mode. It - produces no code! It simply constructs the types [symbol] and [xsymbol] on - top of the generated types [terminal] and [nonterminal]. *) +(* -------------------------------------------------------------------------- *) + +(* The type functor. *) module Symbols (T : sig type 'a terminal type 'a nonterminal -end) +end) = struct -: IncrementalEngine.SYMBOLS - with type 'a terminal := 'a T.terminal - and type 'a nonterminal := 'a T.nonterminal + open T -(* This functor is invoked inside the generated parser, in [--table] mode. It - constructs the inspection API on top of the inspection tables described in - [InspectionTableFormat]. *) + (* This should be the only place in the whole library (and generator!) + where these types are defined. *) + + type 'a symbol = + | T : 'a terminal -> 'a symbol + | N : 'a nonterminal -> 'a symbol + + type xsymbol = + | X : 'a symbol -> xsymbol + +end + +(* -------------------------------------------------------------------------- *) + +(* The code functor. *) module Make (TT : TableFormat.TABLES) @@ -45231,145 +40227,258 @@ module Make (E : sig type 'a env = (ET.state, ET.semantic_value, ET.token) EngineTypes.env end) += struct -: IncrementalEngine.INSPECTION - with type 'a terminal := 'a IT.terminal - and type 'a nonterminal := 'a IT.nonterminal - and type 'a lr1state := 'a IT.lr1state - and type production := int - and type 'a env := 'a E.env -end -module TableInterpreter : sig -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + (* Including [IT] is an easy way of inheriting the definitions of the types + [symbol] and [xsymbol]. *) -(* This module provides a thin decoding layer for the generated tables, thus - providing an API that is suitable for use by [Engine.Make]. It is part of - [MenhirLib]. *) + include IT -(* The exception [Error] is declared within the generated parser. This is - preferable to pre-declaring it here, as it ensures that each parser gets - its own, distinct [Error] exception. This is consistent with the code-based - back-end. *) + (* This auxiliary function decodes a packed linearized array, as created by + [TableBackend.linearize_and_marshal1]. Here, we read a row all at once. *) -(* This functor is invoked by the generated parser. *) + let read_packed_linearized + (data, entry : PackedIntArray.t * PackedIntArray.t) (i : int) : int list + = + LinearizedArray.read_row_via + (PackedIntArray.get data) + (PackedIntArray.get entry) + i -module MakeEngineTable - (T : TableFormat.TABLES) -: EngineTypes.TABLE - with type state = int - and type token = T.token - and type semantic_value = Obj.t - and type production = int - and type terminal = int - and type nonterminal = int -end -module StaticVersion : sig -val require_20170712 : unit -end + (* This auxiliary function decodes a symbol. The encoding was done by + [encode_symbol] or [encode_symbol_option] in the table back-end. *) -end = struct -#1 "menhirLib.ml" -module General = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + let decode_symbol (symbol : int) : IT.xsymbol = + (* If [symbol] is 0, then we have no symbol. This could mean e.g. + that the function [incoming_symbol] has been applied to an + initial state. In principle, this cannot happen. *) + assert (symbol > 0); + (* The low-order bit distinguishes terminal and nonterminal symbols. *) + let kind = symbol land 1 in + let symbol = symbol lsr 1 in + if kind = 0 then + IT.terminal (symbol - 1) + else + IT.nonterminal symbol -(* --------------------------------------------------------------------------- *) + (* These auxiliary functions convert a symbol to its integer code. For speed + and for convenience, we use an unsafe type cast. This relies on the fact + that the data constructors of the [terminal] and [nonterminal] GADTs are + declared in an order that reflects their internal code. In the case of + nonterminal symbols, we add [start] to account for the presence of the + start symbols. *) -(* Lists. *) + let n2i (nt : 'a IT.nonterminal) : int = + let answer = TT.start + Obj.magic nt in + (* For safety, check that the above cast produced a correct result. *) + assert (IT.nonterminal answer = X (N nt)); + answer -let rec take n xs = - match n, xs with - | 0, _ - | _, [] -> - [] - | _, (x :: xs as input) -> - let xs' = take (n - 1) xs in - if xs == xs' then - input - else - x :: xs' + let t2i (t : 'a IT.terminal) : int = + let answer = Obj.magic t in + (* For safety, check that the above cast produced a correct result. *) + assert (IT.terminal answer = X (T t)); + answer -let rec drop n xs = - match n, xs with - | 0, _ -> - xs - | _, [] -> - [] - | _, _ :: xs -> - drop (n - 1) xs + (* Ordering functions. *) -let rec uniq1 cmp x ys = - match ys with - | [] -> - [] - | y :: ys -> - if cmp x y = 0 then - uniq1 compare x ys - else - y :: uniq1 cmp y ys + let compare_terminals t1 t2 = + (* Subtraction is safe because overflow is impossible. *) + t2i t1 - t2i t2 -let uniq cmp xs = - match xs with - | [] -> - [] - | x :: xs -> - x :: uniq1 cmp x xs + let compare_nonterminals nt1 nt2 = + (* Subtraction is safe because overflow is impossible. *) + n2i nt1 - n2i nt2 -let weed cmp xs = - uniq cmp (List.sort cmp xs) + let compare_symbols symbol1 symbol2 = + match symbol1, symbol2 with + | X (T _), X (N _) -> + -1 + | X (N _), X (T _) -> + 1 + | X (T t1), X (T t2) -> + compare_terminals t1 t2 + | X (N nt1), X (N nt2) -> + compare_nonterminals nt1 nt2 -(* --------------------------------------------------------------------------- *) + let compare_productions prod1 prod2 = + (* Subtraction is safe because overflow is impossible. *) + prod1 - prod2 -(* Streams. *) + let compare_items (prod1, index1) (prod2, index2) = + let c = compare_productions prod1 prod2 in + (* Subtraction is safe because overflow is impossible. *) + if c <> 0 then c else index1 - index2 -type 'a stream = - 'a head Lazy.t + (* The function [incoming_symbol] goes through the tables [IT.lr0_core] and + [IT.lr0_incoming]. This yields a representation of type [xsymbol], out of + which we strip the [X] quantifier, so as to get a naked symbol. This last + step is ill-typed and potentially dangerous. It is safe only because this + function is used at type ['a lr1state -> 'a symbol], which forces an + appropriate choice of ['a]. *) -and 'a head = - | Nil - | Cons of 'a * 'a stream + let incoming_symbol (s : 'a IT.lr1state) : 'a IT.symbol = + let core = PackedIntArray.get IT.lr0_core s in + let symbol = decode_symbol (PackedIntArray.get IT.lr0_incoming core) in + match symbol with + | IT.X symbol -> + Obj.magic symbol -(* The length of a stream. *) + (* The function [lhs] reads the table [TT.lhs] and uses [IT.nonterminal] + to decode the symbol. *) -let rec length xs = - match Lazy.force xs with - | Nil -> - 0 - | Cons (_, xs) -> - 1 + length xs + let lhs prod = + IT.nonterminal (PackedIntArray.get TT.lhs prod) -(* Folding over a stream. *) + (* The function [rhs] reads the table [IT.rhs] and uses [decode_symbol] + to decode the symbol. *) -let rec foldr f xs accu = - match Lazy.force xs with - | Nil -> + let rhs prod = + List.map decode_symbol (read_packed_linearized IT.rhs prod) + + (* The function [items] maps the LR(1) state [s] to its LR(0) core, + then uses [core] as an index into the table [IT.lr0_items]. The + items are then decoded by the function [export] below, which is + essentially a copy of [Item.export]. *) + + type item = + int * int + + let export t : item = + (t lsr 7, t mod 128) + + let items s = + (* Map [s] to its LR(0) core. *) + let core = PackedIntArray.get IT.lr0_core s in + (* Now use [core] to look up the table [IT.lr0_items]. *) + List.map export (read_packed_linearized IT.lr0_items core) + + (* The function [nullable] maps the nonterminal symbol [nt] to its + integer code, which it uses to look up the array [IT.nullable]. + This yields 0 or 1, which we map back to a Boolean result. *) + + let decode_bool i = + assert (i = 0 || i = 1); + i = 1 + + let nullable nt = + decode_bool (PackedIntArray.get1 IT.nullable (n2i nt)) + + (* The function [first] maps the symbols [nt] and [t] to their integer + codes, which it uses to look up the matrix [IT.first]. *) + + let first nt t = + decode_bool (PackedIntArray.unflatten1 IT.first (n2i nt) (t2i t)) + + let xfirst symbol t = + match symbol with + | X (T t') -> + compare_terminals t t' = 0 + | X (N nt) -> + first nt t + + (* The function [foreach_terminal] exploits the fact that the + first component of [TT.error] is [Terminal.n - 1], i.e., the + number of terminal symbols, including [error] but not [#]. *) + + let rec foldij i j f accu = + if i = j then accu - | Cons (x, xs) -> - f x (foldr f xs accu) + else + foldij (i + 1) j f (f i accu) + + let foreach_terminal f accu = + let n, _ = TT.error in + foldij 0 n (fun i accu -> + f (IT.terminal i) accu + ) accu + + let foreach_terminal_but_error f accu = + let n, _ = TT.error in + foldij 0 n (fun i accu -> + if i = TT.error_terminal then + accu + else + f (IT.terminal i) accu + ) accu + + (* ------------------------------------------------------------------------ *) + + (* The following is the implementation of the function [feed]. This function + is logically part of the LR engine, so it would be nice if it were placed + in the module [Engine], but it must be placed here because, to ensure + type safety, its arguments must be a symbol of type ['a symbol] and a + semantic value of type ['a]. The type ['a symbol] is not available in + [Engine]. It is available here. *) + + open EngineTypes + open ET + open E + + (* [feed] fails if the current state does not have an outgoing transition + labeled with the desired symbol. This check is carried out at runtime. *) + + let feed_failure () = + invalid_arg "feed: outgoing transition does not exist" + + (* Feeding a nonterminal symbol [nt]. Here, [nt] has type [nonterminal], + which is a synonym for [int], and [semv] has type [semantic_value], + which is a synonym for [Obj.t]. This type is unsafe, because pushing + a semantic value of arbitrary type into the stack can later cause a + semantic action to crash and burn. The function [feed] is given a safe + type below. *) + + let feed_nonterminal + (nt : nonterminal) startp (semv : semantic_value) endp (env : 'b env) + : 'b env + = + (* Check if the source state has an outgoing transition labeled [nt]. + This is done by consulting the [goto] table. *) + let source = env.current in + match ET.maybe_goto_nt source nt with + | None -> + feed_failure() + | Some target -> + (* Push a new cell onto the stack, containing the identity of the state + that we are leaving. The semantic value [semv] and positions [startp] + and [endp] contained in the new cell are provided by the caller. *) + let stack = { state = source; semv; startp; endp; next = env.stack } in + (* Move to the target state. *) + { env with stack; current = target } + + let reduce _env _prod = feed_failure() + let initiate _env = feed_failure() + + let feed_terminal + (terminal : terminal) startp (semv : semantic_value) endp (env : 'b env) + : 'b env + = + (* Check if the source state has an outgoing transition labeled [terminal]. + This is done by consulting the [action] table. *) + let source = env.current in + ET.action source terminal semv + (fun env _please_discard _terminal semv target -> + (* There is indeed a transition toward the state [target]. + Push a new cell onto the stack and move to the target state. *) + let stack = { state = source; semv; startp; endp; next = env.stack } in + { env with stack; current = target } + ) reduce initiate env + + (* The type assigned to [feed] ensures that the type of the semantic value + [semv] is appropriate: it must be the semantic-value type of the symbol + [symbol]. *) + + let feed (symbol : 'a symbol) startp (semv : 'a) endp env = + let semv : semantic_value = Obj.repr semv in + match symbol with + | N nt -> + feed_nonterminal (n2i nt) startp semv endp env + | T terminal -> + feed_terminal (t2i terminal) startp semv endp env end -module Convert = struct +end +module TableInterpreter = struct (******************************************************************************) (* *) (* Menhir *) @@ -45383,4714 +40492,2157 @@ module Convert = struct (* *) (******************************************************************************) -(* An ocamlyacc-style, or Menhir-style, parser requires access to - the lexer, which must be parameterized with a lexing buffer, and - to the lexing buffer itself, where it reads position information. *) - -(* This traditional API is convenient when used with ocamllex, but - inelegant when used with other lexer generators. *) +module MakeEngineTable (T : TableFormat.TABLES) = struct -type ('token, 'semantic_value) traditional = - (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value + type state = + int -(* This revised API is independent of any lexer generator. Here, the - parser only requires access to the lexer, and the lexer takes no - parameters. The tokens returned by the lexer may contain position - information. *) + let number s = s -type ('token, 'semantic_value) revised = - (unit -> 'token) -> 'semantic_value + type token = + T.token -(* --------------------------------------------------------------------------- *) + type terminal = + int -(* Converting a traditional parser, produced by ocamlyacc or Menhir, - into a revised parser. *) + type nonterminal = + int -(* A token of the revised lexer is essentially a triple of a token - of the traditional lexer (or raw token), a start position, and - and end position. The three [get] functions are accessors. *) + type semantic_value = + Obj.t -(* We do not require the type ['token] to actually be a triple type. - This enables complex applications where it is a record type with - more than three fields. It also enables simple applications where - positions are of no interest, so ['token] is just ['raw_token] - and [get_startp] and [get_endp] return dummy positions. *) + let token2terminal = + T.token2terminal -let traditional2revised - (get_raw_token : 'token -> 'raw_token) - (get_startp : 'token -> Lexing.position) - (get_endp : 'token -> Lexing.position) - (parser : ('raw_token, 'semantic_value) traditional) -: ('token, 'semantic_value) revised = + let token2value = + T.token2value - (* Accept a revised lexer. *) + let error_terminal = + T.error_terminal - fun (lexer : unit -> 'token) -> + let error_value = + Obj.repr () - (* Create a dummy lexing buffer. *) + (* The function [foreach_terminal] exploits the fact that the + first component of [T.error] is [Terminal.n - 1], i.e., the + number of terminal symbols, including [error] but not [#]. *) - let lexbuf : Lexing.lexbuf = - Lexing.from_string "" - in + (* There is similar code in [InspectionTableInterpreter]. The + code there contains an additional conversion of the type + [terminal] to the type [xsymbol]. *) - (* Wrap the revised lexer as a traditional lexer. A traditional - lexer returns a raw token and updates the fields of the lexing - buffer with new positions, which will be read by the parser. *) + let rec foldij i j f accu = + if i = j then + accu + else + foldij (i + 1) j f (f i accu) - let lexer (lexbuf : Lexing.lexbuf) : 'raw_token = - let token : 'token = lexer() in - lexbuf.Lexing.lex_start_p <- get_startp token; - lexbuf.Lexing.lex_curr_p <- get_endp token; - get_raw_token token - in + let foreach_terminal f accu = + let n, _ = T.error in + foldij 0 n (fun i accu -> + f i accu + ) accu - (* Invoke the traditional parser. *) + type production = + int - parser lexer lexbuf + (* In principle, only non-start productions are exposed to the user, + at type [production] or at type [int]. This is checked dynamically. *) + let non_start_production i = + assert (T.start <= i && i - T.start < Array.length T.semantic_action) -(* --------------------------------------------------------------------------- *) + let production_index i = + non_start_production i; + i -(* Converting a revised parser back to a traditional parser. *) + let find_production i = + non_start_production i; + i -let revised2traditional - (make_token : 'raw_token -> Lexing.position -> Lexing.position -> 'token) - (parser : ('token, 'semantic_value) revised) -: ('raw_token, 'semantic_value) traditional = + let default_reduction state defred nodefred env = + let code = PackedIntArray.get T.default_reduction state in + if code = 0 then + nodefred env + else + defred env (code - 1) - (* Accept a traditional lexer and a lexing buffer. *) + let is_start prod = + prod < T.start - fun (lexer : Lexing.lexbuf -> 'raw_token) (lexbuf : Lexing.lexbuf) -> + (* This auxiliary function helps access a compressed, two-dimensional + matrix, like the action and goto tables. *) - (* Wrap the traditional lexer as a revised lexer. *) + let unmarshal2 table i j = + RowDisplacement.getget + PackedIntArray.get + PackedIntArray.get + table + i j - let lexer () : 'token = - let token : 'raw_token = lexer lexbuf in - make_token token lexbuf.Lexing.lex_start_p lexbuf.Lexing.lex_curr_p - in + let action state terminal value shift reduce fail env = + match PackedIntArray.unflatten1 T.error state terminal with + | 1 -> + let action = unmarshal2 T.action state terminal in + let opcode = action land 0b11 + and param = action lsr 2 in + if opcode >= 0b10 then + (* 0b10 : shift/discard *) + (* 0b11 : shift/nodiscard *) + let please_discard = (opcode = 0b10) in + shift env please_discard terminal value param + else + (* 0b01 : reduce *) + (* 0b00 : cannot happen *) + reduce env param + | c -> + assert (c = 0); + fail env - (* Invoke the revised parser. *) + let goto_nt state nt = + let code = unmarshal2 T.goto state nt in + (* code = 1 + state *) + code - 1 - parser lexer + let goto_prod state prod = + goto_nt state (PackedIntArray.get T.lhs prod) -(* --------------------------------------------------------------------------- *) + let maybe_goto_nt state nt = + let code = unmarshal2 T.goto state nt in + (* If [code] is 0, there is no outgoing transition. + If [code] is [1 + state], there is a transition towards [state]. *) + assert (0 <= code); + if code = 0 then None else Some (code - 1) -(* Simplified versions of the above, where concrete triples are used. *) + exception Error = + T.Error -module Simplified = struct + type semantic_action = + (state, semantic_value, token) EngineTypes.env -> + (state, semantic_value) EngineTypes.stack - let traditional2revised parser = - traditional2revised - (fun (token, _, _) -> token) - (fun (_, startp, _) -> startp) - (fun (_, _, endp) -> endp) - parser + let semantic_action prod = + (* Indexing into the array [T.semantic_action] is off by [T.start], + because the start productions do not have entries in this array. *) + T.semantic_action.(prod - T.start) - let revised2traditional parser = - revised2traditional - (fun token startp endp -> (token, startp, endp)) - parser + (* [may_reduce state prod] tests whether the state [state] is capable of + reducing the production [prod]. This information could be determined + in constant time if we were willing to create a bitmap for it, but + that would take up a lot of space. Instead, we obtain this information + by iterating over a line in the action table. This is costly, but this + function is not normally used by the LR engine anyway; it is supposed + to be used only by programmers who wish to develop error recovery + strategies. *) -end -end -module IncrementalEngine = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) + (* In the future, if desired, we could memoize this function, so as + to pay the cost in (memory) space only if and where this function + is actually used. We could also replace [foreach_terminal] with a + function [exists_terminal] which stops as soon as the accumulator + is [true]. *) -type position = Lexing.position + let may_reduce state prod = + (* Test if there is a default reduction of [prod]. *) + default_reduction state + (fun () prod' -> prod = prod') + (fun () -> + (* If not, then for each terminal [t], ... *) + foreach_terminal (fun t accu -> + accu || + (* ... test if there is a reduction of [prod] on [t]. *) + action state t () + (* shift: *) (fun () _ _ () _ -> false) + (* reduce: *) (fun () prod' -> prod = prod') + (* fail: *) (fun () -> false) + () + ) false + ) + () -open General + (* If [T.trace] is [None], then the logging functions do nothing. *) -(* This signature describes the incremental LR engine. *) + let log = + match T.trace with Some _ -> true | None -> false -(* In this mode, the user controls the lexer, and the parser suspends - itself when it needs to read a new token. *) + module Log = struct -module type INCREMENTAL_ENGINE = sig + open Printf - type token + let state state = + match T.trace with + | Some _ -> + fprintf stderr "State %d:\n%!" state + | None -> + () - (* A value of type [production] is (an index for) a production. The start - productions (which do not exist in an \mly file, but are constructed by - Menhir internally) are not part of this type. *) + let shift terminal state = + match T.trace with + | Some (terminals, _) -> + fprintf stderr "Shifting (%s) to state %d\n%!" terminals.(terminal) state + | None -> + () - type production + let reduce_or_accept prod = + match T.trace with + | Some (_, productions) -> + fprintf stderr "%s\n%!" productions.(prod) + | None -> + () - (* The type ['a checkpoint] represents an intermediate or final state of the - parser. An intermediate checkpoint is a suspension: it records the parser's - current state, and allows parsing to be resumed. The parameter ['a] is - the type of the semantic value that will eventually be produced if the - parser succeeds. *) + let lookahead_token token startp endp = + match T.trace with + | Some (terminals, _) -> + fprintf stderr "Lookahead token is now %s (%d-%d)\n%!" + terminals.(token) + startp.Lexing.pos_cnum + endp.Lexing.pos_cnum + | None -> + () - (* [Accepted] and [Rejected] are final checkpoints. [Accepted] carries a - semantic value. *) + let initiating_error_handling () = + match T.trace with + | Some _ -> + fprintf stderr "Initiating error handling\n%!" + | None -> + () - (* [InputNeeded] is an intermediate checkpoint. It means that the parser wishes - to read one token before continuing. *) + let resuming_error_handling () = + match T.trace with + | Some _ -> + fprintf stderr "Resuming error handling\n%!" + | None -> + () - (* [Shifting] is an intermediate checkpoint. It means that the parser is taking - a shift transition. It exposes the state of the parser before and after - the transition. The Boolean parameter tells whether the parser intends to - request a new token after this transition. (It always does, except when - it is about to accept.) *) + let handling_error state = + match T.trace with + | Some _ -> + fprintf stderr "Handling error in state %d\n%!" state + | None -> + () - (* [AboutToReduce] is an intermediate checkpoint. It means that the parser is - about to perform a reduction step. It exposes the parser's current - state as well as the production that is about to be reduced. *) + end - (* [HandlingError] is an intermediate checkpoint. It means that the parser has - detected an error and is currently handling it, in several steps. *) +end +end +module StaticVersion = struct +let require_20170712 = () +end - (* A value of type ['a env] represents a configuration of the automaton: - current state, stack, lookahead token, etc. The parameter ['a] is the - type of the semantic value that will eventually be produced if the parser - succeeds. *) +end +module Lexer_warning += struct +#1 "lexer_warning.ml" +let warn_latin1 lexbuf = + Location.prerr_warning (Location.curr lexbuf) + (Warnings.Deprecated "ISO-Latin1 characters in identifiers") +;; - (* In normal operation, the parser works with checkpoints: see the functions - [offer] and [resume]. However, it is also possible to work directly with - environments (see the functions [pop], [force_reduction], and [feed]) and - to reconstruct a checkpoint out of an environment (see [input_needed]). - This is considered advanced functionality; its purpose is to allow error - recovery strategies to be programmed by the user. *) +end +module Syntax_util += struct +#1 "syntax_util.ml" +open Ast_404 - type 'a env +open Asttypes +open Ast_mapper +open Parsetree +open Longident - type 'a checkpoint = private - | InputNeeded of 'a env - | Shifting of 'a env * 'a env * bool - | AboutToReduce of 'a env * production - | HandlingError of 'a env - | Accepted of 'a - | Rejected +(* Logic for handling special behavior that only happens if things break. We + use characters that will never appear in the printed output if actually + written in source code. The OCaml formatter will replace them with the escaped + versions When moving to a new formatter, the formatter may *not* escape these + an in that case we need the formatter to accept blacklists of characters to + escape, but more likely is that the new formatter allows us to do these kinds + of if-break logic without writing out special characters for post-processing. +*) +module TrailingCommaMarker = struct + (* TODO: You can detect failed parsings by *NOT* omitting the final comma *ever*. *) + (* A trailing comma will only be rendered if it is not immediately + * followed by a closing paren, bracket, or brace *) + let char = Char.chr 249 (* ˘ *) + let string = String.make 1 char +end +module OpenBraceMarker = struct + (* An open brace marker will only be rendered if it is immediately + * followed by a newline. This should NOT BE USED WITH + * anything but inline:(true, false) because the following will cause + * OpenBraceMarker to be replaced but not ClosedBraceMarker. + * let x = () => { + * whoops }; + *) + let char = Char.chr 174 (* « *) + let string = String.make 1 char +end +module ClosedBraceMarker = struct + (* An open brace marker will only be rendered if it is immediately + * preceeded by white space and a newline. This should NOT BE USED WITH + * anything but inline:(true, false) because the following will cause + * OpenBraceMarker to be replaced but not ClosedBraceMarker. + * let x = () => { + * whoops }; + *) + let char = Char.chr 175 (* » *) + let string = String.make 1 char +end - (* [offer] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [InputNeeded env]. [offer] expects the - old checkpoint as well as a new token and produces a new checkpoint. It does not - raise any exception. *) - val offer: - 'a checkpoint -> - token * position * position -> - 'a checkpoint +(** [is_prefixed prefix i str] checks if prefix is the prefix of str + * starting from position i + *) +let is_prefixed prefix str i = + let len = String.length prefix in + let j = ref 0 in + while !j < len && String.unsafe_get prefix !j = + String.unsafe_get str (i + !j) do + incr j + done; + (!j = len) - (* [resume] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [AboutToReduce (env, prod)] or - [HandlingError env]. [resume] expects the old checkpoint and produces a new - checkpoint. It does not raise any exception. *) +(** + * pick_while returns a tuple where first element is longest prefix (possibly empty) of the list of elements that satisfy p + * and second element is the remainder of the list + *) +let rec pick_while p = function + | [] -> [], [] + | hd::tl when p hd -> + let (satisfied, not_satisfied) = pick_while p tl in + hd :: satisfied, not_satisfied + | l -> ([], l) - val resume: - 'a checkpoint -> - 'a checkpoint - (* A token supplier is a function of no arguments which delivers a new token - (together with its start and end positions) every time it is called. *) +(** [find_substring sub str i] + returns the smallest [j >= i] such that [sub = str.[j..length sub - 1]] + raises [Not_found] if there is no such j + behavior is not defined if [sub] is the empty string +*) +let find_substring sub str i = + let len = String.length str - String.length sub in + let found = ref false and i = ref i in + while not !found && !i <= len do + if is_prefixed sub str !i then + found := true + else + incr i; + done; + if not !found then + raise Not_found; + !i - type supplier = - unit -> token * position * position +(** [replace_string old_str new_str str] replaces old_str to new_str in str *) +let replace_string old_str new_str str = + match find_substring old_str str 0 with + | exception Not_found -> str + | occurrence -> + let buffer = Buffer.create (String.length str + 15) in + let rec loop i j = + Buffer.add_substring buffer str i (j - i); + Buffer.add_string buffer new_str; + let i = j + String.length old_str in + match find_substring old_str str i with + | j -> loop i j + | exception Not_found -> + Buffer.add_substring buffer str i (String.length str - i) + in + loop 0 occurrence; + Buffer.contents buffer - (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) +(* This is lifted from https://github.com/bloomberg/bucklescript/blob/14d94bb9c7536b4c5f1208c8e8cc715ca002853d/jscomp/ext/ext_string.ml#L32 + Thanks @bobzhang and @hhugo! *) +let split_by ?(keep_empty=false) is_delim str = + let len = String.length str in + let rec loop acc last_pos pos = + if pos = -1 then + if last_pos = 0 && not keep_empty then + (* + {[ split " test_unsafe_obj_ffi_ppx.cmi" ~keep_empty:false ' ']} + *) + acc + else + String.sub str 0 last_pos :: acc + else + if is_delim str.[pos] then + let new_len = (last_pos - pos - 1) in + if new_len <> 0 || keep_empty then + let v = String.sub str (pos + 1) new_len in + loop ( v :: acc) + pos (pos - 1) + else loop acc pos (pos - 1) + else loop acc last_pos (pos - 1) + in + loop [] len (len - 1) - val lexer_lexbuf_to_supplier: - (Lexing.lexbuf -> token) -> - Lexing.lexbuf -> - supplier +let rec trim_right_idx str idx = + if idx = -1 then 0 + else + match String.get str idx with + | '\t' | ' ' | '\n' | '\r' -> trim_right_idx str (idx - 1) + | _ -> idx + 1 - (* The functions [offer] and [resume] are sufficient to write a parser loop. - One can imagine many variations (which is why we expose these functions - in the first place!). Here, we expose a few variations of the main loop, - ready for use. *) +let trim_right str = + let length = String.length str in + if length = 0 then "" + else + let index = trim_right_idx str (length - 1) in + if index = 0 then "" + else if index = length then + str + else String.sub str 0 index - (* [loop supplier checkpoint] begins parsing from [checkpoint], reading - tokens from [supplier]. It continues parsing until it reaches a - checkpoint of the form [Accepted v] or [Rejected]. In the former case, it - returns [v]. In the latter case, it raises the exception [Error]. *) - val loop: supplier -> 'a checkpoint -> 'a +let processLine line = + let rightTrimmed = trim_right line in + let trimmedLen = String.length rightTrimmed in + if trimmedLen = 0 then + rightTrimmed + else + let segments = + split_by + ~keep_empty:false + (fun c -> c = TrailingCommaMarker.char) + rightTrimmed in + (* Now we concat the portions back together without any trailing comma markers + - except we detect if there was a final trailing comma marker which we know + must be before a newline so we insert a regular comma. This achieves + "intelligent" trailing commas. *) + let hadTrailingCommaMarkerBeforeNewline = + String.get rightTrimmed (trimmedLen - 1) = TrailingCommaMarker.char + in + let almostEverything = String.concat "" segments in + if hadTrailingCommaMarkerBeforeNewline then + almostEverything ^ "," + else + almostEverything - (* [loop_handle succeed fail supplier checkpoint] begins parsing from - [checkpoint], reading tokens from [supplier]. It continues parsing until - it reaches a checkpoint of the form [Accepted v] or [HandlingError env] - (or [Rejected], but that should not happen, as [HandlingError _] will be - observed first). In the former case, it calls [succeed v]. In the latter - case, it calls [fail] with this checkpoint. It cannot raise [Error]. - This means that Menhir's traditional error-handling procedure (which pops - the stack until a state that can act on the [error] token is found) does - not get a chance to run. Instead, the user can implement her own error - handling code, in the [fail] continuation. *) +let processLineEndingsAndStarts str = + split_by ~keep_empty:true (fun x -> x = '\n') str + |> List.map processLine + |> String.concat "\n" + |> String.trim - val loop_handle: - ('a -> 'answer) -> - ('a checkpoint -> 'answer) -> - supplier -> 'a checkpoint -> 'answer +module StringMap = Map.Make (String) - (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair - of checkpoints to the failure continuation. - The first (and oldest) checkpoint is the last [InputNeeded] checkpoint that - was encountered before the error was detected. The second (and newest) - checkpoint is where the error was detected, as in [loop_handle]. Going back - to the first checkpoint can be thought of as undoing any reductions that - were performed after seeing the problematic token. (These reductions must - be default reductions or spurious reductions.) +(** Generate a suitable extension node for Merlin's consumption, + for the purposes of reporting a syntax error - only used + in recovery mode. + *) +let syntax_error_extension_node loc message = + let str = Location.mkloc "merlin.syntax-error" loc in + let payload = PStr [{ + pstr_loc = Location.none; + pstr_desc = + Pstr_eval ( + { + pexp_loc = Location.none; + pexp_desc = Pexp_constant (Parsetree.Pconst_string (message, None)); + pexp_attributes = []; + }, + [] + ); + }] + in + (str, payload) - [loop_handle_undo] must initially be applied to an [InputNeeded] checkpoint. - The parser's initial checkpoints satisfy this constraint. *) +(** Check to see if the string `s` is made up of `keyword` and zero or more + trailing `_` characters. *) +let potentially_conflicts_with ~keyword s = + let s_length = String.length s in + let keyword_length = String.length keyword in + (* It can't be a match if s is shorter than keyword *) + s_length >= keyword_length && ( + try + (* Ensure s starts with keyword... *) + for i = 0 to keyword_length - 1 do + if keyword.[i] <> s.[i] then raise Exit; + done; + (* ...and contains nothing else except trailing _ characters *) + for i = keyword_length to s_length - 1 do + if s.[i] <> '_' then raise Exit; + done; + (* If we've made it this far there's a potential conflict *) + true + with + | Exit -> false + ) - val loop_handle_undo: - ('a -> 'answer) -> - ('a checkpoint -> 'a checkpoint -> 'answer) -> - supplier -> 'a checkpoint -> 'answer +(** Add/remove an appropriate suffix when mangling potential keywords *) +let string_add_suffix x = x ^ "_" +let string_drop_suffix x = String.sub x 0 (String.length x - 1) - (* [shifts checkpoint] assumes that [checkpoint] has been obtained by - submitting a token to the parser. It runs the parser from [checkpoint], - through an arbitrary number of reductions, until the parser either - accepts this token (i.e., shifts) or rejects it (i.e., signals an error). - If the parser decides to shift, then [Some env] is returned, where [env] - is the parser's state just before shifting. Otherwise, [None] is - returned. *) +(** What do these *_swap functions do? Here's an example: Reason code uses `!` + for logical not, while ocaml uses `not`. So, for converting between reason + and ocaml syntax, ocaml `not` converts to `!`, reason `!` converts to + `not`. - (* It is desirable that the semantic actions be side-effect free, or that - their side-effects be harmless (replayable). *) + In more complicated cases where a reserved keyword exists in one syntax but + not the other, these functions translate any potentially conflicting + identifier into the same identifier with a suffix attached, or remove the + suffix when converting back. Two examples: - val shifts: 'a checkpoint -> 'a env option + reason to ocaml: - (* The function [acceptable] allows testing, after an error has been - detected, which tokens would have been accepted at this point. It is - implemented using [shifts]. Its argument should be an [InputNeeded] - checkpoint. *) - - (* For completeness, one must undo any spurious reductions before carrying out - this test -- that is, one must apply [acceptable] to the FIRST checkpoint - that is passed by [loop_handle_undo] to its failure continuation. *) - - (* This test causes some semantic actions to be run! The semantic actions - should be side-effect free, or their side-effects should be harmless. *) - - (* The position [pos] is used as the start and end positions of the - hypothetical token, and may be picked up by the semantic actions. We - suggest using the position where the error was detected. *) - - val acceptable: 'a checkpoint -> token -> position -> bool - - (* The abstract type ['a lr1state] describes the non-initial states of the - LR(1) automaton. The index ['a] represents the type of the semantic value - associated with this state's incoming symbol. *) + pub: invalid in reason to begin with + pub_: pub + pub__: pub_ - type 'a lr1state + ocaml to reason: - (* The states of the LR(1) automaton are numbered (from 0 and up). *) + pub: pub_ + pub_: pub__ + pub__: pub___ - val number: _ lr1state -> int + ===== - (* Productions are numbered. *) + reason to ocaml: - (* [find_production i] requires the index [i] to be valid. Use with care. *) + match: match_ + match_: match__ + match__: match___ - val production_index: production -> int - val find_production: int -> production + ocaml to reason: - (* An element is a pair of a non-initial state [s] and a semantic value [v] - associated with the incoming symbol of this state. The idea is, the value - [v] was pushed onto the stack just before the state [s] was entered. Thus, - for some type ['a], the state [s] has type ['a lr1state] and the value [v] - has type ['a]. In other words, the type [element] is an existential type. *) + match: invalid in ocaml to begin with + match_: match + match__: match_ +*) - type element = - | Element: 'a lr1state * 'a * position * position -> element +let reason_to_ml_swap = function + | "!" -> "not" + | "^" -> "!" + | "++" -> "^" + | "===" -> "==" + | "==" -> "=" + (* ===\/ and !==\/ are not representable in OCaml but + * representable in Reason + *) + | "\\!==" -> "!==" + | "\\===" -> "===" + | "!=" -> "<>" + | "!==" -> "!=" + | x when ( + potentially_conflicts_with ~keyword:"match" x + || potentially_conflicts_with ~keyword:"method" x + || potentially_conflicts_with ~keyword:"private" x) -> string_add_suffix x + | x when ( + potentially_conflicts_with ~keyword:"switch_" x + || potentially_conflicts_with ~keyword:"pub_" x + || potentially_conflicts_with ~keyword:"pri_" x) -> string_drop_suffix x + | everything_else -> everything_else - (* The parser's stack is (or, more precisely, can be viewed as) a stream of - elements. The type [stream] is defined by the module [General]. *) +let ml_to_reason_swap = function + | "not" -> "!" + | "!" -> "^" + | "^" -> "++" + | "==" -> "===" + | "=" -> "==" + (* ===\/ and !==\/ are not representable in OCaml but + * representable in Reason + *) + | "!==" -> "\\!==" + | "===" -> "\\===" + | "<>" -> "!=" + | "!=" -> "!==" + | x when ( + potentially_conflicts_with ~keyword:"match_" x + || potentially_conflicts_with ~keyword:"method_" x + || potentially_conflicts_with ~keyword:"private_" x) -> string_drop_suffix x + | x when ( + potentially_conflicts_with ~keyword:"switch" x + || potentially_conflicts_with ~keyword:"pub" x + || potentially_conflicts_with ~keyword:"pri" x) -> string_add_suffix x + | everything_else -> everything_else - (* As of 2017/03/31, the types [stream] and [stack] and the function [stack] - are DEPRECATED. They might be removed in the future. An alternative way - of inspecting the stack is via the functions [top] and [pop]. *) +let swap_txt map txt = + if StringMap.mem txt map then + StringMap.find txt map + else + txt - type stack = (* DEPRECATED *) - element stream +(** identifier_mapper maps all identifiers in an AST with a mapping function f + this is used by swap_operator_mapper right below, to traverse the whole AST + and swapping the symbols listed above. + *) +let identifier_mapper f super = +{ super with + expr = begin fun mapper expr -> + let expr = + match expr with + | {pexp_desc=Pexp_ident ({txt} as id); + pexp_loc; + pexp_attributes} -> + let swapped = match txt with + | Lident s -> Lident (f s) + | Ldot(longPrefix, s) -> Ldot(longPrefix, f s) + | Lapply (y,s) -> Lapply (y, s) + in + {expr with pexp_desc=Pexp_ident ({id with txt=swapped})} + | _ -> expr + in + super.expr mapper expr + end; + pat = begin fun mapper pat -> + let pat = + match pat with + | {ppat_desc=Ppat_var ({txt} as id); + ppat_loc; + ppat_attributes} -> + {pat with ppat_desc=Ppat_var ({id with txt=(f txt)})} + | _ -> pat + in + super.pat mapper pat + end; + signature_item = begin fun mapper signatureItem -> + let signatureItem = + match signatureItem with + | {psig_desc=Psig_value ({pval_name} as name); + psig_loc} -> + {signatureItem with psig_desc=Psig_value ({name with pval_name=({pval_name with txt=(f name.pval_name.txt)})})} + | _ -> signatureItem + in + super.signature_item mapper signatureItem + end; +} - (* This is the parser's stack, a stream of elements. This stream is empty if - the parser is in an initial state; otherwise, it is non-empty. The LR(1) - automaton's current state is the one found in the top element of the - stack. *) +(** escape_stars_slashes_mapper escapes all stars and slases in an AST *) +let escape_stars_slashes_mapper = + let escape_stars_slashes str = + if String.contains str '/' then + replace_string "/*" "/\\*" @@ + replace_string "*/" "*\\/" @@ + replace_string "//" "/\\/" @@ + str + else + str + in + identifier_mapper escape_stars_slashes - val stack: 'a env -> stack (* DEPRECATED *) +(* To be used in parser, transform a token into an ast node with different identifier + *) +let reason_to_ml_swap_operator_mapper = identifier_mapper reason_to_ml_swap - (* [top env] returns the parser's top stack element. The state contained in - this stack element is the current state of the automaton. If the stack is - empty, [None] is returned. In that case, the current state of the - automaton must be an initial state. *) +(* To be used in printer, transform an ast node into a token with different identifier + *) +let ml_to_reason_swap_operator_mapper = identifier_mapper ml_to_reason_swap - val top: 'a env -> element option +(* attribute_equals tests an attribute is txt + *) +let attribute_equals to_compare = function + | ({txt; _}, _) -> txt = to_compare - (* [pop_many i env] pops [i] cells off the automaton's stack. This is done - via [i] successive invocations of [pop]. Thus, [pop_many 1] is [pop]. The - index [i] must be nonnegative. The time complexity is O(i). *) +(* attribute_exists tests if an attribute exists in a list + *) +let attribute_exists txt attributes = List.exists (attribute_equals txt) attributes - val pop_many: int -> 'a env -> 'a env option +(* conflicted_attributes tests if both attribute1 and attribute2 + * exist + *) +let attributes_conflicted attribute1 attribute2 attributes = + attribute_exists attribute1 attributes && + attribute_exists attribute2 attributes - (* [get i env] returns the parser's [i]-th stack element. The index [i] is - 0-based: thus, [get 0] is [top]. If [i] is greater than or equal to the - number of elements in the stack, [None] is returned. The time complexity - is O(i). *) +(* normalized_attributes removes attribute from a list of attributes + *) +let normalized_attributes attribute attributes = + List.filter (fun x -> not (attribute_equals attribute x)) attributes - val get: int -> 'a env -> element option +(* apply_mapper family applies an ast_mapper to an ast *) +let apply_mapper_to_structure s mapper = mapper.structure mapper s +let apply_mapper_to_signature s mapper = mapper.signature mapper s +let apply_mapper_to_type s mapper = mapper.typ mapper s +let apply_mapper_to_expr s mapper = mapper.expr mapper s +let apply_mapper_to_pattern s mapper = mapper.pat mapper s - (* [current_state_number env] is (the integer number of) the automaton's - current state. This works even if the automaton's stack is empty, in - which case the current state is an initial state. This number can be - passed as an argument to a [message] function generated by [menhir - --compile-errors]. *) +let apply_mapper_to_toplevel_phrase toplevel_phrase mapper = + match toplevel_phrase with + | Ptop_def x -> Ptop_def (apply_mapper_to_structure x mapper) + | x -> x - val current_state_number: 'a env -> int +let apply_mapper_to_use_file use_file mapper = + List.map (fun x -> apply_mapper_to_toplevel_phrase x mapper) use_file - (* [equal env1 env2] tells whether the parser configurations [env1] and - [env2] are equal in the sense that the automaton's current state is the - same in [env1] and [env2] and the stack is *physically* the same in - [env1] and [env2]. If [equal env1 env2] is [true], then the sequence of - the stack elements, as observed via [pop] and [top], must be the same in - [env1] and [env2]. Also, if [equal env1 env2] holds, then the checkpoints - [input_needed env1] and [input_needed env2] must be equivalent. The - function [equal] has time complexity O(1). *) +(* The following logic defines our own Error object + * and register it with ocaml so it knows how to print it + *) - val equal: 'a env -> 'a env -> bool +type error = Syntax_error of string - (* These are the start and end positions of the current lookahead token. If - invoked in an initial state, this function returns a pair of twice the - initial position. *) +exception Error of Location.t * error - val positions: 'a env -> position * position +let report_error ppf (Syntax_error err) = + Format.(fprintf ppf "%s" err) - (* When applied to an environment taken from a checkpoint of the form - [AboutToReduce (env, prod)], the function [env_has_default_reduction] - tells whether the reduction that is about to take place is a default - reduction. *) +let () = + Location.register_error_of_exn + (function + | Error (loc, err) -> + Some (Location.error_of_printer loc report_error err) + | _ -> + None + ) - val env_has_default_reduction: 'a env -> bool +let map_first f = function + | [] -> invalid_arg "Syntax_util.map_first: empty list" + | x :: xs -> f x :: xs - (* [state_has_default_reduction s] tells whether the state [s] has a default - reduction. This includes the case where [s] is an accepting state. *) +let map_last f l = + match List.rev l with + | [] -> invalid_arg "Syntax_util.map_last: empty list" + | x :: xs -> List.rev (f x :: xs) - val state_has_default_reduction: _ lr1state -> bool +type menhirMessagesError = { + msg: string; + loc: Location.t; +} - (* [pop env] returns a new environment, where the parser's top stack cell - has been popped off. (If the stack is empty, [None] is returned.) This - amounts to pretending that the (terminal or nonterminal) symbol that - corresponds to this stack cell has not been read. *) +type menhirError = + | NoMenhirMessagesError + | MenhirMessagesError of menhirMessagesError - val pop: 'a env -> 'a env option +let menhirMessagesError = ref [NoMenhirMessagesError] - (* [force_reduction prod env] should be called only if in the state [env] - the parser is capable of reducing the production [prod]. If this - condition is satisfied, then this production is reduced, which means that - its semantic action is executed (this can have side effects!) and the - automaton makes a goto (nonterminal) transition. If this condition is not - satisfied, [Invalid_argument _] is raised. *) +let findMenhirErrorMessage loc = + let rec find messages = + match messages with + | MenhirMessagesError err :: tail when err.loc = loc -> MenhirMessagesError err + | _ :: tail -> find tail + | [] -> NoMenhirMessagesError + in find !menhirMessagesError - val force_reduction: production -> 'a env -> 'a env +let add_error_message err = + let msg = try + ignore (find_substring "UNKNOWN SYNTAX ERROR" err.msg 0); + [MenhirMessagesError {err with msg = "A syntax error occurred. Help to improve this message: https://github.com/facebook/reason/blob/master/src/README.md#add-a-menhir-error-message"}] + with + | Not_found -> [MenhirMessagesError err] + in + menhirMessagesError := !menhirMessagesError @ msg - (* [input_needed env] returns [InputNeeded env]. That is, out of an [env] - that might have been obtained via a series of calls to the functions - [pop], [force_reduction], [feed], etc., it produces a checkpoint, which - can be used to resume normal parsing, by supplying this checkpoint as an - argument to [offer]. *) +let location_is_before loc1 loc2 = + let open Location in + loc1.loc_end.Lexing.pos_cnum <= loc2.loc_start.Lexing.pos_cnum - (* This function should be used with some care. It could "mess up the - lookahead" in the sense that it allows parsing to resume in an arbitrary - state [s] with an arbitrary lookahead symbol [t], even though Menhir's - reachability analysis (menhir --list-errors) might well think that it is - impossible to reach this particular configuration. If one is using - Menhir's new error reporting facility, this could cause the parser to - reach an error state for which no error message has been prepared. *) +let location_contains loc1 loc2 = + let open Location in + loc1.loc_start.Lexing.pos_cnum <= loc2.loc_start.Lexing.pos_cnum && + loc1.loc_end.Lexing.pos_cnum >= loc2.loc_end.Lexing.pos_cnum - val input_needed: 'a env -> 'a checkpoint end +module Reason_parser : sig +#1 "reason_parser.mli" -(* This signature is a fragment of the inspection API that is made available - to the user when [--inspection] is used. This fragment contains type - definitions for symbols. *) +(* The type of tokens. *) -module type SYMBOLS = sig +type token = + | WITH + | WHILE + | WHEN + | VIRTUAL + | VAL + | UNDERSCORE + | UIDENT of (string) + | TYPE + | TRY + | TRUE + | TO + | TILDE + | THEN + | SWITCH + | STRUCT + | STRING of (string * string option) + | STAR + | SLASHGREATER + | SIG + | SHARPOP of (string) + | SHARP + | SEMISEMI + | SEMI + | RPAREN + | REC + | RBRACKET + | RBRACE + | QUOTE + | QUESTION + | PUB + | PRI + | PREFIXOP of (string) + | POSTFIXOP of (string) + | PLUSEQ + | PLUSDOT + | PLUS + | PERCENT + | OR + | OPEN + | OF + | OBJECT + | NONREC + | NEW + | NATIVEINT of (nativeint) + | MUTABLE + | MODULE + | MINUSGREATER + | MINUSDOT + | MINUS + | LPAREN + | LIDENT of (string) + | LET + | LESSSLASHIDENTGREATER of (string) + | LESSSLASHGREATER + | LESSIDENT of (string) + | LESSGREATER + | LESSDOTDOTGREATER + | LESS + | LBRACKETPERCENTPERCENT + | LBRACKETPERCENT + | LBRACKETLESS + | LBRACKETGREATER + | LBRACKETBAR + | LBRACKETAT + | LBRACKET + | LBRACELESS + | LBRACE + | LAZY + | LABEL_WITH_EQUAL of (string) + | INT of (string * char option) + | INITIALIZER + | INHERIT + | INFIXOP4 of (string) + | INFIXOP3 of (string) + | INFIXOP2 of (string) + | INFIXOP1 of (string) + | INFIXOP0 of (string) + | INCLUDE + | IN + | IF + | GREATERRBRACE + | GREATER + | FUNCTOR + | FUNCTION + | FUN + | FOR + | FLOAT of (string * char option) + | FALSE + | EXTERNAL + | EXCEPTION + | ES6_FUN + | EQUALGREATER + | EQUAL + | EOL + | EOF + | END + | ELSE + | DOWNTO + | DOTDOTDOT + | DOTDOT + | DOT + | DONE + | DOCSTRING of (string) + | DO + | CONSTRAINT + | COMMENT of (string * Location.t) + | COMMA + | COLONGREATER + | COLONEQUAL + | COLONCOLON + | COLON + | CLASS + | CHAR of (char) + | BEGIN + | BARRBRACKET + | BARBAR + | BAR + | BANG + | BACKQUOTE + | ASSERT + | AS + | AND + | AMPERSAND + | AMPERAMPER - (* The type ['a terminal] represents a terminal symbol. The type ['a - nonterminal] represents a nonterminal symbol. In both cases, the index - ['a] represents the type of the semantic values associated with this - symbol. The concrete definitions of these types are generated. *) +(* This exception is raised by the monolithic API functions. *) - type 'a terminal - type 'a nonterminal +exception Error - (* The type ['a symbol] represents a terminal or nonterminal symbol. It is - the disjoint union of the types ['a terminal] and ['a nonterminal]. *) +(* The monolithic API. *) - type 'a symbol = - | T : 'a terminal -> 'a symbol - | N : 'a nonterminal -> 'a symbol +val use_file: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.toplevel_phrase list) - (* The type [xsymbol] is an existentially quantified version of the type - ['a symbol]. This type is useful in situations where the index ['a] - is not statically known. *) +val toplevel_phrase: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.toplevel_phrase) - type xsymbol = - | X : 'a symbol -> xsymbol +val parse_pattern: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.pattern) -end +val parse_expression: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.expression) -(* This signature describes the inspection API that is made available to the - user when [--inspection] is used. *) +val parse_core_type: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.core_type) -module type INSPECTION = sig +val interface: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.signature) - (* The types of symbols are described above. *) +val implementation: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.structure) - include SYMBOLS +module MenhirInterpreter : sig + + (* The incremental API. *) + + include MenhirLib.IncrementalEngine.INCREMENTAL_ENGINE + with type token = token + +end - (* The type ['a lr1state] is meant to be the same as in [INCREMENTAL_ENGINE]. *) +(* The entry point(s) to the incremental API. *) - type 'a lr1state +module Incremental : sig + + val use_file: Lexing.position -> (Ast_404.Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint + + val toplevel_phrase: Lexing.position -> (Ast_404.Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint + + val parse_pattern: Lexing.position -> (Ast_404.Parsetree.pattern) MenhirInterpreter.checkpoint + + val parse_expression: Lexing.position -> (Ast_404.Parsetree.expression) MenhirInterpreter.checkpoint + + val parse_core_type: Lexing.position -> (Ast_404.Parsetree.core_type) MenhirInterpreter.checkpoint + + val interface: Lexing.position -> (Ast_404.Parsetree.signature) MenhirInterpreter.checkpoint + + val implementation: Lexing.position -> (Ast_404.Parsetree.structure) MenhirInterpreter.checkpoint + +end - (* The type [production] is meant to be the same as in [INCREMENTAL_ENGINE]. - It represents a production of the grammar. A production can be examined - via the functions [lhs] and [rhs] below. *) +end = struct +#1 "reason_parser.ml" - type production +(* This generated code requires the following version of MenhirLib: *) - (* An LR(0) item is a pair of a production [prod] and a valid index [i] into - this production. That is, if the length of [rhs prod] is [n], then [i] is - comprised between 0 and [n], inclusive. *) +let () = + MenhirLib.StaticVersion.require_20170712 - type item = - production * int - - (* Ordering functions. *) +module MenhirBasics = struct + + exception Error = Parsing.Parse_error + + type token = + | WITH + | WHILE + | WHEN + | VIRTUAL + | VAL + | UNDERSCORE + | UIDENT of ( +# 1177 "reason_parser.mly" + (string) +# 22 "reason_parser.ml" + ) + | TYPE + | TRY + | TRUE + | TO + | TILDE + | THEN + | SWITCH + | STRUCT + | STRING of ( +# 1169 "reason_parser.mly" + (string * string option) +# 35 "reason_parser.ml" + ) + | STAR + | SLASHGREATER + | SIG + | SHARPOP of ( +# 1166 "reason_parser.mly" + (string) +# 43 "reason_parser.ml" + ) + | SHARP + | SEMISEMI + | SEMI + | RPAREN + | REC + | RBRACKET + | RBRACE + | QUOTE + | QUESTION + | PUB + | PRI + | PREFIXOP of ( +# 1153 "reason_parser.mly" + (string) +# 59 "reason_parser.ml" + ) + | POSTFIXOP of ( +# 1154 "reason_parser.mly" + (string) +# 64 "reason_parser.ml" + ) + | PLUSEQ + | PLUSDOT + | PLUS + | PERCENT + | OR + | OPEN + | OF + | OBJECT + | NONREC + | NEW + | NATIVEINT of ( +# 1142 "reason_parser.mly" + (nativeint) +# 79 "reason_parser.ml" + ) + | MUTABLE + | MODULE + | MINUSGREATER + | MINUSDOT + | MINUS + | LPAREN + | LIDENT of ( +# 1131 "reason_parser.mly" + (string) +# 90 "reason_parser.ml" + ) + | LET + | LESSSLASHIDENTGREATER of ( +# 1162 "reason_parser.mly" + (string) +# 96 "reason_parser.ml" + ) + | LESSSLASHGREATER + | LESSIDENT of ( +# 1125 "reason_parser.mly" + (string) +# 102 "reason_parser.ml" + ) + | LESSGREATER + | LESSDOTDOTGREATER + | LESS + | LBRACKETPERCENTPERCENT + | LBRACKETPERCENT + | LBRACKETLESS + | LBRACKETGREATER + | LBRACKETBAR + | LBRACKETAT + | LBRACKET + | LBRACELESS + | LBRACE + | LAZY + | LABEL_WITH_EQUAL of ( +# 1114 "reason_parser.mly" + (string) +# 120 "reason_parser.ml" + ) + | INT of ( +# 1113 "reason_parser.mly" + (string * char option) +# 125 "reason_parser.ml" + ) + | INITIALIZER + | INHERIT + | INFIXOP4 of ( +# 1110 "reason_parser.mly" + (string) +# 132 "reason_parser.ml" + ) + | INFIXOP3 of ( +# 1107 "reason_parser.mly" + (string) +# 137 "reason_parser.ml" + ) + | INFIXOP2 of ( +# 1106 "reason_parser.mly" + (string) +# 142 "reason_parser.ml" + ) + | INFIXOP1 of ( +# 1105 "reason_parser.mly" + (string) +# 147 "reason_parser.ml" + ) + | INFIXOP0 of ( +# 1104 "reason_parser.mly" + (string) +# 152 "reason_parser.ml" + ) + | INCLUDE + | IN + | IF + | GREATERRBRACE + | GREATER + | FUNCTOR + | FUNCTION + | FUN + | FOR + | FLOAT of ( +# 1094 "reason_parser.mly" + (string * char option) +# 166 "reason_parser.ml" + ) + | FALSE + | EXTERNAL + | EXCEPTION + | ES6_FUN + | EQUALGREATER + | EQUAL + | EOL + | EOF + | END + | ELSE + | DOWNTO + | DOTDOTDOT + | DOTDOT + | DOT + | DONE + | DOCSTRING of ( +# 1185 "reason_parser.mly" + (string) +# 186 "reason_parser.ml" + ) + | DO + | CONSTRAINT + | COMMENT of ( +# 1184 "reason_parser.mly" + (string * Location.t) +# 193 "reason_parser.ml" + ) + | COMMA + | COLONGREATER + | COLONEQUAL + | COLONCOLON + | COLON + | CLASS + | CHAR of ( +# 1073 "reason_parser.mly" + (char) +# 204 "reason_parser.ml" + ) + | BEGIN + | BARRBRACKET + | BARBAR + | BAR + | BANG + | BACKQUOTE + | ASSERT + | AS + | AND + | AMPERSAND + | AMPERAMPER + +end - val compare_terminals: _ terminal -> _ terminal -> int - val compare_nonterminals: _ nonterminal -> _ nonterminal -> int - val compare_symbols: xsymbol -> xsymbol -> int - val compare_productions: production -> production -> int - val compare_items: item -> item -> int +include MenhirBasics - (* [incoming_symbol s] is the incoming symbol of the state [s], that is, - the symbol that the parser must recognize before (has recognized when) - it enters the state [s]. This function gives access to the semantic - value [v] stored in a stack element [Element (s, v, _, _)]. Indeed, - by case analysis on the symbol [incoming_symbol s], one discovers the - type ['a] of the value [v]. *) +let _eRR = + MenhirBasics.Error - val incoming_symbol: 'a lr1state -> 'a symbol +# 50 "reason_parser.mly" + +open Migrate_parsetree.OCaml_404.Ast +open Syntax_util +open Location +open Asttypes +open Longident +open Parsetree +open Ast_helper +open Ast_mapper - (* [items s] is the set of the LR(0) items in the LR(0) core of the LR(1) - state [s]. This set is not epsilon-closed. This set is presented as a - list, in an arbitrary order. *) +(* + TODO: + - Remove all [open]s from the top of this file one by one and fix compilation + failures that ensue by specifying the appropriate long identifiers. That + will make the parser much easier to reason about. + - Go back to trunk, do the same (remove [open]s, and fully specify long + idents), to perform a clean diff. - val items: _ lr1state -> item list +*) - (* [lhs prod] is the left-hand side of the production [prod]. This is - always a non-terminal symbol. *) +(** - val lhs: production -> xsymbol + location.ml: + ------------ + let mkloc txt loc = { txt ; loc } + let rhs_loc n = { + loc_start = Parsing.rhs_start_pos n; + loc_end = Parsing.rhs_end_pos n; + loc_ghost = false; + } + let symbol_rloc () = { + loc_start = Parsing.symbol_start_pos (); + loc_end = Parsing.symbol_end_pos (); + loc_ghost = false; + } - (* [rhs prod] is the right-hand side of the production [prod]. This is - a (possibly empty) sequence of (terminal or nonterminal) symbols. *) + let symbol_gloc () = { + loc_start = Parsing.symbol_start_pos (); + loc_end = Parsing.symbol_end_pos (); + loc_ghost = true; + } - val rhs: production -> xsymbol list + ast_helper.ml: + ------------ + module Typ = struct + val mk: ?loc:loc -> ?attrs:attrs -> core_type_desc -> core_type + let mk ?(loc = !default_loc) ?(attrs = []) d = + {ptyp_desc = d; ptyp_loc = loc; ptyp_attributes = attrs} + .. + end - (* [nullable nt] tells whether the non-terminal symbol [nt] is nullable. - That is, it is true if and only if this symbol produces the empty - word [epsilon]. *) + parse_tree.mli + -------------- + and core_type = { + ptyp_desc: core_type_desc; + ptyp_loc: Location.t; + ptyp_attributes: attributes; (* ... [@id1] [@id2] *) + } - val nullable: _ nonterminal -> bool + and core_type_desc = + | Ptyp_any + (* _ *) + | Ptyp_var of string + (* 'a *) + | Ptyp_arrow of label * core_type * core_type + (* T1 -> T2 (label = "") + ~l:T1 -> T2 (label = "l") + ?l:T1 -> T2 (label = "?l") + *) + | Ptyp_tuple of core_type list + (* T1 * ... * Tn (n >= 2) *) - (* [first nt t] tells whether the FIRST set of the nonterminal symbol [nt] - contains the terminal symbol [t]. That is, it is true if and only if - [nt] produces a word that begins with [t]. *) + reason_parser.mly + --------------- + In general: - val first: _ nonterminal -> _ terminal -> bool + syntax variant {pblah_desc: core_blah_desc + pblah_loc: {txt, loc} + pblah_attributes: ... } + / \ / \ + val mkblah: ~loc -> ~attributes -> core_blah_desc -> core_blah + let mkblah = Blah.mk - (* [xfirst] is analogous to [first], but expects a first argument of type - [xsymbol] instead of [_ terminal]. *) +*) - val xfirst: xsymbol -> _ terminal -> bool +let uncurry_payload ?(name="bs") loc = ({loc; txt = name}, PStr []) - (* [foreach_terminal] enumerates the terminal symbols, including [error]. - [foreach_terminal_but_error] enumerates the terminal symbols, excluding - [error]. *) +let dummy_loc () = { + loc_start = Lexing.dummy_pos; + loc_end = Lexing.dummy_pos; + loc_ghost = false; +} - val foreach_terminal: (xsymbol -> 'a -> 'a) -> 'a -> 'a - val foreach_terminal_but_error: (xsymbol -> 'a -> 'a) -> 'a -> 'a +let mklocation loc_start loc_end = { + loc_start = loc_start; + loc_end = loc_end; + loc_ghost = false; +} - (* The type [env] is meant to be the same as in [INCREMENTAL_ENGINE]. *) +let with_txt a txt = { + a with txt=txt; +} - type 'a env +let make_real_loc loc = { + loc with loc_ghost = false +} - (* [feed symbol startp semv endp env] causes the parser to consume the - (terminal or nonterminal) symbol [symbol], accompanied with the semantic - value [semv] and with the start and end positions [startp] and [endp]. - Thus, the automaton makes a transition, and reaches a new state. The - stack grows by one cell. This operation is permitted only if the current - state (as determined by [env]) has an outgoing transition labeled with - [symbol]. Otherwise, [Invalid_argument _] is raised. *) +let make_ghost_loc loc = { + loc with loc_ghost = true +} - val feed: 'a symbol -> position -> 'a -> position -> 'b env -> 'b env +let ghloc ?(loc=dummy_loc ()) d = { txt = d; loc = (make_ghost_loc loc) } -end +(** + * turn an object into a real + *) +let make_real_exp exp = { + exp with pexp_loc = make_real_loc exp.pexp_loc +} +let make_real_pat pat = { + pat with ppat_loc = make_real_loc pat.ppat_loc +} +let make_real_cf cf = { + cf with pcf_loc = make_real_loc cf.pcf_loc +} -(* This signature combines the incremental API and the inspection API. *) +(** + * turn a object into ghost + *) +let make_ghost_cf cf = { + cf with pcf_loc = make_ghost_loc cf.pcf_loc +} +let make_ghost_exp exp = { + exp with pexp_loc = make_ghost_loc exp.pexp_loc +} -module type EVERYTHING = sig +let make_ghost_pat pat = { + pat with ppat_loc = make_ghost_loc pat.ppat_loc +} - include INCREMENTAL_ENGINE +(** + * change the location state to be a ghost location or real location + *) +let set_loc_state is_ghost loc = + if is_ghost then make_ghost_loc loc else make_real_loc loc - include INSPECTION - with type 'a lr1state := 'a lr1state - with type production := production - with type 'a env := 'a env +let mktyp ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Typ.mk ~loc d -end -end -module EngineTypes = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) +let mkpat ?(attrs=[]) ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Pat.mk ~loc ~attrs d -(* This file defines several types and module types that are used in the - specification of module [Engine]. *) +let mkexp ?(attrs=[]) ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Exp.mk ~loc ~attrs d -(* --------------------------------------------------------------------------- *) +let mkmty ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Mty.mk ~loc d -(* It would be nice if we could keep the structure of stacks and environments - hidden. However, stacks and environments must be accessible to semantic - actions, so the following data structure definitions must be public. *) +let mksig ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Sig.mk ~loc d -(* --------------------------------------------------------------------------- *) +let mkmod ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Mod.mk ~loc d -(* A stack is a linked list of cells. A sentinel cell -- which is its own - successor -- is used to mark the bottom of the stack. The sentinel cell - itself is not significant -- it contains dummy values. *) +let mkstr ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Str.mk ~loc d -type ('state, 'semantic_value) stack = { +let mkclass ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Cl.mk ~loc d - (* The state that we should go back to if we pop this stack cell. *) +let mkcty ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Cty.mk ~loc d - (* This convention means that the state contained in the top stack cell is - not the current state [env.current]. It also means that the state found - within the sentinel is a dummy -- it is never consulted. This convention - is the same as that adopted by the code-based back-end. *) +let mkctf ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Ctf.mk ~loc d - state: 'state; +let may_tuple startp endp = function + | [] -> assert false + | [x] -> {x with pexp_loc = mklocation startp endp} + | xs -> mkexp ~loc:(mklocation startp endp) (Pexp_tuple xs) - (* The semantic value associated with the chunk of input that this cell - represents. *) +(** + Make a core_type from a as_loc(LIDENT). + Useful for record type punning. + type props = {width: int, height: int}; + type state = {nbrOfClicks: int}; + type component = {props, state}; +*) +let mkct lbl = + let lident = Lident lbl.txt in + let ttype = Ptyp_constr({txt = lident; loc = lbl.loc}, []) in + {ptyp_desc = ttype; ptyp_loc = lbl.loc; ptyp_attributes = []} - semv: 'semantic_value; +let mkcf ?(loc=dummy_loc()) ?(ghost=false) d = + let loc = set_loc_state ghost loc in + Cf.mk ~loc d - (* The start and end positions of the chunk of input that this cell - represents. *) +let simple_ghost_text_attr ?(loc=dummy_loc ()) txt = + let loc = set_loc_state true loc in + [({txt; loc}, PStr [])] - startp: Lexing.position; - endp: Lexing.position; +let mkExplicitArityTuplePat ?(loc=dummy_loc ()) pat = + (* Tell OCaml type system that what this tuple construction represents is + not actually a tuple, and should represent several constructor + arguments. This allows the syntax the ability to distinguish between: - (* The next cell down in the stack. If this is a self-pointer, then this - cell is the sentinel, and the stack is conceptually empty. *) + X (10, 20) -- One argument constructor + X 10 20 -- Multi argument constructor + *) + mkpat + ~loc + ~attrs:(simple_ghost_text_attr ~loc "explicit_arity") + pat - next: ('state, 'semantic_value) stack; +let mkExplicitArityTupleExp ?(loc=dummy_loc ()) exp_desc = + mkexp + ~loc + ~attrs:(simple_ghost_text_attr ~loc "explicit_arity") + exp_desc -} +let is_pattern_list_single_any = function + | [{ppat_desc=Ppat_any; ppat_attributes=[]} as onlyItem] -> Some onlyItem + | _ -> None -(* --------------------------------------------------------------------------- *) +let set_structure_item_location x loc = {x with pstr_loc = loc};; -(* A parsing environment contains all of the parser's state (except for the - current program point). *) +let mkoperator {Location. txt; loc} = + Exp.mk ~loc (Pexp_ident(mkloc (Lident txt) loc)) -type ('state, 'semantic_value, 'token) env = { +(* + Ghost expressions and patterns: + expressions and patterns that do not appear explicitly in the + source file they have the loc_ghost flag set to true. + Then the profiler will not try to instrument them and the + -annot option will not try to display their type. - (* If this flag is true, then the first component of [env.triple] should - be ignored, as it has been logically overwritten with the [error] - pseudo-token. *) + Every grammar rule that generates an element with a location must + make at most one non-ghost element, the topmost one. - error: bool; + How to tell whether your location must be ghost: + A location corresponds to a range of characters in the source file. + If the location contains a piece of code that is syntactically + valid (according to the documentation), and corresponds to the + AST node, then the location must be real; in all other cases, + it must be ghost. - (* The last token that was obtained from the lexer, together with its start - and end positions. Warning: before the first call to the lexer has taken - place, a dummy (and possibly invalid) token is stored here. *) - - triple: 'token * Lexing.position * Lexing.position; - - (* The stack. In [CodeBackend], it is passed around on its own, - whereas, here, it is accessed via the environment. *) - - stack: ('state, 'semantic_value) stack; + jordwalke: Noticed that ghost expressions are often used when inserting + additional AST nodes from a parse rule. Either an extra wrapping one, or an + additional inner node. This is consistent with the above description, I + believe. +*) - (* The current state. In [CodeBackend], it is passed around on its - own, whereas, here, it is accessed via the environment. *) - current: 'state; +let ghunit ?(loc=dummy_loc ()) () = + mkexp ~ghost:true ~loc (Pexp_construct (mknoloc (Lident "()"), None)) -} +let mkinfixop arg1 op arg2 = + mkexp(Pexp_apply(op, [Nolabel, arg1; Nolabel, arg2])) -(* --------------------------------------------------------------------------- *) +let mkinfix arg1 name arg2 = + mkinfixop arg1 (mkoperator name) arg2 -(* This signature describes the parameters that must be supplied to the LR - engine. *) +let neg_string f = + if String.length f > 0 && f.[0] = '-' + then String.sub f 1 (String.length f - 1) + else "-" ^ f -module type TABLE = sig +let mkuminus name arg = + match name.txt, arg.pexp_desc with + | "-", Pexp_constant(Pconst_integer (n,m)) -> + mkexp(Pexp_constant(Pconst_integer(neg_string n,m))) + | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> + mkexp(Pexp_constant(Pconst_float(neg_string f, m))) + | txt, _ -> + let name = {name with txt = "~" ^ txt} in + mkexp(Pexp_apply(mkoperator name, [Nolabel, arg])) - (* The type of automaton states. *) +let prepare_functor_arg = function + | Some name, mty -> (name, mty) + | None, (Some {pmty_loc} as mty) -> + (mkloc "_" (make_ghost_loc pmty_loc), mty) + | None, None -> assert false - type state +let mk_functor_mod args body = + let folder arg acc = + let name, mty = prepare_functor_arg arg.txt in + mkmod ~loc:arg.loc (Pmod_functor(name, mty, acc)) + in + List.fold_right folder args body - (* States are numbered. *) +let mk_functor_mty args body = + let folder arg acc = + let name, mty = prepare_functor_arg arg.txt in + mkmty ~loc:arg.loc (Pmty_functor(name, mty, acc)) + in + List.fold_right folder args body - val number: state -> int +let mkuplus name arg = + match name.txt, arg.pexp_desc with + | "+", Pexp_constant(Pconst_integer _) + | ("+" | "+."), Pexp_constant(Pconst_float _) -> + mkexp arg.pexp_desc + | txt, _ -> + let name = {name with txt = "~" ^ txt} in + mkexp(Pexp_apply(mkoperator name, [Nolabel, arg])) - (* The type of tokens. These can be thought of as real tokens, that is, - tokens returned by the lexer. They carry a semantic value. This type - does not include the [error] pseudo-token. *) +let mkexp_cons consloc args loc = + mkexp ~loc (Pexp_construct(mkloc (Lident "::") consloc, Some args)) - type token +let mkexp_constructor_unit ?(uncurried=false) consloc loc = + let attrs = if uncurried then [uncurry_payload ~name:"uncurry" loc] else [] in + mkexp ~attrs ~loc (Pexp_construct(mkloc (Lident "()") consloc, None)) - (* The type of terminal symbols. These can be thought of as integer codes. - They do not carry a semantic value. This type does include the [error] - pseudo-token. *) +let ghexp_cons consloc args loc = + mkexp ~ghost:true ~loc (Pexp_construct(mkloc (Lident "::") loc, Some args)) - type terminal +let mkpat_cons consloc args loc = + mkpat ~loc (Ppat_construct(mkloc (Lident "::") loc, Some args)) - (* The type of nonterminal symbols. *) +let ghpat_cons consloc args loc = + mkpat ~ghost:true ~loc (Ppat_construct(mkloc (Lident "::") loc, Some args)) - type nonterminal +let mkpat_constructor_unit consloc loc = + mkpat ~loc (Ppat_construct(mkloc (Lident "()") consloc, None)) - (* The type of semantic values. *) +let simple_pattern_list_to_tuple ?(loc=dummy_loc ()) = function + | [] -> assert false + | lst -> mkpat ~loc (Ppat_tuple lst) - type semantic_value +let mktailexp_extension loc seq ext_opt = + let rec handle_seq = function + | [] -> + let base_case = match ext_opt with + | Some ext -> + ext + | None -> + let loc = make_ghost_loc loc in + let nil = { txt = Lident "[]"; loc } in + Exp.mk ~loc (Pexp_construct (nil, None)) in + base_case + | e1 :: el -> + let exp_el = handle_seq el in + let loc = mklocation e1.pexp_loc.loc_start exp_el.pexp_loc.loc_end in + let arg = mkexp ~ghost:true ~loc (Pexp_tuple [e1; exp_el]) in + ghexp_cons loc arg loc + in + handle_seq seq - (* A token is conceptually a pair of a (non-[error]) terminal symbol and - a semantic value. The following two functions are the pair projections. *) +let mktailpat_extension loc (seq, ext_opt) = + let rec handle_seq = function + [] -> + let base_case = match ext_opt with + | Some ext -> + ext + | None -> + let loc = make_ghost_loc loc in + let nil = { txt = Lident "[]"; loc } in + mkpat ~loc (Ppat_construct (nil, None)) in + base_case + | p1 :: pl -> + let pat_pl = handle_seq pl in + let loc = mklocation p1.ppat_loc.loc_start pat_pl.ppat_loc.loc_end in + let arg = mkpat ~ghost:true ~loc (Ppat_tuple [p1; pat_pl]) in + ghpat_cons loc arg loc in + handle_seq seq - val token2terminal: token -> terminal - val token2value: token -> semantic_value +let makeFrag loc body = + let attribute = ({txt = "JSX"; loc = loc}, PStr []) in + { body with pexp_attributes = attribute :: body.pexp_attributes } - (* Even though the [error] pseudo-token is not a real token, it is a - terminal symbol. Furthermore, for regularity, it must have a semantic - value. *) - val error_terminal: terminal - val error_value: semantic_value +(* Applies attributes to the structure item, not the expression itself. Makes + * structure item have same location as expression. *) - (* [foreach_terminal] allows iterating over all terminal symbols. *) +let mkstrexp e attrs = + match e with + | ({pexp_desc = Pexp_apply (({pexp_attributes} as e1), args); pexp_loc } as eRewrite) + when let f = (List.filter (function + | ({txt = "bs"}, _) -> true + | _ -> false ) e.pexp_attributes) in + List.length f > 0 + -> + let appExprAttrs = List.filter (function + | ({txt = "bs"}, PStr []) -> false + | _ -> true ) pexp_attributes in + let strEvalAttrs = (uncurry_payload e1.pexp_loc)::(List.filter (function + | ({txt = "bs"}, PStr []) -> false + | _ -> true ) attrs) in + let e = { + eRewrite with + pexp_desc = (Pexp_apply(e1, args)); + pexp_attributes = appExprAttrs + } in + { pstr_desc = Pstr_eval (e, strEvalAttrs); pstr_loc = e.pexp_loc } + | _ -> + { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } - val foreach_terminal: (terminal -> 'a -> 'a) -> 'a -> 'a +let ghexp_constraint loc e (t1, t2) = + match t1, t2 with + | Some t, None -> mkexp ~ghost:true ~loc (Pexp_constraint(e, t)) + | _, Some t -> mkexp ~ghost:true ~loc (Pexp_coerce(e, t1, t)) + | None, None -> assert false - (* The type of productions. *) +let array_function ?(loc=dummy_loc()) str name = + ghloc ~loc (Ldot(Lident str, (if !Clflags.fast then "unsafe_" ^ name else name))) - type production +let syntax_error_str loc msg = + if !Reason_config.recoverable then + Str.mk ~loc:loc (Pstr_extension (Syntax_util.syntax_error_extension_node loc msg, [])) + else + raise(Syntaxerr.Error(Syntaxerr.Other loc)) - val production_index: production -> int - val find_production: int -> production +let syntax_error () = + raise Syntaxerr.Escape_error - (* If a state [s] has a default reduction on production [prod], then, upon - entering [s], the automaton should reduce [prod] without consulting the - lookahead token. The following function allows determining which states - have default reductions. *) +let syntax_error_exp loc msg = + if !Reason_config.recoverable then + Exp.mk ~loc (Pexp_extension (Syntax_util.syntax_error_extension_node loc msg)) + else + syntax_error () - (* Instead of returning a value of a sum type -- either [DefRed prod], or - [NoDefRed] -- it accepts two continuations, and invokes just one of - them. This mechanism allows avoiding a memory allocation. *) +let syntax_error_pat loc msg = + if !Reason_config.recoverable then + Pat.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) + else + syntax_error () - val default_reduction: - state -> - ('env -> production -> 'answer) -> - ('env -> 'answer) -> - 'env -> 'answer +let syntax_error_typ loc msg = + if !Reason_config.recoverable then + Typ.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) + else + raise (Syntaxerr.Error(Syntaxerr.Not_expecting (loc, msg))) - (* An LR automaton can normally take three kinds of actions: shift, reduce, - or fail. (Acceptance is a particular case of reduction: it consists in - reducing a start production.) *) +let syntax_error_mod loc msg = + if !Reason_config.recoverable then + Mty.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) + else + syntax_error () - (* There are two variants of the shift action. [shift/discard s] instructs - the automaton to discard the current token, request a new one from the - lexer, and move to state [s]. [shift/nodiscard s] instructs it to move to - state [s] without requesting a new token. This instruction should be used - when [s] has a default reduction on [#]. See [CodeBackend.gettoken] for - details. *) +let unclosed opening closing = + raise(Syntaxerr.Error(Syntaxerr.Unclosed(opening.loc, opening.txt, + closing.loc, closing.txt))) - (* This is the automaton's action table. It maps a pair of a state and a - terminal symbol to an action. *) +let unclosed_extension closing = + Syntax_util.syntax_error_extension_node closing.loc ("Expecting \"" ^ closing.txt ^ "\"") - (* Instead of returning a value of a sum type -- one of shift/discard, - shift/nodiscard, reduce, or fail -- this function accepts three - continuations, and invokes just one them. This mechanism allows avoiding - a memory allocation. *) +let unclosed_mod opening closing = + if !Reason_config.recoverable then + mkmod(Pmod_extension (unclosed_extension closing)) + else + unclosed opening closing - (* In summary, the parameters to [action] are as follows: +let unclosed_cl opening closing = + if !Reason_config.recoverable then + mkclass(Pcl_extension (unclosed_extension closing)) + else + unclosed opening closing - - the first two parameters, a state and a terminal symbol, are used to - look up the action table; +let unclosed_mty opening closing = + if !Reason_config.recoverable then + mkmty(Pmty_extension (unclosed_extension closing)) + else + unclosed opening closing - - the next parameter is the semantic value associated with the above - terminal symbol; it is not used, only passed along to the shift - continuation, as explained below; +let unclosed_cty opening closing = + if !Reason_config.recoverable then + mkcty(Pcty_extension (unclosed_extension closing)) + else + unclosed opening closing - - the shift continuation expects an environment; a flag that tells - whether to discard the current token; the terminal symbol that - is being shifted; its semantic value; and the target state of - the transition; +let unclosed_exp opening closing = + if !Reason_config.recoverable then + mkexp(Pexp_extension (unclosed_extension closing)) + else + unclosed opening closing - - the reduce continuation expects an environment and a production; +let unclosed_pat opening closing = + if !Reason_config.recoverable then + mkpat(Ppat_extension (unclosed_extension closing)) + else + unclosed opening closing - - the fail continuation expects an environment; +let expecting nonterm = + raise Syntaxerr.(Error(Expecting(nonterm.loc, nonterm.txt))) - - the last parameter is the environment; it is not used, only passed - along to the selected continuation. *) +let expecting_pat nonterm = + if !Reason_config.recoverable then + mkpat(Ppat_extension (Syntax_util.syntax_error_extension_node nonterm.loc ("Expecting " ^ nonterm.txt))) + else + expecting nonterm - val action: - state -> - terminal -> - semantic_value -> - ('env -> bool -> terminal -> semantic_value -> state -> 'answer) -> - ('env -> production -> 'answer) -> - ('env -> 'answer) -> - 'env -> 'answer +let not_expecting start_pos end_pos nonterm = + raise Syntaxerr.(Error(Not_expecting(mklocation start_pos end_pos, nonterm))) - (* This is the automaton's goto table. This table maps a pair of a state - and a nonterminal symbol to a new state. By extension, it also maps a - pair of a state and a production to a new state. *) +type labelled_parameter = + | Term of arg_label * expression option * pattern + | Type of string - (* The function [goto_nt] can be applied to [s] and [nt] ONLY if the state - [s] has an outgoing transition labeled [nt]. Otherwise, its result is - undefined. Similarly, the call [goto_prod prod s] is permitted ONLY if - the state [s] has an outgoing transition labeled with the nonterminal - symbol [lhs prod]. The function [maybe_goto_nt] involves an additional - dynamic check and CAN be called even if there is no outgoing transition. *) +let mkexp_fun {Location.txt; loc} body = + let loc = mklocation loc.loc_start body.pexp_loc.loc_end in + match txt with + | Term (label, default_expr, pat) -> + Exp.fun_ ~loc label default_expr pat body + | Type str -> + Exp.newtype ~loc str body - val goto_nt : state -> nonterminal -> state - val goto_prod: state -> production -> state - val maybe_goto_nt: state -> nonterminal -> state option +let mkclass_fun {Location. txt ; loc} body = + let loc = mklocation loc.loc_start body.pcl_loc.loc_end in + match txt with + | Term (label, default_expr, pat) -> + Cl.fun_ ~loc label default_expr pat body + | Type str -> + let pat = syntax_error_pat loc "(type) not allowed in classes" in + Cl.fun_ ~loc Nolabel None pat body - (* [is_start prod] tells whether the production [prod] is a start production. *) +let mktyp_arrow ({Location.txt = (label, cod); loc}, uncurried) dom = + let loc = mklocation loc.loc_start dom.ptyp_loc.loc_end in + let typ = mktyp ~loc (Ptyp_arrow (label, cod, dom)) in + {typ with ptyp_attributes = (if uncurried then [uncurry_payload loc] else [])} - val is_start: production -> bool +let mkcty_arrow ({Location.txt = (label, cod); loc}, uncurried) dom = + let loc = mklocation loc.loc_start dom.pcty_loc.loc_end in + let ct = mkcty ~loc (Pcty_arrow (label, cod, dom)) in + {ct with pcty_attributes = (if uncurried then [uncurry_payload loc] else [])} - (* By convention, a semantic action is responsible for: +(** + * process the occurrence of _ in the arguments of a function application + * replace _ with a new variable, currently __x, in the arguments + * return a wrapping function that wraps ((__x) => ...) around an expression + * e.g. foo(_, 3) becomes (__x) => foo(__x, 3) + *) +let process_underscore_application args = + let exp_question = ref None in + let hidden_var = "__x" in + let check_arg ((lab, exp) as arg) = match exp.pexp_desc with + | Pexp_ident ({ txt = Lident "_"} as id) -> + let new_id = mkloc (Lident hidden_var) id.loc in + let new_exp = mkexp (Pexp_ident new_id) ~loc:exp.pexp_loc in + exp_question := Some new_exp; + (lab, new_exp) + | _ -> + arg in + let args = List.map check_arg args in + let wrap exp_apply = match !exp_question with + | Some {pexp_loc=loc} -> + let pattern = mkpat (Ppat_var (mkloc hidden_var loc)) ~loc in + mkexp (Pexp_fun (Nolabel, None, pattern, exp_apply)) ~loc + | None -> + exp_apply in + (args, wrap) - 1. fetching whatever semantic values and positions it needs off the stack; +(** + * Joins a 'body' and it's 'args' to form a Pexp_apply. + * Example: + * 'add' (body) and '[1, 2]' (args) become a Pexp_apply representing 'add(1, 2)' + * + * Note that `add(. 1, 2)(. 3, 4)` & `add(. 1, 2, . 3, 4)` both + * give `[[@uncurry] 1, 2, [@uncurry] 3, 4]]` as args. + * The dot is parsed as [@uncurry] to distinguish between specific + * uncurrying and [@bs]. They can appear in the same arg: + * `add(. [@bs] 1)` is a perfectly valid, the dot indicates uncurrying + * for the whole application of 'add' and [@bs] sits on the `1`. + * Due to the dot of uncurried application possibly appearing in any + * position of the args, we need to post-process the args and split + * all args in groups that are uncurried (or not). + * add(. 1, . 2) should be parsed as (add(. 1))(. 2) + * The args can be splitted here in [1] & [2], based on those groups + * we can recursively build the correct nested Pexp_apply here. + * -> Pexp_apply (Pexp_apply (add, 1), 2) (* simplified ast *) + *) +let mkexp_app_rev startp endp (body, args) = + let loc = mklocation startp endp in + if args = [] then {body with pexp_loc = loc} + else + (* + * Post process the arguments and transform [@uncurry] into [@bs]. + * Returns a tuple with a boolean (was it uncurried?) and + * the posible rewritten arg. + *) + let rec process_args acc es = + match es with + | (lbl, e)::es -> + let attrs = e.pexp_attributes in + let hasUncurryAttr = ref false in + let newAttrs = List.filter (function + | ({txt = "uncurry"}, PStr []) -> + hasUncurryAttr := true; + false + | _ -> true) attrs + in + let uncurried = !hasUncurryAttr in + let newArg = (lbl, { e with pexp_attributes = newAttrs }) in + process_args ((uncurried, newArg)::acc) es + | [] -> acc + in + (* + * Groups all uncurried args falling under the same Pexp_apply + * Example: + * add(. 2, 3, . 4, 5) or add(. 2, 3)(. 4, 5) (equivalent) + * This results in two groups: (true, [2, 3]) & (true, [4, 5]) + * Both groups have 'true' as their first tuple element, because + * they are uncurried. + * add(2, 3, . 4) results in the groups (false, [2, 3]) & (true, [4]) + *) + let rec group grp acc = function + | (uncurried, arg)::xs -> + let (_u, grp) = grp in + if uncurried = true then begin + group (true, [arg]) ((_u, (List.rev grp))::acc) xs + end else begin + group (_u, (arg::grp)) acc xs + end + | [] -> + let (_u, grp) = grp in + List.rev ((_u, (List.rev grp))::acc) + in + (* + * Recursively transforms all groups into a (possibly uncurried) + * Pexp_apply + * + * Example: + * Given the groups (true, [2, 3]) & (true, [4, 5]) and body 'add', + * we get the two nested Pexp_apply associated with + * (add(. 2, 3))(. 4, 5) + *) + let rec make_appl body = function + | args::xs -> + let (uncurried, args) = args in + let expr = if args = [] then body + else + let (args, wrap) = process_underscore_application args in + let args_loc = match args, List.rev args with + | ((_, s)::_), ((_, e)::_) -> mklocation s.pexp_loc.loc_start e.pexp_loc.loc_end + | _ -> assert false in + let expr = mkexp ~loc:args_loc (Pexp_apply (body, args)) in + let expr = if uncurried then {expr with pexp_attributes = [uncurry_payload loc]} else expr in + wrap expr + in + make_appl expr xs + | [] -> {body with pexp_loc = loc} + in + let processed_args = process_args [] args in + let groups = group (false, []) [] processed_args in + make_appl body groups - 2. popping an appropriate number of cells off the stack, as dictated - by the length of the right-hand side of the production; +let mkmod_app mexp marg = + mkmod ~loc:(mklocation mexp.pmod_loc.loc_start marg.pmod_loc.loc_end) + (Pmod_apply (mexp, marg)) - 3. computing a new semantic value, as well as new start and end positions; +let bigarray_function ?(loc=dummy_loc()) str name = + ghloc ~loc (Ldot(Ldot(Lident "Bigarray", str), name)) - 4. pushing a new stack cell, which contains the three values - computed in step 3; +let bigarray_untuplify = function + { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist + | exp -> [exp] - 5. returning the new stack computed in steps 2 and 4. +let bigarray_get ?(loc=dummy_loc()) arr arg = + let get = if !Clflags.fast then "unsafe_get" else "get" in + match bigarray_untuplify arg with + [c1] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array1" get)), + [Nolabel, arr; Nolabel, c1])) + | [c1;c2] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array2" get)), + [Nolabel, arr; Nolabel, c1; Nolabel, c2])) + | [c1;c2;c3] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array3" get)), + [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, c3])) + | coords -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Genarray" "get")), + [Nolabel, arr; Nolabel, mkexp ~ghost:true ~loc (Pexp_array coords)])) - Point 1 is essentially forced upon us: if semantic values were fetched - off the stack by this interpreter, then the calling convention for - semantic actions would be variadic: not all semantic actions would have - the same number of arguments. The rest follows rather naturally. *) +let bigarray_set ?(loc=dummy_loc()) arr arg newval = + let set = if !Clflags.fast then "unsafe_set" else "set" in + match bigarray_untuplify arg with + [c1] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array1" set)), + [Nolabel, arr; Nolabel, c1; Nolabel, newval])) + | [c1;c2] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array2" set)), + [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, newval])) + | [c1;c2;c3] -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array3" set)), + [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, c3; Nolabel, newval])) + | coords -> + mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Genarray" "set")), + [Nolabel, arr; + Nolabel, mkexp ~ghost:true ~loc (Pexp_array coords); + Nolabel, newval])) - (* Semantic actions are allowed to raise [Error]. *) +let exp_of_label label = + mkexp ~loc:label.loc (Pexp_ident {label with txt=Lident(Longident.last label.txt)}) - exception Error +let pat_of_label label = + mkpat ~loc:label.loc (Ppat_var {label with txt=(Longident.last label.txt)}) - type semantic_action = - (state, semantic_value, token) env -> (state, semantic_value) stack +let check_variable vl loc v = + if List.mem v vl then + raise Syntaxerr.(Error(Variable_in_scope(loc,v))) - val semantic_action: production -> semantic_action +let varify_constructors var_names t = + let rec loop t = + let desc = + match t.ptyp_desc with + | Ptyp_any -> Ptyp_any + | Ptyp_var x -> + check_variable var_names t.ptyp_loc x; + Ptyp_var x + | Ptyp_arrow (label,core_type,core_type') -> + Ptyp_arrow(label, loop core_type, loop core_type') + | Ptyp_tuple lst -> Ptyp_tuple (List.map loop lst) + | Ptyp_constr( { txt = Lident s }, []) when List.mem s var_names -> + Ptyp_var s + | Ptyp_constr(longident, lst) -> + Ptyp_constr(longident, List.map loop lst) + | Ptyp_object (lst, o) -> + Ptyp_object + (List.map (fun (s, attrs, t) -> (s, attrs, loop t)) lst, o) + | Ptyp_class (longident, lst) -> + Ptyp_class (longident, List.map loop lst) + | Ptyp_alias(core_type, string) -> + check_variable var_names t.ptyp_loc string; + Ptyp_alias(loop core_type, string) + | Ptyp_variant(row_field_list, flag, lbl_lst_option) -> + Ptyp_variant(List.map loop_row_field row_field_list, + flag, lbl_lst_option) + | Ptyp_poly(string_lst, core_type) -> + List.iter (check_variable var_names t.ptyp_loc) string_lst; + Ptyp_poly(string_lst, loop core_type) + | Ptyp_package(longident,lst) -> + Ptyp_package(longident,List.map (fun (n,typ) -> (n,loop typ) ) lst) + | Ptyp_extension (s, arg) -> + Ptyp_extension (s, arg) + in + {t with ptyp_desc = desc} + and loop_row_field = + function + | Rtag(label,attrs,flag,lst) -> + Rtag(label,attrs,flag,List.map loop lst) + | Rinherit t -> + Rinherit (loop t) + in + loop t - (* [may_reduce state prod] tests whether the state [state] is capable of - reducing the production [prod]. This function is currently costly and - is not used by the core LR engine. It is used in the implementation - of certain functions, such as [force_reduction], which allow the engine - to be driven programmatically. *) +let pexp_newtypes ?loc newtypes exp = + List.fold_right (fun newtype exp -> mkexp ?loc (Pexp_newtype (newtype, exp))) + newtypes exp - val may_reduce: state -> production -> bool +(** + I believe that wrap_type_annotation will automatically generate the type + arguments (type a) (type b) based on what was listed before the dot in a + polymorphic type annotation that uses locally abstract types. + *) +let wrap_type_annotation newtypes core_type body = + let exp = mkexp(Pexp_constraint(body,core_type)) in + let exp = pexp_newtypes newtypes exp in + let typ = mktyp ~ghost:true (Ptyp_poly(newtypes,varify_constructors newtypes core_type)) in + (exp, typ) - (* The LR engine requires a number of hooks, which are used for logging. *) - (* The comments below indicate the conventional messages that correspond - to these hooks in the code-based back-end; see [CodeBackend]. *) +let struct_item_extension (ext_attrs, ext_id) structure_items = + mkstr ~ghost:true (Pstr_extension ((ext_id, PStr structure_items), ext_attrs)) - (* If the flag [log] is false, then the logging functions are not called. - If it is [true], then they are called. *) +let expression_extension (ext_attrs, ext_id) item_expr = + mkexp ~ghost:true ~attrs:ext_attrs + (Pexp_extension (ext_id, PStr [mkstrexp item_expr []])) - val log : bool +(* There's no more need for these functions - this was for the following: + * + * fun % ext [@foo] arg => arg; + * + * Becoming + * + * [%ext (fun arg => arg) [@foo]] + * + * Which we no longer support. + *) +(* Applies the attributes to the body, then wraps entire thing in an extension + * expression, whose payload consists of a single structure item that is body + *) +(* let wrap_exp_attrs body (ext, attrs) = *) +(* (* todo: keep exact location for the entire attribute *) *) +(* let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in *) +(* match ext with *) +(* | None -> body *) +(* | Some id -> mkexp ~ghost:true (Pexp_extension (id, PStr [mkstrexp body []])) *) - module Log : sig +(* Why not just mkexp with the right attributes in the first place? *) +(* let mkexp_attrs d attrs = *) +(* wrap_exp_attrs (mkexp d) attrs *) - (* State %d: *) +let mkcf_attrs ?(loc=dummy_loc()) d attrs = + Cf.mk ~loc ~attrs d - val state: state -> unit +let mkctf_attrs d attrs = + Ctf.mk ~attrs d - (* Shifting () to state *) +type let_binding = + { lb_pattern: pattern; + lb_expression: expression; + (* The meaning of lb_leading_attributes and lbs_extension are dependent on + * the context of the let binding (module/expression etc) *) + lb_attributes: attributes; + (* lb_docs: docs Lazy.t; *) + (* lb_text: text Lazy.t; *) + lb_loc: Location.t; } - val shift: terminal -> state -> unit +type let_bindings = + { lbs_bindings: let_binding list; + lbs_rec: rec_flag; + lbs_extension: (attributes * string Asttypes.loc) option; + lbs_loc: Location.t } - (* Reducing a production should be logged either as a reduction - event (for regular productions) or as an acceptance event (for - start productions). *) - - (* Reducing production / Accepting *) - - val reduce_or_accept: production -> unit - - (* Lookahead token is now (-) *) - - val lookahead_token: terminal -> Lexing.position -> Lexing.position -> unit - - (* Initiating error handling *) - - val initiating_error_handling: unit -> unit - - (* Resuming error handling *) - - val resuming_error_handling: unit -> unit - - (* Handling error in state *) - - val handling_error: state -> unit - - end - -end - -(* --------------------------------------------------------------------------- *) - -(* This signature describes the monolithic (traditional) LR engine. *) - -(* In this interface, the parser controls the lexer. *) - -module type MONOLITHIC_ENGINE = sig - - type state - - type token - - type semantic_value - - (* An entry point to the engine requires a start state, a lexer, and a lexing - buffer. It either succeeds and produces a semantic value, or fails and - raises [Error]. *) - - exception Error - - val entry: - state -> - (Lexing.lexbuf -> token) -> - Lexing.lexbuf -> - semantic_value - -end - -(* --------------------------------------------------------------------------- *) - -(* The following signatures describe the incremental LR engine. *) - -(* First, see [INCREMENTAL_ENGINE] in the file [IncrementalEngine.ml]. *) - -(* The [start] function is set apart because we do not wish to publish - it as part of the generated [parser.mli] file. Instead, the table - back-end will publish specialized versions of it, with a suitable - type cast. *) - -module type INCREMENTAL_ENGINE_START = sig - - (* [start] is an entry point. It requires a start state and a start position - and begins the parsing process. If the lexer is based on an OCaml lexing - buffer, the start position should be [lexbuf.lex_curr_p]. [start] produces - a checkpoint, which usually will be an [InputNeeded] checkpoint. (It could - be [Accepted] if this starting state accepts only the empty word. It could - be [Rejected] if this starting state accepts no word at all.) It does not - raise any exception. *) - - (* [start s pos] should really produce a checkpoint of type ['a checkpoint], - for a fixed ['a] that depends on the state [s]. We cannot express this, so - we use [semantic_value checkpoint], which is safe. The table back-end uses - [Obj.magic] to produce safe specialized versions of [start]. *) - - type state - type semantic_value - type 'a checkpoint - - val start: - state -> - Lexing.position -> - semantic_value checkpoint - -end - -(* --------------------------------------------------------------------------- *) - -(* This signature describes the LR engine, which combines the monolithic - and incremental interfaces. *) - -module type ENGINE = sig - - include MONOLITHIC_ENGINE - - include IncrementalEngine.INCREMENTAL_ENGINE - with type token := token - and type 'a lr1state = state (* useful for us; hidden from the end user *) - - include INCREMENTAL_ENGINE_START - with type state := state - and type semantic_value := semantic_value - and type 'a checkpoint := 'a checkpoint - -end -end -module Engine = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -type position = Lexing.position -open EngineTypes - -(* The LR parsing engine. *) - -(* This module is used: - - - at compile time, if so requested by the user, via the --interpret options; - - at run time, in the table-based back-end. *) - -module Make (T : TABLE) = struct - - (* This propagates type and exception definitions. The functions [number], - [production_index], [find_production], too, are defined by this [include] - declaration. *) - - include T - - type 'a env = - (state, semantic_value, token) EngineTypes.env - - (* ------------------------------------------------------------------------ *) - - (* The type [checkpoint] represents an intermediate or final result of the - parser. See [EngineTypes]. *) - - (* The type [checkpoint] is presented to the user as a private type (see - [IncrementalEngine]). This prevents the user from manufacturing - checkpoints (i.e., continuations) that do not make sense. (Such - continuations could potentially violate the LR invariant and lead to - crashes.) *) - - (* 2017/03/29 Although [checkpoint] is a private type, we now expose a - constructor function, [input_needed]. This function allows manufacturing - a checkpoint out of an environment. For this reason, the type [env] must - also be parameterized with ['a]. *) - - type 'a checkpoint = - | InputNeeded of 'a env - | Shifting of 'a env * 'a env * bool - | AboutToReduce of 'a env * production - | HandlingError of 'a env - | Accepted of 'a - | Rejected - - (* ------------------------------------------------------------------------ *) - - (* In the code-based back-end, the [run] function is sometimes responsible - for pushing a new cell on the stack. This is motivated by code sharing - concerns. In this interpreter, there is no such concern; [run]'s caller - is always responsible for updating the stack. *) - - (* In the code-based back-end, there is a [run] function for each state - [s]. This function can behave in two slightly different ways, depending - on when it is invoked, or (equivalently) depending on [s]. - - If [run] is invoked after shifting a terminal symbol (or, equivalently, - if [s] has a terminal incoming symbol), then [run] discards a token, - unless [s] has a default reduction on [#]. (Indeed, in that case, - requesting the next token might drive the lexer off the end of the input - stream.) - - If, on the other hand, [run] is invoked after performing a goto - transition, or invoked directly by an entry point, then there is nothing - to discard. - - These two cases are reflected in [CodeBackend.gettoken]. - - Here, the code is structured in a slightly different way. It is up to the - caller of [run] to indicate whether to discard a token, via the parameter - [please_discard]. This flag is set when [s] is being entered by shifting - a terminal symbol and [s] does not have a default reduction on [#]. *) - - (* The following recursive group of functions are tail recursive, produce a - checkpoint of type [semantic_value checkpoint], and cannot raise an - exception. A semantic action can raise [Error], but this exception is - immediately caught within [reduce]. *) - - let rec run env please_discard : semantic_value checkpoint = - - (* Log the fact that we just entered this state. *) - - if log then - Log.state env.current; - - (* If [please_discard] is set, we discard the current lookahead token and - fetch the next one. In order to request a token from the user, we - return an [InputNeeded] continuation, which, when invoked by the user, - will take us to [discard]. If [please_discard] is not set, we skip this - step and jump directly to [check_for_default_reduction]. *) - - if please_discard then - InputNeeded env - else - check_for_default_reduction env - - (* [discard env triple] stores [triple] into [env], overwriting the previous - token. It is invoked by [offer], which itself is invoked by the user in - response to an [InputNeeded] checkpoint. *) - - and discard env triple = - if log then begin - let (token, startp, endp) = triple in - Log.lookahead_token (T.token2terminal token) startp endp - end; - let env = { env with error = false; triple } in - check_for_default_reduction env - - and check_for_default_reduction env = - - (* Examine what situation we are in. This case analysis is analogous to - that performed in [CodeBackend.gettoken], in the sub-case where we do - not have a terminal incoming symbol. *) - - T.default_reduction - env.current - announce_reduce (* there is a default reduction; perform it *) - check_for_error_token (* there is none; continue below *) - env - - and check_for_error_token env = - - (* There is no default reduction. Consult the current lookahead token - so as to determine which action should be taken. *) - - (* Peeking at the first input token, without taking it off the input - stream, is done by reading [env.triple]. We are careful to first - check [env.error]. *) - - (* Note that, if [please_discard] was true, then we have just called - [discard], so the lookahead token cannot be [error]. *) - - (* Returning [HandlingError env] is equivalent to calling [error env] - directly, except it allows the user to regain control. *) - - if env.error then begin - if log then - Log.resuming_error_handling(); - HandlingError env - end - else - let (token, _, _) = env.triple in - - (* We consult the two-dimensional action table, indexed by the - current state and the current lookahead token, in order to - determine which action should be taken. *) - - T.action - env.current (* determines a row *) - (T.token2terminal token) (* determines a column *) - (T.token2value token) - shift (* shift continuation *) - announce_reduce (* reduce continuation *) - initiate (* failure continuation *) - env - - (* ------------------------------------------------------------------------ *) - - (* This function takes care of shift transitions along a terminal symbol. - (Goto transitions are taken care of within [reduce] below.) The symbol - can be either an actual token or the [error] pseudo-token. *) - - (* Here, the lookahead token CAN be [error]. *) - - and shift env - (please_discard : bool) - (terminal : terminal) - (value : semantic_value) - (s' : state) = - - (* Log the transition. *) - - if log then - Log.shift terminal s'; - - (* Push a new cell onto the stack, containing the identity of the - state that we are leaving. *) - - let (_, startp, endp) = env.triple in - let stack = { - state = env.current; - semv = value; - startp; - endp; - next = env.stack; - } in - - (* Switch to state [s']. *) - - let new_env = { env with stack; current = s' } in - - (* Expose the transition to the user. (In principle, we have a choice - between exposing the transition before we take it, after we take - it, or at some point in between. This affects the number and type - of the parameters carried by [Shifting]. Here, we choose to expose - the transition after we take it; this allows [Shifting] to carry - only three parameters, whose meaning is simple.) *) +let mklb (p, e) attrs loc = + { lb_pattern = p; + lb_expression = e; + (* Only some individual let bindings are allowed to have attributes + * depending on the context *) + lb_attributes = attrs; + lb_loc = loc; } - Shifting (env, new_env, please_discard) +let mklbs ext rf lb loc = + { lbs_bindings = [lb]; + lbs_rec = rf; + lbs_extension = ext; + lbs_loc = loc; } - (* ------------------------------------------------------------------------ *) +let addlbs lbs lbs' = + { lbs with lbs_bindings = lbs.lbs_bindings @ lbs' } - (* The function [announce_reduce] stops the parser and returns a checkpoint - which allows the parser to be resumed by calling [reduce]. *) +let val_of_let_bindings lbs = + let bindings = + List.map + (fun lb -> + Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes + (* ~docs:(Lazy.force lb.lb_docs) *) + (* ~text:(Lazy.force lb.lb_text) *) + lb.lb_pattern lb.lb_expression) + lbs.lbs_bindings + in + let str = mkstr (Pstr_value(lbs.lbs_rec, bindings)) in + match lbs.lbs_extension with + | None -> str + | Some ext -> struct_item_extension ext [str] - (* Only ordinary productions are exposed to the user. Start productions - are not exposed to the user. Reducing a start production simply leads - to the successful termination of the parser. *) +let expr_of_let_bindings lbs body = + let bindings = + List.map + (fun lb -> + (* Individual let bindings in an *expression* can't have item attributes. *) + (*if lb.lb_attributes <> [] then + raise Syntaxerr.(Error(Not_expecting(lb.lb_loc, "item attribute")));*) + Vb.mk ~attrs:lb.lb_attributes ~loc:lb.lb_loc lb.lb_pattern lb.lb_expression) + lbs.lbs_bindings + in + (* The location of this expression unfortunately includes the entire rule, + * which will include any preceeding extensions. *) + let item_expr = mkexp (Pexp_let(lbs.lbs_rec, bindings, body)) in + match lbs.lbs_extension with + | None -> item_expr + | Some ext -> expression_extension ext item_expr - and announce_reduce env (prod : production) = - if T.is_start prod then - accept env prod - else - AboutToReduce (env, prod) +let class_of_let_bindings lbs body = + let bindings = + List.map + (fun lb -> + (*if lb.lb_attributes <> [] then + raise Syntaxerr.(Error(Not_expecting(lb.lb_loc, "item attribute")));*) + Vb.mk ~attrs:lb.lb_attributes ~loc:lb.lb_loc lb.lb_pattern lb.lb_expression) + lbs.lbs_bindings + in + if lbs.lbs_extension <> None then + raise Syntaxerr.(Error(Not_expecting(lbs.lbs_loc, "extension"))); + mkclass(Pcl_let (lbs.lbs_rec, bindings, body)) - (* The function [reduce] takes care of reductions. It is invoked by - [resume] after an [AboutToReduce] event has been produced. *) +(* + * arity_conflict_resolving_mapper is triggered when both "implicit_arity" "explicit_arity" + * are in the attribtues. In that case we have to remove "explicit_arity" + * + * However, if we simply remove explicit_arity, we would end up with a + * wrapping tuple which has only one component (inner tuple). + * This is against the invariance where tuples must have 2+ components. + * Therefore, in the case we have to remove explicit_arity, we also need to + * unwrap the tuple to expose the inner tuple directly. + * + *) +let arity_conflict_resolving_mapper super = +{ super with + expr = begin fun mapper expr -> + match expr with + | {pexp_desc=Pexp_construct(lid, args); + pexp_loc; + pexp_attributes} when attributes_conflicted "implicit_arity" "explicit_arity" pexp_attributes -> + let new_args = + match args with + | Some {pexp_desc = Pexp_tuple [sp]} -> Some sp + | _ -> args in + super.expr mapper + {pexp_desc=Pexp_construct(lid, new_args); pexp_loc; pexp_attributes= + normalized_attributes "explicit_arity" pexp_attributes} + | x -> super.expr mapper x + end; + pat = begin fun mapper pattern -> + match pattern with + | {ppat_desc=Ppat_construct(lid, args); + ppat_loc; + ppat_attributes} when attributes_conflicted "implicit_arity" "explicit_arity" ppat_attributes -> + let new_args = + match args with + | Some {ppat_desc = Ppat_tuple [sp]} -> Some sp + | _ -> args in + super.pat mapper + {ppat_desc=Ppat_construct(lid, new_args); ppat_loc; ppat_attributes= + normalized_attributes "explicit_arity" ppat_attributes} + | x -> super.pat mapper x + end; +} - (* Here, the lookahead token CAN be [error]. *) +let reason_mapper = + default_mapper + |> reason_to_ml_swap_operator_mapper + |> arity_conflict_resolving_mapper - (* The production [prod] CANNOT be a start production. *) +let rec string_of_longident = function + | Lident s -> s + | Ldot(longPrefix, s) -> + s + | Lapply (y,s) -> string_of_longident s - and reduce env (prod : production) = +let built_in_explicit_arity_constructors = ["Some"; "Assert_failure"; "Match_failure"] - (* Log a reduction event. *) +let jsx_component module_name attrs children loc = + let firstPart = (List.hd (Longident.flatten module_name)) in + let lident = if String.get firstPart 0 != '_' && firstPart = String.capitalize firstPart then + (* firstPart will be non-empty so the 0th access is fine. Modules can't start with underscore *) + Ldot(module_name, "createElement") + else + Lident firstPart + in + let ident = mkloc lident loc in + let body = mkexp(Pexp_apply(mkexp(Pexp_ident ident) ~loc, attrs @ children)) ~loc in + let attribute = ({txt = "JSX"; loc = loc}, PStr []) in + { body with pexp_attributes = attribute :: body.pexp_attributes } - if log then - Log.reduce_or_accept prod; +(* We might raise some custom error messages in this file. + Do _not_ directly raise a Location.Error. Our public interface guarantees that we only throw Syntaxerr or Syntax_util.Error *) +let raiseSyntaxErrorFromSyntaxUtils loc fmt = + Printf.ksprintf + (fun msg -> raise Syntax_util.(Error(loc, (Syntax_error msg)))) + fmt - (* Invoke the semantic action. The semantic action is responsible for - truncating the stack and pushing a new cell onto the stack, which - contains a new semantic value. It can raise [Error]. *) +let ensureTagsAreEqual startTag endTag loc = + if startTag <> endTag then + let startTag = (String.concat "" (Longident.flatten startTag)) in + let endTag = (String.concat "" (Longident.flatten endTag)) in + raiseSyntaxErrorFromSyntaxUtils loc + "Start tag <%s> does not match end tag " startTag endTag - (* If the semantic action terminates normally, it returns a new stack, - which becomes the current stack. *) +let prepare_immutable_labels labels = + let prepare label = + if label.pld_mutable == Mutable then syntax_error(); + (label.pld_name.txt, label.pld_attributes, label.pld_type) + in + List.map prepare labels - (* If the semantic action raises [Error], we catch it and initiate error - handling. *) +type core_type_object = + | Core_type of core_type + | Record_type of label_declaration list - (* This [match/with/exception] construct requires OCaml 4.02. *) +(* `{. "foo": bar}` -> `Js.t {. foo: bar}` and {.. "foo": bar} -> `Js.t {.. foo: bar} *) +let mkBsObjTypeSugar ~loc ~closed rows = + let obj = mktyp ~loc (Ptyp_object (prepare_immutable_labels rows, closed)) in + let jsDotTCtor = { txt = Longident.parse "Js.t"; loc } in + Core_type(mktyp(Ptyp_constr(jsDotTCtor, [obj]))) - match T.semantic_action prod env with - | stack -> +let only_core_type t startp endp = + match t with + | Core_type ct -> ct + | Record_type _ -> + let loc = mklocation startp endp in + raiseSyntaxErrorFromSyntaxUtils loc "Record type is not allowed" - (* By our convention, the semantic action has produced an updated - stack. The state now found in the top stack cell is the return - state. *) +let doc_loc = {txt = "ocaml.doc"; loc = Location.none} - (* Perform a goto transition. The target state is determined - by consulting the goto table at the return state and at - production [prod]. *) +let doc_attr text loc = + let open Parsetree in + let exp = + { pexp_desc = Pexp_constant (Pconst_string(text, None)); + pexp_loc = loc; + pexp_attributes = []; } + in + let item = + { pstr_desc = Pstr_eval (exp, []); pstr_loc = exp.pexp_loc } + in + (doc_loc, PStr [item]) - let current = T.goto_prod stack.state prod in - let env = { env with stack; current } in - run env false - | exception Error -> - initiate env - - and accept env prod = - (* Log an accept event. *) - if log then - Log.reduce_or_accept prod; - (* Extract the semantic value out of the stack. *) - let v = env.stack.semv in - (* Finish. *) - Accepted v - - (* ------------------------------------------------------------------------ *) - - (* The following functions deal with errors. *) - - (* [initiate] initiates or resumes error handling. *) - - (* Here, the lookahead token CAN be [error]. *) - - and initiate env = - if log then - Log.initiating_error_handling(); - let env = { env with error = true } in - HandlingError env - - (* [error] handles errors. *) - - and error env = - assert env.error; - - (* Consult the column associated with the [error] pseudo-token in the - action table. *) - - T.action - env.current (* determines a row *) - T.error_terminal (* determines a column *) - T.error_value - error_shift (* shift continuation *) - error_reduce (* reduce continuation *) - error_fail (* failure continuation *) - env - - and error_shift env please_discard terminal value s' = - - (* Here, [terminal] is [T.error_terminal], - and [value] is [T.error_value]. *) - - assert (terminal = T.error_terminal && value = T.error_value); - - (* This state is capable of shifting the [error] token. *) - - if log then - Log.handling_error env.current; - shift env please_discard terminal value s' - - and error_reduce env prod = - - (* This state is capable of performing a reduction on [error]. *) - - if log then - Log.handling_error env.current; - reduce env prod - (* Intentionally calling [reduce] instead of [announce_reduce]. - It does not seem very useful, and it could be confusing, to - expose the reduction steps taken during error handling. *) - - and error_fail env = - - (* This state is unable to handle errors. Attempt to pop a stack - cell. *) - - let cell = env.stack in - let next = cell.next in - if next == cell then - - (* The stack is empty. Die. *) - - Rejected - - else begin - - (* The stack is nonempty. Pop a cell, updating the current state - with that found in the popped cell, and try again. *) - - let env = { env with - stack = next; - current = cell.state - } in - HandlingError env - - end - - (* End of the nest of tail recursive functions. *) - - (* ------------------------------------------------------------------------ *) - (* ------------------------------------------------------------------------ *) - - (* The incremental interface. See [EngineTypes]. *) - - (* [start s] begins the parsing process. *) - - let start (s : state) (initial : position) : semantic_value checkpoint = - - (* Build an empty stack. This is a dummy cell, which is its own successor. - Its [next] field WILL be accessed by [error_fail] if an error occurs and - is propagated all the way until the stack is empty. Its [endp] field WILL - be accessed (by a semantic action) if an epsilon production is reduced - when the stack is empty. *) - - let rec empty = { - state = s; (* dummy *) - semv = T.error_value; (* dummy *) - startp = initial; (* dummy *) - endp = initial; - next = empty; - } in - - (* Build an initial environment. *) - - (* Unfortunately, there is no type-safe way of constructing a - dummy token. Tokens carry semantic values, which in general - we cannot manufacture. This instance of [Obj.magic] could - be avoided by adopting a different representation (e.g., no - [env.error] field, and an option in the first component of - [env.triple]), but I like this representation better. *) - - let dummy_token = Obj.magic () in - let env = { - error = false; - triple = (dummy_token, initial, initial); (* dummy *) - stack = empty; - current = s; - } in - - (* Begin parsing. *) - - (* The parameter [please_discard] here is [true], which means we know - that we must read at least one token. This claim relies on the fact - that we have ruled out the two special cases where a start symbol - recognizes the empty language or the singleton language {epsilon}. *) - - run env true - - (* [offer checkpoint triple] is invoked by the user in response to a - checkpoint of the form [InputNeeded env]. It checks that [checkpoint] is - indeed of this form, and invokes [discard]. *) - - (* [resume checkpoint] is invoked by the user in response to a checkpoint of - the form [AboutToReduce (env, prod)] or [HandlingError env]. It checks - that [checkpoint] is indeed of this form, and invokes [reduce] or - [error], as appropriate. *) - - (* In reality, [offer] and [resume] accept an argument of type - [semantic_value checkpoint] and produce a checkpoint of the same type. - The choice of [semantic_value] is forced by the fact that this is the - parameter of the checkpoint [Accepted]. *) - - (* We change this as follows. *) - - (* We change the argument and result type of [offer] and [resume] from - [semantic_value checkpoint] to ['a checkpoint]. This is safe, in this - case, because we give the user access to values of type [t checkpoint] - only if [t] is indeed the type of the eventual semantic value for this - run. (More precisely, by examining the signatures [INCREMENTAL_ENGINE] - and [INCREMENTAL_ENGINE_START], one finds that the user can build a value - of type ['a checkpoint] only if ['a] is [semantic_value]. The table - back-end goes further than this and produces versions of [start] composed - with a suitable cast, which give the user access to a value of type - [t checkpoint] where [t] is the type of the start symbol.) *) - - let offer : 'a . 'a checkpoint -> - token * position * position -> - 'a checkpoint - = function - | InputNeeded env -> - Obj.magic discard env - | _ -> - invalid_arg "offer expects InputNeeded" - - let resume : 'a . 'a checkpoint -> 'a checkpoint = function - | HandlingError env -> - Obj.magic error env - | Shifting (_, env, please_discard) -> - Obj.magic run env please_discard - | AboutToReduce (env, prod) -> - Obj.magic reduce env prod - | _ -> - invalid_arg "resume expects HandlingError | Shifting | AboutToReduce" - - (* ------------------------------------------------------------------------ *) - (* ------------------------------------------------------------------------ *) - - (* The traditional interface. See [EngineTypes]. *) - - (* ------------------------------------------------------------------------ *) - - (* Wrapping a lexer and lexbuf as a token supplier. *) - - type supplier = - unit -> token * position * position - - let lexer_lexbuf_to_supplier - (lexer : Lexing.lexbuf -> token) - (lexbuf : Lexing.lexbuf) - : supplier = - fun () -> - let token = lexer lexbuf in - let startp = lexbuf.Lexing.lex_start_p - and endp = lexbuf.Lexing.lex_curr_p in - token, startp, endp - - (* ------------------------------------------------------------------------ *) - - (* The main loop repeatedly handles intermediate checkpoints, until a final - checkpoint is obtained. This allows implementing the monolithic interface - ([entry]) in terms of the incremental interface ([start], [offer], - [handle], [reduce]). *) - - (* By convention, acceptance is reported by returning a semantic value, - whereas rejection is reported by raising [Error]. *) - - (* [loop] is polymorphic in ['a]. No cheating is involved in achieving this. - All of the cheating resides in the types assigned to [offer] and [handle] - above. *) - - let rec loop : 'a . supplier -> 'a checkpoint -> 'a = - fun read checkpoint -> - match checkpoint with - | InputNeeded _ -> - (* The parser needs a token. Request one from the lexer, - and offer it to the parser, which will produce a new - checkpoint. Then, repeat. *) - let triple = read() in - let checkpoint = offer checkpoint triple in - loop read checkpoint - | Shifting _ - | AboutToReduce _ - | HandlingError _ -> - (* The parser has suspended itself, but does not need - new input. Just resume the parser. Then, repeat. *) - let checkpoint = resume checkpoint in - loop read checkpoint - | Accepted v -> - (* The parser has succeeded and produced a semantic value. - Return this semantic value to the user. *) - v - | Rejected -> - (* The parser rejects this input. Raise an exception. *) - raise Error - - let entry (s : state) lexer lexbuf : semantic_value = - let initial = lexbuf.Lexing.lex_curr_p in - loop (lexer_lexbuf_to_supplier lexer lexbuf) (start s initial) - - (* ------------------------------------------------------------------------ *) - - (* [loop_handle] stops if it encounters an error, and at this point, invokes - its failure continuation, without letting Menhir do its own traditional - error-handling (which involves popping the stack, etc.). *) - - let rec loop_handle succeed fail read checkpoint = - match checkpoint with - | InputNeeded _ -> - let triple = read() in - let checkpoint = offer checkpoint triple in - loop_handle succeed fail read checkpoint - | Shifting _ - | AboutToReduce _ -> - let checkpoint = resume checkpoint in - loop_handle succeed fail read checkpoint - | HandlingError _ - | Rejected -> - (* The parser has detected an error. Invoke the failure continuation. *) - fail checkpoint - | Accepted v -> - (* The parser has succeeded and produced a semantic value. Invoke the - success continuation. *) - succeed v - - (* ------------------------------------------------------------------------ *) - - (* [loop_handle_undo] is analogous to [loop_handle], except it passes a pair - of checkpoints to the failure continuation. - - The first (and oldest) checkpoint is the last [InputNeeded] checkpoint - that was encountered before the error was detected. The second (and - newest) checkpoint is where the error was detected, as in [loop_handle]. - Going back to the first checkpoint can be thought of as undoing any - reductions that were performed after seeing the problematic token. (These - reductions must be default reductions or spurious reductions.) *) - - let rec loop_handle_undo succeed fail read (inputneeded, checkpoint) = - match checkpoint with - | InputNeeded _ -> - (* Update the last recorded [InputNeeded] checkpoint. *) - let inputneeded = checkpoint in - let triple = read() in - let checkpoint = offer checkpoint triple in - loop_handle_undo succeed fail read (inputneeded, checkpoint) - | Shifting _ - | AboutToReduce _ -> - let checkpoint = resume checkpoint in - loop_handle_undo succeed fail read (inputneeded, checkpoint) - | HandlingError _ - | Rejected -> - fail inputneeded checkpoint - | Accepted v -> - succeed v - - (* For simplicity, we publish a version of [loop_handle_undo] that takes a - single checkpoint as an argument, instead of a pair of checkpoints. We - check that the argument is [InputNeeded _], and duplicate it. *) - - (* The parser cannot accept or reject before it asks for the very first - character of input. (Indeed, we statically reject a symbol that - generates the empty language or the singleton language {epsilon}.) - So, the [start] checkpoint must match [InputNeeded _]. Hence, it is - permitted to call [loop_handle_undo] with a [start] checkpoint. *) - - let loop_handle_undo succeed fail read checkpoint = - assert (match checkpoint with InputNeeded _ -> true | _ -> false); - loop_handle_undo succeed fail read (checkpoint, checkpoint) - - (* ------------------------------------------------------------------------ *) - - let rec shifts checkpoint = - match checkpoint with - | Shifting (env, _, _) -> - (* The parser is about to shift, which means it is willing to - consume the terminal symbol that we have fed it. Return the - state just before this transition. *) - Some env - | AboutToReduce _ -> - (* The parser wishes to reduce. Just follow. *) - shifts (resume checkpoint) - | HandlingError _ -> - (* The parser fails, which means it rejects the terminal symbol - that we have fed it. *) - None - | InputNeeded _ - | Accepted _ - | Rejected -> - (* None of these cases can arise. Indeed, after a token is submitted - to it, the parser must shift, reduce, or signal an error, before - it can request another token or terminate. *) - assert false - - let acceptable checkpoint token pos = - let triple = (token, pos, pos) in - let checkpoint = offer checkpoint triple in - match shifts checkpoint with - | None -> false - | Some _env -> true - - (* ------------------------------------------------------------------------ *) - - (* The type ['a lr1state] describes the (non-initial) states of the LR(1) - automaton. The index ['a] represents the type of the semantic value - associated with the state's incoming symbol. *) - - (* The type ['a lr1state] is defined as an alias for [state], which itself - is usually defined as [int] (see [TableInterpreter]). So, ['a lr1state] - is technically a phantom type, but should really be thought of as a GADT - whose data constructors happen to be represented as integers. It is - presented to the user as an abstract type (see [IncrementalEngine]). *) - - type 'a lr1state = - state - - (* ------------------------------------------------------------------------ *) - - (* Stack inspection. *) - - (* We offer a read-only view of the parser's state as a stream of elements. - Each element contains a pair of a (non-initial) state and a semantic - value associated with (the incoming symbol of) this state. Note that the - type [element] is an existential type. *) - - (* As of 2017/03/31, the type [stack] and the function [stack] are DEPRECATED. - If desired, they could now be implemented outside Menhir, by relying on - the functions [top] and [pop]. *) - - type element = - | Element: 'a lr1state * 'a * position * position -> element - - open General - - type stack = - element stream - - (* If [current] is the current state and [cell] is the top stack cell, - then [stack cell current] is a view of the parser's state as a stream - of elements. *) - - let rec stack cell current : element stream = - lazy ( - (* The stack is empty iff the top stack cell is its own successor. In - that case, the current state [current] should be an initial state - (which has no incoming symbol). - We do not allow the user to inspect this state. *) - let next = cell.next in - if next == cell then - Nil - else - (* Construct an element containing the current state [current] as well - as the semantic value contained in the top stack cell. This semantic - value is associated with the incoming symbol of this state, so it - makes sense to pair them together. The state has type ['a state] and - the semantic value has type ['a], for some type ['a]. Here, the OCaml - type-checker thinks ['a] is [semantic_value] and considers this code - well-typed. Outside, we will use magic to provide the user with a way - of inspecting states and recovering the value of ['a]. *) - let element = Element ( - current, - cell.semv, - cell.startp, - cell.endp - ) in - Cons (element, stack next cell.state) - ) - - let stack env : element stream = - stack env.stack env.current - - (* As explained above, the function [top] allows access to the top stack - element only if the stack is nonempty, i.e., only if the current state - is not an initial state. *) - - let top env : element option = - let cell = env.stack in - let next = cell.next in - if next == cell then - None - else - Some (Element (env.current, cell.semv, cell.startp, cell.endp)) - - (* [equal] compares the stacks for physical equality, and compares the - current states via their numbers (this seems cleaner than using OCaml's - polymorphic equality). *) - - (* The two fields that are not compared by [equal], namely [error] and - [triple], are overwritten by the function [discard], which handles - [InputNeeded] checkpoints. Thus, if [equal env1 env2] holds, then the - checkpoints [input_needed env1] and [input_needed env2] are - equivalent: they lead the parser to behave in the same way. *) - - let equal env1 env2 = - env1.stack == env2.stack && - number env1.current = number env2.current - - let current_state_number env = - number env.current - - (* ------------------------------------------------------------------------ *) - - (* Access to the position of the lookahead token. *) - - let positions { triple = (_, startp, endp); _ } = - startp, endp - - (* ------------------------------------------------------------------------ *) - - (* Access to information about default reductions. *) - - (* This can be a function of states, or a function of environments. - We offer both. *) - - (* Instead of a Boolean result, we could return a [production option]. - However, we would have to explicitly test whether [prod] is a start - production, and in that case, return [None], I suppose. Indeed, we - have decided not to expose the start productions. *) - - let state_has_default_reduction (state : _ lr1state) : bool = - T.default_reduction state - (fun _env _prod -> true) - (fun _env -> false) - () - - let env_has_default_reduction env = - state_has_default_reduction env.current - - (* ------------------------------------------------------------------------ *) - - (* The following functions work at the level of environments (as opposed to - checkpoints). The function [pop] causes the automaton to go back into the - past, pretending that the last input symbol has never been read. The - function [force_reduction] causes the automaton to re-interpret the past, - by recognizing the right-hand side of a production and reducing this - production. The function [feed] causes the automaton to progress into the - future by pretending that a (terminal or nonterminal) symbol has been - read. *) - - (* The function [feed] would ideally be defined here. However, for this - function to be type-safe, the GADT ['a symbol] is needed. For this - reason, we move its definition to [InspectionTableInterpreter], where - the inspection API is available. *) - - (* [pop] pops one stack cell. It cannot go wrong. *) - - let pop (env : 'a env) : 'a env option = - let cell = env.stack in - let next = cell.next in - if next == cell then - (* The stack is empty. *) - None - else - (* The stack is nonempty. Pop off one cell. *) - Some { env with stack = next; current = cell.state } - - (* [force_reduction] is analogous to [reduce], except that it does not - continue by calling [run env] or [initiate env]. Instead, it returns - [env] to the user. *) - - (* [force_reduction] is dangerous insofar as it executes a semantic action. - This semantic action could have side effects: nontermination, state, - exceptions, input/output, etc. *) - - let force_reduction prod (env : 'a env) : 'a env = - (* Check if this reduction is permitted. This check is REALLY important. - The stack must have the correct shape: that is, it must be sufficiently - high, and must contain semantic values of appropriate types, otherwise - the semantic action will crash and burn. *) - (* We currently check whether the current state is WILLING to reduce this - production (i.e., there is a reduction action in the action table row - associated with this state), whereas it would be more liberal to check - whether this state is CAPABLE of reducing this production (i.e., the - stack has an appropriate shape). We currently have no means of - performing such a check. *) - if not (T.may_reduce env.current prod) then - invalid_arg "force_reduction: this reduction is not permitted in this state" - else begin - (* We do not expose the start productions to the user, so this cannot be - a start production. Hence, it has a semantic action. *) - assert (not (T.is_start prod)); - (* Invoke the semantic action. *) - let stack = T.semantic_action prod env in - (* Perform a goto transition. *) - let current = T.goto_prod stack.state prod in - { env with stack; current } - end - - (* The environment manipulation functions -- [pop] and [force_reduction] - above, plus [feed] -- manipulate the automaton's stack and current state, - but do not affect the automaton's lookahead symbol. When the function - [input_needed] is used to go back from an environment to a checkpoint - (and therefore, resume normal parsing), the lookahead symbol is clobbered - anyway, since the only action that the user can take is to call [offer]. - So far, so good. One problem, though, is that this call to [offer] may - well place the automaton in a configuration of a state [s] and a - lookahead symbol [t] that is normally unreachable. Also, perhaps the - state [s] is a state where an input symbol normally is never demanded, so - this [InputNeeded] checkpoint is fishy. There does not seem to be a deep - problem here, but, when programming an error recovery strategy, one - should pay some attention to this issue. Ideally, perhaps, one should use - [input_needed] only in a state [s] where an input symbol is normally - demanded, that is, a state [s] whose incoming symbol is a terminal symbol - and which does not have a default reduction on [#]. *) - - let input_needed (env : 'a env) : 'a checkpoint = - InputNeeded env - - (* The following functions are compositions of [top] and [pop]. *) - - let rec pop_many i env = - if i = 0 then - Some env - else match pop env with - | None -> - None - | Some env -> - pop_many (i - 1) env - - let get i env = - match pop_many i env with - | None -> - None - | Some env -> - top env - -end -end -module ErrorReports = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* -------------------------------------------------------------------------- *) - -(* A two-place buffer stores zero, one, or two elements. *) - -type 'a content = -| Zero -| One of 'a -| Two of 'a * (* most recent: *) 'a - -type 'a buffer = - 'a content ref - -(* [update buffer x] pushes [x] into [buffer], causing the buffer to slide. *) - -let update buffer x = - buffer := - match !buffer, x with - | Zero, _ -> - One x - | One x1, x2 - | Two (_, x1), x2 -> - Two (x1, x2) - -(* [show f buffer] prints the contents of the buffer. The function [f] is - used to print an element. *) - -let show f buffer : string = - match !buffer with - | Zero -> - (* The buffer cannot be empty. If we have read no tokens, - we cannot have detected a syntax error. *) - assert false - | One invalid -> - (* It is unlikely, but possible, that we have read just one token. *) - Printf.sprintf "before '%s'" (f invalid) - | Two (valid, invalid) -> - (* In the most likely case, we have read two tokens. *) - Printf.sprintf "after '%s' and before '%s'" (f valid) (f invalid) - -(* [last buffer] returns the last element of the buffer (that is, the invalid - token). *) - -let last buffer = - match !buffer with - | Zero -> - (* The buffer cannot be empty. If we have read no tokens, - we cannot have detected a syntax error. *) - assert false - | One invalid - | Two (_, invalid) -> - invalid - -(* [wrap buffer lexer] *) - -open Lexing - -let wrap lexer = - let buffer = ref Zero in - buffer, - fun lexbuf -> - let token = lexer lexbuf in - update buffer (lexbuf.lex_start_p, lexbuf.lex_curr_p); - token - -(* -------------------------------------------------------------------------- *) -end -module Printers = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -module Make - (I : IncrementalEngine.EVERYTHING) - (User : sig - val print: string -> unit - val print_symbol: I.xsymbol -> unit - val print_element: (I.element -> unit) option - end) -= struct - - let arrow = " -> " - let dot = "." - let space = " " - let newline = "\n" - - open User - open I - - (* Printing a list of symbols. An optional dot is printed at offset - [i] into the list [symbols], if this offset lies between [0] and - the length of the list (included). *) - - let rec print_symbols i symbols = - if i = 0 then begin - print dot; - print space; - print_symbols (-1) symbols - end - else begin - match symbols with - | [] -> - () - | symbol :: symbols -> - print_symbol symbol; - print space; - print_symbols (i - 1) symbols - end - - (* Printing an element as a symbol. *) - - let print_element_as_symbol element = - match element with - | Element (s, _, _, _) -> - print_symbol (X (incoming_symbol s)) - - (* Some of the functions that follow need an element printer. They use - [print_element] if provided by the user; otherwise they use - [print_element_as_symbol]. *) - - let print_element = - match print_element with - | Some print_element -> - print_element - | None -> - print_element_as_symbol - - (* Printing a stack as a list of symbols. Stack bottom on the left, - stack top on the right. *) - - let rec print_stack env = - match top env, pop env with - | Some element, Some env -> - print_stack env; - print space; - print_element element - | _, _ -> - () - - let print_stack env = - print_stack env; - print newline - - (* Printing an item. *) - - let print_item (prod, i) = - print_symbol (lhs prod); - print arrow; - print_symbols i (rhs prod); - print newline - - (* Printing a list of symbols (public version). *) - - let print_symbols symbols = - print_symbols (-1) symbols - - (* Printing a production (without a dot). *) - - let print_production prod = - print_item (prod, -1) - - (* Printing the current LR(1) state. *) - - let print_current_state env = - print "Current LR(1) state: "; - match top env with - | None -> - print ""; (* TEMPORARY unsatisfactory *) - print newline - | Some (Element (current, _, _, _)) -> - print (string_of_int (number current)); - print newline; - List.iter print_item (items current) - - let print_env env = - print_stack env; - print_current_state env; - print newline - -end -end -module InfiniteArray = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(** This module implements infinite arrays, that is, arrays that grow - transparently upon demand. *) - -type 'a t = { - default: 'a; - mutable table: 'a array; - mutable extent: int; (* the index of the greatest [set] ever, plus one *) - } - -let default_size = - 16384 (* must be non-zero *) - -let make x = { - default = x; - table = Array.make default_size x; - extent = 0; -} - -let rec new_length length i = - if i < length then - length - else - new_length (2 * length) i - -let ensure a i = - assert (0 <= i); - let table = a.table in - let length = Array.length table in - if i >= length then begin - let table' = Array.make (new_length (2 * length) i) a.default in - Array.blit table 0 table' 0 length; - a.table <- table' - end - -let get a i = - ensure a i; - Array.unsafe_get a.table (i) - -let set a i x = - ensure a i; - Array.unsafe_set a.table (i) x; - if a.extent <= i then - a.extent <- i + 1 - -let extent a = - a.extent - -let domain a = - Array.sub a.table 0 a.extent - -end -module PackedIntArray = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* A packed integer array is represented as a pair of an integer [k] and - a string [s]. The integer [k] is the number of bits per integer that we - use. The string [s] is just an array of bits, which is read in 8-bit - chunks. *) - -(* The ocaml programming language treats string literals and array literals - in slightly different ways: the former are statically allocated, while - the latter are dynamically allocated. (This is rather arbitrary.) In the - context of Menhir's table-based back-end, where compact, immutable - integer arrays are needed, ocaml strings are preferable to ocaml arrays. *) - -type t = - int * string - -(* The magnitude [k] of an integer [v] is the number of bits required - to represent [v]. It is rounded up to the nearest power of two, so - that [k] divides [Sys.word_size]. *) - -let magnitude (v : int) = - if v < 0 then - Sys.word_size - else - let rec check k max = (* [max] equals [2^k] *) - if (max <= 0) || (v < max) then - k - (* if [max] just overflew, then [v] requires a full ocaml - integer, and [k] is the number of bits in an ocaml integer - plus one, that is, [Sys.word_size]. *) - else - check (2 * k) (max * max) - in - check 1 2 - -(* [pack a] turns an array of integers into a packed integer array. *) - -(* Because the sign bit is the most significant bit, the magnitude of - any negative number is the word size. In other words, [pack] does - not achieve any space savings as soon as [a] contains any negative - numbers, even if they are ``small''. *) - -let pack (a : int array) : t = - - let m = Array.length a in - - (* Compute the maximum magnitude of the array elements. This tells - us how many bits per element we are going to use. *) - - let k = - Array.fold_left (fun k v -> - max k (magnitude v) - ) 1 a - in - - (* Because access to ocaml strings is performed on an 8-bit basis, - two cases arise. If [k] is less than 8, then we can pack multiple - array entries into a single character. If [k] is greater than 8, - then we must use multiple characters to represent a single array - entry. *) - - if k <= 8 then begin - - (* [w] is the number of array entries that we pack in a character. *) - - assert (8 mod k = 0); - let w = 8 / k in - - (* [n] is the length of the string that we allocate. *) - - let n = - if m mod w = 0 then - m / w - else - m / w + 1 - in - - let s = - Bytes.create n - in - - (* Define a reader for the source array. The reader might run off - the end if [w] does not divide [m]. *) - - let i = ref 0 in - let next () = - let ii = !i in - if ii = m then - 0 (* ran off the end, pad with zeroes *) - else - let v = a.(ii) in - i := ii + 1; - v - in - - (* Fill up the string. *) - - for j = 0 to n - 1 do - let c = ref 0 in - for _x = 1 to w do - c := (!c lsl k) lor next() - done; - Bytes.set s j (Char.chr !c) - done; - - (* Done. *) - - k, Bytes.unsafe_to_string s - - end - else begin (* k > 8 *) - - (* [w] is the number of characters that we use to encode an array entry. *) - - assert (k mod 8 = 0); - let w = k / 8 in - - (* [n] is the length of the string that we allocate. *) - - let n = - m * w - in - - let s = - Bytes.create n - in - - (* Fill up the string. *) - - for i = 0 to m - 1 do - let v = ref a.(i) in - for x = 1 to w do - Bytes.set s ((i + 1) * w - x) (Char.chr (!v land 255)); - v := !v lsr 8 - done - done; - - (* Done. *) - - k, Bytes.unsafe_to_string s - - end - -(* Access to a string. *) - -let read (s : string) (i : int) : int = - Char.code (String.unsafe_get s i) - -(* [get1 t i] returns the integer stored in the packed array [t] at index [i]. - It assumes (and does not check) that the array's bit width is [1]. The - parameter [t] is just a string. *) - -let get1 (s : string) (i : int) : int = - let c = read s (i lsr 3) in - let c = c lsr ((lnot i) land 0b111) in - let c = c land 0b1 in - c - -(* [get t i] returns the integer stored in the packed array [t] at index [i]. *) - -(* Together, [pack] and [get] satisfy the following property: if the index [i] - is within bounds, then [get (pack a) i] equals [a.(i)]. *) - -let get ((k, s) : t) (i : int) : int = - match k with - | 1 -> - get1 s i - | 2 -> - let c = read s (i lsr 2) in - let c = c lsr (2 * ((lnot i) land 0b11)) in - let c = c land 0b11 in - c - | 4 -> - let c = read s (i lsr 1) in - let c = c lsr (4 * ((lnot i) land 0b1)) in - let c = c land 0b1111 in - c - | 8 -> - read s i - | 16 -> - let j = 2 * i in - (read s j) lsl 8 + read s (j + 1) - | _ -> - assert (k = 32); (* 64 bits unlikely, not supported *) - let j = 4 * i in - (((read s j lsl 8) + read s (j + 1)) lsl 8 + read s (j + 2)) lsl 8 + read s (j + 3) - -(* [unflatten1 (n, data) i j] accesses the two-dimensional bitmap - represented by [(n, data)] at indices [i] and [j]. The integer - [n] is the width of the bitmap; the string [data] is the second - component of the packed array obtained by encoding the table as - a one-dimensional array. *) - -let unflatten1 (n, data) i j = - get1 data (n * i + j) - -end -module RowDisplacement = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* This module compresses a two-dimensional table, where some values - are considered insignificant, via row displacement. *) - -(* This idea reportedly appears in Aho and Ullman's ``Principles - of Compiler Design'' (1977). It is evaluated in Tarjan and Yao's - ``Storing a Sparse Table'' (1979) and in Dencker, Dürre, and Heuft's - ``Optimization of Parser Tables for Portable Compilers'' (1984). *) - -(* A compressed table is represented as a pair of arrays. The - displacement array is an array of offsets into the data array. *) - -type 'a table = - int array * (* displacement *) - 'a array (* data *) - -(* In a natural version of this algorithm, displacements would be greater - than (or equal to) [-n]. However, in the particular setting of Menhir, - both arrays are intended to be compressed with [PackedIntArray], which - does not efficiently support negative numbers. For this reason, we are - careful not to produce negative displacements. *) - -(* In order to avoid producing negative displacements, we simply use the - least significant bit as the sign bit. This is implemented by [encode] - and [decode] below. *) - -(* One could also think, say, of adding [n] to every displacement, so as - to ensure that all displacements are nonnegative. This would work, but - would require [n] to be published, for use by the decoder. *) - -let encode (displacement : int) : int = - if displacement >= 0 then - displacement lsl 1 - else - (-displacement) lsl 1 + 1 - -let decode (displacement : int) : int = - if displacement land 1 = 0 then - displacement lsr 1 - else - -(displacement lsr 1) - -(* It is reasonable to assume that, as matrices grow large, their - density becomes low, i.e., they have many insignificant entries. - As a result, it is important to work with a sparse data structure - for rows. We internally represent a row as a list of its - significant entries, where each entry is a pair of a [j] index and - an element. *) - -type 'a row = - (int * 'a) list - -(* [compress equal insignificant dummy m n t] turns the two-dimensional table - [t] into a compressed table. The parameter [equal] is equality of data - values. The parameter [wildcard] tells which data values are insignificant, - and can thus be overwritten with other values. The parameter [dummy] is - used to fill holes in the data array. [m] and [n] are the integer - dimensions of the table [t]. *) - -let compress - (equal : 'a -> 'a -> bool) - (insignificant : 'a -> bool) - (dummy : 'a) - (m : int) (n : int) - (t : 'a array array) - : 'a table = - - (* Be defensive. *) - - assert (Array.length t = m); - assert begin - for i = 0 to m - 1 do - assert (Array.length t.(i) = n) - done; - true - end; - - (* This turns a row-as-array into a row-as-sparse-list. The row is - accompanied by its index [i] and by its rank (the number of its - significant entries, that is, the length of the row-as-a-list. *) - - let sparse (i : int) (line : 'a array) : int * int * 'a row (* index, rank, row *) = - - let rec loop (j : int) (rank : int) (row : 'a row) = - if j < 0 then - i, rank, row - else - let x = line.(j) in - if insignificant x then - loop (j - 1) rank row - else - loop (j - 1) (1 + rank) ((j, x) :: row) - in - - loop (n - 1) 0 [] - - in - - (* Construct an array of all rows, together with their index and rank. *) - - let rows : (int * int * 'a row) array = (* index, rank, row *) - Array.mapi sparse t - in - - (* Sort this array by decreasing rank. This does not have any impact - on correctness, but reportedly improves compression. The - intuitive idea is that rows with few significant elements are - easy to fit, so they should be inserted last, after the problem - has become quite constrained by fitting the heavier rows. This - heuristic is attributed to Ziegler. *) - - Array.fast_sort (fun (_, rank1, _) (_, rank2, _) -> - compare rank2 rank1 - ) rows; - - (* Allocate a one-dimensional array of displacements. *) - - let displacement : int array = - Array.make m 0 - in - - (* Allocate a one-dimensional, infinite array of values. Indices - into this array are written [k]. *) - - let data : 'a InfiniteArray.t = - InfiniteArray.make dummy - in - - (* Determine whether [row] fits at offset [k] within the current [data] - array, up to extension of this array. *) - - (* Note that this check always succeeds when [k] equals the length of - the [data] array. Indeed, the loop is then skipped. This property - guarantees the termination of the recursive function [fit] below. *) - - let fits k (row : 'a row) : bool = - - let d = InfiniteArray.extent data in - - let rec loop = function - | [] -> - true - | (j, x) :: row -> - - (* [x] is a significant element. *) - - (* By hypothesis, [k + j] is nonnegative. If it is greater than or - equal to the current length of the data array, stop -- the row - fits. *) - - assert (k + j >= 0); - - if k + j >= d then - true - - (* We now know that [k + j] is within bounds of the data - array. Check whether it is compatible with the element [y] found - there. If it is, continue. If it isn't, stop -- the row does not - fit. *) - - else - let y = InfiniteArray.get data (k + j) in - if insignificant y || equal x y then - loop row - else - false - - in - loop row - - in - - (* Find the leftmost position where a row fits. *) - - (* If the leftmost significant element in this row is at offset [j], - then we can hope to fit as far left as [-j] -- so this element - lands at offset [0] in the data array. *) - - (* Note that displacements may be negative. This means that, for - insignificant elements, accesses to the data array could fail: they could - be out of bounds, either towards the left or towards the right. This is - not a problem, as long as [get] is invoked only at significant - elements. *) - - let rec fit k row : int = - if fits k row then - k - else - fit (k + 1) row - in - - let fit row = - match row with - | [] -> - 0 (* irrelevant *) - | (j, _) :: _ -> - fit (-j) row - in - - (* Write [row] at (compatible) offset [k]. *) - - let rec write k = function - | [] -> - () - | (j, x) :: row -> - InfiniteArray.set data (k + j) x; - write k row - in - - (* Iterate over the sorted array of rows. Fit and write each row at - the leftmost compatible offset. Update the displacement table. *) - - Array.iter (fun (i, _, row) -> - let k = fit row in (* if [row] has leading insignificant elements, then [k] can be negative *) - write k row; - displacement.(i) <- encode k - ) rows; - - (* Return the compressed tables. *) - - displacement, InfiniteArray.domain data - -(* [get ct i j] returns the value found at indices [i] and [j] in the - compressed table [ct]. This function call is permitted only if the - value found at indices [i] and [j] in the original table is - significant -- otherwise, it could fail abruptly. *) - -(* Together, [compress] and [get] have the property that, if the value - found at indices [i] and [j] in an uncompressed table [t] is - significant, then [get (compress t) i j] is equal to that value. *) - -let get (displacement, data) i j = - assert (0 <= i && i < Array.length displacement); - let k = decode displacement.(i) in - assert (0 <= k + j && k + j < Array.length data); - (* failure of this assertion indicates an attempt to access an - insignificant element that happens to be mapped out of the bounds - of the [data] array. *) - data.(k + j) - -(* [getget] is a variant of [get] which only requires read access, - via accessors, to the two components of the table. *) - -let getget get_displacement get_data (displacement, data) i j = - let k = decode (get_displacement displacement i) in - get_data data (k + j) -end -module LinearizedArray = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* The [entry] array contains offsets into the [data] array. It has [n+1] - elements if the original (unencoded) array has [n] elements. The value - of [entry.(n)] is the length of the [data] array. This convention is - natural and allows avoiding a special case. *) - -type 'a t = - (* data: *) 'a array * - (* entry: *) int array - -let make (a : 'a array array) : 'a t = - let n = Array.length a in - (* Build the entry array. *) - let size = ref 0 in - let entry = Array.init (n + 1) (fun i -> - let s = !size in - if i < n then - size := s + Array.length a.(i); - s - ) in - assert (entry.(n) = !size); - (* Build the data array. *) - let i = ref 0 - and j = ref 0 in - let data = Array.init !size (fun _ -> - while !j = Array.length a.(!i) do - i := !i + 1; - j := 0; - done; - let x = a.(!i).(!j) in - j := !j + 1; - x - ) in - data, entry - -let length ((_, entry) : 'a t) : int = - Array.length entry - -let row_length ((_, entry) : 'a t) i : int = - entry.(i + 1) - entry.(i) - -let row_length_via get_entry i = - get_entry (i + 1) - get_entry i - -let read ((data, entry) as la : 'a t) i j : 'a = - assert (0 <= j && j < row_length la i); - data.(entry.(i) + j) - -let read_via get_data get_entry i j = - assert (0 <= j && j < row_length_via get_entry i); - get_data (get_entry i + j) - -let write ((data, entry) as la : 'a t) i j (v : 'a) : unit = - assert (0 <= j && j < row_length la i); - data.(entry.(i) + j) <- v - -let rec read_interval_via get_data i j = - if i = j then - [] - else - get_data i :: read_interval_via get_data (i + 1) j - -let read_row_via get_data get_entry i = - read_interval_via get_data (get_entry i) (get_entry (i + 1)) - -let read_row ((data, entry) : 'a t) i : 'a list = - read_row_via (Array.get data) (Array.get entry) i - -end -module TableFormat = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* This signature defines the format of the parse tables. It is used as - an argument to [TableInterpreter.Make]. *) - -module type TABLES = sig - - (* This is the parser's type of tokens. *) - - type token - - (* This maps a token to its internal (generation-time) integer code. *) - - val token2terminal: token -> int - - (* This is the integer code for the error pseudo-token. *) - - val error_terminal: int - - (* This maps a token to its semantic value. *) - - val token2value: token -> Obj.t - - (* Traditionally, an LR automaton is described by two tables, namely, an - action table and a goto table. See, for instance, the Dragon book. - - The action table is a two-dimensional matrix that maps a state and a - lookahead token to an action. An action is one of: shift to a certain - state, reduce a certain production, accept, or fail. - - The goto table is a two-dimensional matrix that maps a state and a - non-terminal symbol to either a state or undefined. By construction, this - table is sparse: its undefined entries are never looked up. A compression - technique is free to overlap them with other entries. - - In Menhir, things are slightly different. If a state has a default - reduction on token [#], then that reduction must be performed without - consulting the lookahead token. As a result, we must first determine - whether that is the case, before we can obtain a lookahead token and use it - as an index in the action table. - - Thus, Menhir's tables are as follows. - - A one-dimensional default reduction table maps a state to either ``no - default reduction'' (encoded as: 0) or ``by default, reduce prod'' - (encoded as: 1 + prod). The action table is looked up only when there - is no default reduction. *) - - val default_reduction: PackedIntArray.t - - (* Menhir follows Dencker, Dürre and Heuft, who point out that, although the - action table is not sparse by nature (i.e., the error entries are - significant), it can be made sparse by first factoring out a binary error - matrix, then replacing the error entries in the action table with undefined - entries. Thus: - - A two-dimensional error bitmap maps a state and a terminal to either - ``fail'' (encoded as: 0) or ``do not fail'' (encoded as: 1). The action - table, which is now sparse, is looked up only in the latter case. *) - - (* The error bitmap is flattened into a one-dimensional table; its width is - recorded so as to allow indexing. The table is then compressed via - [PackedIntArray]. The bit width of the resulting packed array must be - [1], so it is not explicitly recorded. *) - - (* The error bitmap does not contain a column for the [#] pseudo-terminal. - Thus, its width is [Terminal.n - 1]. We exploit the fact that the integer - code assigned to [#] is greatest: the fact that the right-most column - in the bitmap is missing does not affect the code for accessing it. *) - - val error: int (* width of the bitmap *) * string (* second component of [PackedIntArray.t] *) - - (* A two-dimensional action table maps a state and a terminal to one of - ``shift to state s and discard the current token'' (encoded as: s | 10), - ``shift to state s without discarding the current token'' (encoded as: s | - 11), or ``reduce prod'' (encoded as: prod | 01). *) - - (* The action table is first compressed via [RowDisplacement], then packed - via [PackedIntArray]. *) - - (* Like the error bitmap, the action table does not contain a column for the - [#] pseudo-terminal. *) - - val action: PackedIntArray.t * PackedIntArray.t - - (* A one-dimensional lhs table maps a production to its left-hand side (a - non-terminal symbol). *) - - val lhs: PackedIntArray.t - - (* A two-dimensional goto table maps a state and a non-terminal symbol to - either undefined (encoded as: 0) or a new state s (encoded as: 1 + s). *) - - (* The goto table is first compressed via [RowDisplacement], then packed - via [PackedIntArray]. *) - - val goto: PackedIntArray.t * PackedIntArray.t - - (* The number of start productions. A production [prod] is a start - production if and only if [prod < start] holds. This is also the - number of start symbols. A nonterminal symbol [nt] is a start - symbol if and only if [nt < start] holds. *) - - val start: int - - (* A one-dimensional semantic action table maps productions to semantic - actions. The calling convention for semantic actions is described in - [EngineTypes]. This table contains ONLY NON-START PRODUCTIONS, so the - indexing is off by [start]. Be careful. *) - - val semantic_action: ((int, Obj.t, token) EngineTypes.env -> - (int, Obj.t) EngineTypes.stack) array - - (* The parser defines its own [Error] exception. This exception can be - raised by semantic actions and caught by the engine, and raised by the - engine towards the final user. *) - - exception Error - - (* The parser indicates whether to generate a trace. Generating a - trace requires two extra tables, which respectively map a - terminal symbol and a production to a string. *) - - val trace: (string array * string array) option - -end -end -module InspectionTableFormat = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* This signature defines the format of the tables that are produced (in - addition to the tables described in [TableFormat]) when the command line - switch [--inspection] is enabled. It is used as an argument to - [InspectionTableInterpreter.Make]. *) - -module type TABLES = sig - - (* The types of symbols. *) - - include IncrementalEngine.SYMBOLS - - (* The type ['a lr1state] describes an LR(1) state. The generated parser defines - it internally as [int]. *) - - type 'a lr1state - - (* Some of the tables that follow use encodings of (terminal and - nonterminal) symbols as integers. So, we need functions that - map the integer encoding of a symbol to its algebraic encoding. *) - - val terminal: int -> xsymbol - val nonterminal: int -> xsymbol - - (* The left-hand side of every production already appears in the - signature [TableFormat.TABLES], so we need not repeat it here. *) - - (* The right-hand side of every production. This a linearized array - of arrays of integers, whose [data] and [entry] components have - been packed. The encoding of symbols as integers in described in - [TableBackend]. *) - - val rhs: PackedIntArray.t * PackedIntArray.t - - (* A mapping of every (non-initial) state to its LR(0) core. *) - - val lr0_core: PackedIntArray.t - - (* A mapping of every LR(0) state to its set of LR(0) items. Each item is - represented in its packed form (see [Item]) as an integer. Thus the - mapping is an array of arrays of integers, which is linearized and - packed, like [rhs]. *) - - val lr0_items: PackedIntArray.t * PackedIntArray.t - - (* A mapping of every LR(0) state to its incoming symbol, if it has one. *) - - val lr0_incoming: PackedIntArray.t - - (* A table that tells which non-terminal symbols are nullable. *) - - val nullable: string - (* This is a packed int array of bit width 1. It can be read - using [PackedIntArray.get1]. *) - - (* A two-table dimensional table, indexed by a nonterminal symbol and - by a terminal symbol (other than [#]), encodes the FIRST sets. *) - - val first: int (* width of the bitmap *) * string (* second component of [PackedIntArray.t] *) - -end - -end -module InspectionTableInterpreter = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -(* -------------------------------------------------------------------------- *) - -(* The type functor. *) - -module Symbols (T : sig - - type 'a terminal - type 'a nonterminal - -end) = struct - - open T - - (* This should be the only place in the whole library (and generator!) - where these types are defined. *) - - type 'a symbol = - | T : 'a terminal -> 'a symbol - | N : 'a nonterminal -> 'a symbol - - type xsymbol = - | X : 'a symbol -> xsymbol - -end - -(* -------------------------------------------------------------------------- *) - -(* The code functor. *) - -module Make - (TT : TableFormat.TABLES) - (IT : InspectionTableFormat.TABLES - with type 'a lr1state = int) - (ET : EngineTypes.TABLE - with type terminal = int - and type nonterminal = int - and type semantic_value = Obj.t) - (E : sig - type 'a env = (ET.state, ET.semantic_value, ET.token) EngineTypes.env - end) -= struct - - (* Including [IT] is an easy way of inheriting the definitions of the types - [symbol] and [xsymbol]. *) - - include IT - - (* This auxiliary function decodes a packed linearized array, as created by - [TableBackend.linearize_and_marshal1]. Here, we read a row all at once. *) - - let read_packed_linearized - (data, entry : PackedIntArray.t * PackedIntArray.t) (i : int) : int list - = - LinearizedArray.read_row_via - (PackedIntArray.get data) - (PackedIntArray.get entry) - i - - (* This auxiliary function decodes a symbol. The encoding was done by - [encode_symbol] or [encode_symbol_option] in the table back-end. *) - - let decode_symbol (symbol : int) : IT.xsymbol = - (* If [symbol] is 0, then we have no symbol. This could mean e.g. - that the function [incoming_symbol] has been applied to an - initial state. In principle, this cannot happen. *) - assert (symbol > 0); - (* The low-order bit distinguishes terminal and nonterminal symbols. *) - let kind = symbol land 1 in - let symbol = symbol lsr 1 in - if kind = 0 then - IT.terminal (symbol - 1) - else - IT.nonterminal symbol - - (* These auxiliary functions convert a symbol to its integer code. For speed - and for convenience, we use an unsafe type cast. This relies on the fact - that the data constructors of the [terminal] and [nonterminal] GADTs are - declared in an order that reflects their internal code. In the case of - nonterminal symbols, we add [start] to account for the presence of the - start symbols. *) - - let n2i (nt : 'a IT.nonterminal) : int = - let answer = TT.start + Obj.magic nt in - (* For safety, check that the above cast produced a correct result. *) - assert (IT.nonterminal answer = X (N nt)); - answer - - let t2i (t : 'a IT.terminal) : int = - let answer = Obj.magic t in - (* For safety, check that the above cast produced a correct result. *) - assert (IT.terminal answer = X (T t)); - answer - - (* Ordering functions. *) - - let compare_terminals t1 t2 = - (* Subtraction is safe because overflow is impossible. *) - t2i t1 - t2i t2 - - let compare_nonterminals nt1 nt2 = - (* Subtraction is safe because overflow is impossible. *) - n2i nt1 - n2i nt2 - - let compare_symbols symbol1 symbol2 = - match symbol1, symbol2 with - | X (T _), X (N _) -> - -1 - | X (N _), X (T _) -> - 1 - | X (T t1), X (T t2) -> - compare_terminals t1 t2 - | X (N nt1), X (N nt2) -> - compare_nonterminals nt1 nt2 - - let compare_productions prod1 prod2 = - (* Subtraction is safe because overflow is impossible. *) - prod1 - prod2 - - let compare_items (prod1, index1) (prod2, index2) = - let c = compare_productions prod1 prod2 in - (* Subtraction is safe because overflow is impossible. *) - if c <> 0 then c else index1 - index2 - - (* The function [incoming_symbol] goes through the tables [IT.lr0_core] and - [IT.lr0_incoming]. This yields a representation of type [xsymbol], out of - which we strip the [X] quantifier, so as to get a naked symbol. This last - step is ill-typed and potentially dangerous. It is safe only because this - function is used at type ['a lr1state -> 'a symbol], which forces an - appropriate choice of ['a]. *) - - let incoming_symbol (s : 'a IT.lr1state) : 'a IT.symbol = - let core = PackedIntArray.get IT.lr0_core s in - let symbol = decode_symbol (PackedIntArray.get IT.lr0_incoming core) in - match symbol with - | IT.X symbol -> - Obj.magic symbol - - (* The function [lhs] reads the table [TT.lhs] and uses [IT.nonterminal] - to decode the symbol. *) - - let lhs prod = - IT.nonterminal (PackedIntArray.get TT.lhs prod) - - (* The function [rhs] reads the table [IT.rhs] and uses [decode_symbol] - to decode the symbol. *) - - let rhs prod = - List.map decode_symbol (read_packed_linearized IT.rhs prod) - - (* The function [items] maps the LR(1) state [s] to its LR(0) core, - then uses [core] as an index into the table [IT.lr0_items]. The - items are then decoded by the function [export] below, which is - essentially a copy of [Item.export]. *) - - type item = - int * int - - let export t : item = - (t lsr 7, t mod 128) - - let items s = - (* Map [s] to its LR(0) core. *) - let core = PackedIntArray.get IT.lr0_core s in - (* Now use [core] to look up the table [IT.lr0_items]. *) - List.map export (read_packed_linearized IT.lr0_items core) - - (* The function [nullable] maps the nonterminal symbol [nt] to its - integer code, which it uses to look up the array [IT.nullable]. - This yields 0 or 1, which we map back to a Boolean result. *) - - let decode_bool i = - assert (i = 0 || i = 1); - i = 1 - - let nullable nt = - decode_bool (PackedIntArray.get1 IT.nullable (n2i nt)) - - (* The function [first] maps the symbols [nt] and [t] to their integer - codes, which it uses to look up the matrix [IT.first]. *) - - let first nt t = - decode_bool (PackedIntArray.unflatten1 IT.first (n2i nt) (t2i t)) - - let xfirst symbol t = - match symbol with - | X (T t') -> - compare_terminals t t' = 0 - | X (N nt) -> - first nt t - - (* The function [foreach_terminal] exploits the fact that the - first component of [TT.error] is [Terminal.n - 1], i.e., the - number of terminal symbols, including [error] but not [#]. *) - - let rec foldij i j f accu = - if i = j then - accu - else - foldij (i + 1) j f (f i accu) - - let foreach_terminal f accu = - let n, _ = TT.error in - foldij 0 n (fun i accu -> - f (IT.terminal i) accu - ) accu - - let foreach_terminal_but_error f accu = - let n, _ = TT.error in - foldij 0 n (fun i accu -> - if i = TT.error_terminal then - accu - else - f (IT.terminal i) accu - ) accu - - (* ------------------------------------------------------------------------ *) - - (* The following is the implementation of the function [feed]. This function - is logically part of the LR engine, so it would be nice if it were placed - in the module [Engine], but it must be placed here because, to ensure - type safety, its arguments must be a symbol of type ['a symbol] and a - semantic value of type ['a]. The type ['a symbol] is not available in - [Engine]. It is available here. *) - - open EngineTypes - open ET - open E - - (* [feed] fails if the current state does not have an outgoing transition - labeled with the desired symbol. This check is carried out at runtime. *) - - let feed_failure () = - invalid_arg "feed: outgoing transition does not exist" - - (* Feeding a nonterminal symbol [nt]. Here, [nt] has type [nonterminal], - which is a synonym for [int], and [semv] has type [semantic_value], - which is a synonym for [Obj.t]. This type is unsafe, because pushing - a semantic value of arbitrary type into the stack can later cause a - semantic action to crash and burn. The function [feed] is given a safe - type below. *) - - let feed_nonterminal - (nt : nonterminal) startp (semv : semantic_value) endp (env : 'b env) - : 'b env - = - (* Check if the source state has an outgoing transition labeled [nt]. - This is done by consulting the [goto] table. *) - let source = env.current in - match ET.maybe_goto_nt source nt with - | None -> - feed_failure() - | Some target -> - (* Push a new cell onto the stack, containing the identity of the state - that we are leaving. The semantic value [semv] and positions [startp] - and [endp] contained in the new cell are provided by the caller. *) - let stack = { state = source; semv; startp; endp; next = env.stack } in - (* Move to the target state. *) - { env with stack; current = target } - - let reduce _env _prod = feed_failure() - let initiate _env = feed_failure() - - let feed_terminal - (terminal : terminal) startp (semv : semantic_value) endp (env : 'b env) - : 'b env - = - (* Check if the source state has an outgoing transition labeled [terminal]. - This is done by consulting the [action] table. *) - let source = env.current in - ET.action source terminal semv - (fun env _please_discard _terminal semv target -> - (* There is indeed a transition toward the state [target]. - Push a new cell onto the stack and move to the target state. *) - let stack = { state = source; semv; startp; endp; next = env.stack } in - { env with stack; current = target } - ) reduce initiate env - - (* The type assigned to [feed] ensures that the type of the semantic value - [semv] is appropriate: it must be the semantic-value type of the symbol - [symbol]. *) - - let feed (symbol : 'a symbol) startp (semv : 'a) endp env = - let semv : semantic_value = Obj.repr semv in - match symbol with - | N nt -> - feed_nonterminal (n2i nt) startp semv endp env - | T terminal -> - feed_terminal (t2i terminal) startp semv endp env - -end -end -module TableInterpreter = struct -(******************************************************************************) -(* *) -(* Menhir *) -(* *) -(* François Pottier, Inria Paris *) -(* Yann Régis-Gianas, PPS, Université Paris Diderot *) -(* *) -(* Copyright Inria. All rights reserved. This file is distributed under the *) -(* terms of the GNU Library General Public License version 2, with a *) -(* special exception on linking, as described in the file LICENSE. *) -(* *) -(******************************************************************************) - -module MakeEngineTable (T : TableFormat.TABLES) = struct - - type state = - int - - let number s = s - - type token = - T.token - - type terminal = - int - - type nonterminal = - int - - type semantic_value = - Obj.t - - let token2terminal = - T.token2terminal - - let token2value = - T.token2value - - let error_terminal = - T.error_terminal - - let error_value = - Obj.repr () - - (* The function [foreach_terminal] exploits the fact that the - first component of [T.error] is [Terminal.n - 1], i.e., the - number of terminal symbols, including [error] but not [#]. *) - - (* There is similar code in [InspectionTableInterpreter]. The - code there contains an additional conversion of the type - [terminal] to the type [xsymbol]. *) - - let rec foldij i j f accu = - if i = j then - accu - else - foldij (i + 1) j f (f i accu) - - let foreach_terminal f accu = - let n, _ = T.error in - foldij 0 n (fun i accu -> - f i accu - ) accu - - type production = - int - - (* In principle, only non-start productions are exposed to the user, - at type [production] or at type [int]. This is checked dynamically. *) - let non_start_production i = - assert (T.start <= i && i - T.start < Array.length T.semantic_action) - - let production_index i = - non_start_production i; - i - - let find_production i = - non_start_production i; - i - - let default_reduction state defred nodefred env = - let code = PackedIntArray.get T.default_reduction state in - if code = 0 then - nodefred env - else - defred env (code - 1) - - let is_start prod = - prod < T.start - - (* This auxiliary function helps access a compressed, two-dimensional - matrix, like the action and goto tables. *) - - let unmarshal2 table i j = - RowDisplacement.getget - PackedIntArray.get - PackedIntArray.get - table - i j - - let action state terminal value shift reduce fail env = - match PackedIntArray.unflatten1 T.error state terminal with - | 1 -> - let action = unmarshal2 T.action state terminal in - let opcode = action land 0b11 - and param = action lsr 2 in - if opcode >= 0b10 then - (* 0b10 : shift/discard *) - (* 0b11 : shift/nodiscard *) - let please_discard = (opcode = 0b10) in - shift env please_discard terminal value param - else - (* 0b01 : reduce *) - (* 0b00 : cannot happen *) - reduce env param - | c -> - assert (c = 0); - fail env - - let goto_nt state nt = - let code = unmarshal2 T.goto state nt in - (* code = 1 + state *) - code - 1 - - let goto_prod state prod = - goto_nt state (PackedIntArray.get T.lhs prod) - - let maybe_goto_nt state nt = - let code = unmarshal2 T.goto state nt in - (* If [code] is 0, there is no outgoing transition. - If [code] is [1 + state], there is a transition towards [state]. *) - assert (0 <= code); - if code = 0 then None else Some (code - 1) - - exception Error = - T.Error - - type semantic_action = - (state, semantic_value, token) EngineTypes.env -> - (state, semantic_value) EngineTypes.stack - - let semantic_action prod = - (* Indexing into the array [T.semantic_action] is off by [T.start], - because the start productions do not have entries in this array. *) - T.semantic_action.(prod - T.start) - - (* [may_reduce state prod] tests whether the state [state] is capable of - reducing the production [prod]. This information could be determined - in constant time if we were willing to create a bitmap for it, but - that would take up a lot of space. Instead, we obtain this information - by iterating over a line in the action table. This is costly, but this - function is not normally used by the LR engine anyway; it is supposed - to be used only by programmers who wish to develop error recovery - strategies. *) - - (* In the future, if desired, we could memoize this function, so as - to pay the cost in (memory) space only if and where this function - is actually used. We could also replace [foreach_terminal] with a - function [exists_terminal] which stops as soon as the accumulator - is [true]. *) - - let may_reduce state prod = - (* Test if there is a default reduction of [prod]. *) - default_reduction state - (fun () prod' -> prod = prod') - (fun () -> - (* If not, then for each terminal [t], ... *) - foreach_terminal (fun t accu -> - accu || - (* ... test if there is a reduction of [prod] on [t]. *) - action state t () - (* shift: *) (fun () _ _ () _ -> false) - (* reduce: *) (fun () prod' -> prod = prod') - (* fail: *) (fun () -> false) - () - ) false - ) - () - - (* If [T.trace] is [None], then the logging functions do nothing. *) - - let log = - match T.trace with Some _ -> true | None -> false - - module Log = struct - - open Printf - - let state state = - match T.trace with - | Some _ -> - fprintf stderr "State %d:\n%!" state - | None -> - () - - let shift terminal state = - match T.trace with - | Some (terminals, _) -> - fprintf stderr "Shifting (%s) to state %d\n%!" terminals.(terminal) state - | None -> - () - - let reduce_or_accept prod = - match T.trace with - | Some (_, productions) -> - fprintf stderr "%s\n%!" productions.(prod) - | None -> - () - - let lookahead_token token startp endp = - match T.trace with - | Some (terminals, _) -> - fprintf stderr "Lookahead token is now %s (%d-%d)\n%!" - terminals.(token) - startp.Lexing.pos_cnum - endp.Lexing.pos_cnum - | None -> - () - - let initiating_error_handling () = - match T.trace with - | Some _ -> - fprintf stderr "Initiating error handling\n%!" - | None -> - () - - let resuming_error_handling () = - match T.trace with - | Some _ -> - fprintf stderr "Resuming error handling\n%!" - | None -> - () - - let handling_error state = - match T.trace with - | Some _ -> - fprintf stderr "Handling error in state %d\n%!" state - | None -> - () - - end - -end -end -module StaticVersion = struct -let require_20170712 = () -end - -end -module Reason_parser : sig -#1 "reason_parser.mli" - -(* The type of tokens. *) - -type token = - | WITH - | WHILE - | WHEN - | VIRTUAL - | VAL - | UNDERSCORE - | UIDENT of (string) - | TYPE - | TRY - | TRUE - | TO - | TILDE - | THEN - | SWITCH - | STRUCT - | STRING of (string * string option) - | STAR - | SLASHGREATER - | SIG - | SHARPOP of (string) - | SHARP - | SEMISEMI - | SEMI - | RPAREN - | REC - | RBRACKET - | RBRACE - | QUOTE - | QUESTION - | PUB - | PRI - | PREFIXOP of (string) - | POSTFIXOP of (string) - | PLUSEQ - | PLUSDOT - | PLUS - | PERCENT - | OR - | OPEN - | OF - | OBJECT - | NONREC - | NEW - | NATIVEINT of (nativeint) - | MUTABLE - | MODULE - | MINUSGREATER - | MINUSDOT - | MINUS - | LPAREN - | LIDENT of (string) - | LET - | LESSSLASHIDENTGREATER of (string) - | LESSSLASHGREATER - | LESSIDENT of (string) - | LESSGREATER - | LESSDOTDOTGREATER - | LESS - | LBRACKETPERCENTPERCENT - | LBRACKETPERCENT - | LBRACKETLESS - | LBRACKETGREATER - | LBRACKETBAR - | LBRACKETAT - | LBRACKET - | LBRACELESS - | LBRACE - | LAZY - | LABEL_WITH_EQUAL of (string) - | INT of (string * char option) - | INITIALIZER - | INHERIT - | INFIXOP4 of (string) - | INFIXOP3 of (string) - | INFIXOP2 of (string) - | INFIXOP1 of (string) - | INFIXOP0 of (string) - | INCLUDE - | IN - | IF - | GREATERRBRACE - | GREATER - | FUNCTOR - | FUNCTION - | FUN - | FOR - | FLOAT of (string * char option) - | FALSE - | EXTERNAL - | EXCEPTION - | ES6_FUN - | EQUALGREATER - | EQUAL - | EOL - | EOF - | END - | ELSE - | DOWNTO - | DOTDOTDOT - | DOTDOT - | DOT - | DONE - | DOCSTRING of (string) - | DO - | CONSTRAINT - | COMMENT of (string * Location.t) - | COMMA - | COLONGREATER - | COLONEQUAL - | COLONCOLON - | COLON - | CLASS - | CHAR of (char) - | BEGIN - | BARRBRACKET - | BARBAR - | BAR - | BANG - | BACKQUOTE - | ASSERT - | AS - | AND - | AMPERSAND - | AMPERAMPER - -(* This exception is raised by the monolithic API functions. *) - -exception Error - -(* The monolithic API. *) - -val use_file: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.toplevel_phrase list) - -val toplevel_phrase: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.toplevel_phrase) - -val parse_pattern: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.pattern) - -val parse_expression: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.expression) - -val parse_core_type: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.core_type) - -val interface: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.signature) - -val implementation: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_404.Parsetree.structure) - -module MenhirInterpreter : sig - - (* The incremental API. *) - - include MenhirLib.IncrementalEngine.INCREMENTAL_ENGINE - with type token = token - -end - -(* The entry point(s) to the incremental API. *) - -module Incremental : sig - - val use_file: Lexing.position -> (Ast_404.Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint - - val toplevel_phrase: Lexing.position -> (Ast_404.Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint - - val parse_pattern: Lexing.position -> (Ast_404.Parsetree.pattern) MenhirInterpreter.checkpoint - - val parse_expression: Lexing.position -> (Ast_404.Parsetree.expression) MenhirInterpreter.checkpoint - - val parse_core_type: Lexing.position -> (Ast_404.Parsetree.core_type) MenhirInterpreter.checkpoint - - val interface: Lexing.position -> (Ast_404.Parsetree.signature) MenhirInterpreter.checkpoint - - val implementation: Lexing.position -> (Ast_404.Parsetree.structure) MenhirInterpreter.checkpoint - -end - -end = struct -#1 "reason_parser.ml" - -(* This generated code requires the following version of MenhirLib: *) - -let () = - MenhirLib.StaticVersion.require_20170712 - -module MenhirBasics = struct - - exception Error = Parsing.Parse_error - - type token = - | WITH - | WHILE - | WHEN - | VIRTUAL - | VAL - | UNDERSCORE - | UIDENT of ( -# 1057 "reason_parser.mly" - (string) -# 22 "reason_parser.ml" - ) - | TYPE - | TRY - | TRUE - | TO - | TILDE - | THEN - | SWITCH - | STRUCT - | STRING of ( -# 1049 "reason_parser.mly" - (string * string option) -# 35 "reason_parser.ml" - ) - | STAR - | SLASHGREATER - | SIG - | SHARPOP of ( -# 1046 "reason_parser.mly" - (string) -# 43 "reason_parser.ml" - ) - | SHARP - | SEMISEMI - | SEMI - | RPAREN - | REC - | RBRACKET - | RBRACE - | QUOTE - | QUESTION - | PUB - | PRI - | PREFIXOP of ( -# 1033 "reason_parser.mly" - (string) -# 59 "reason_parser.ml" - ) - | POSTFIXOP of ( -# 1034 "reason_parser.mly" - (string) -# 64 "reason_parser.ml" - ) - | PLUSEQ - | PLUSDOT - | PLUS - | PERCENT - | OR - | OPEN - | OF - | OBJECT - | NONREC - | NEW - | NATIVEINT of ( -# 1022 "reason_parser.mly" - (nativeint) -# 79 "reason_parser.ml" - ) - | MUTABLE - | MODULE - | MINUSGREATER - | MINUSDOT - | MINUS - | LPAREN - | LIDENT of ( -# 1011 "reason_parser.mly" - (string) -# 90 "reason_parser.ml" - ) - | LET - | LESSSLASHIDENTGREATER of ( -# 1042 "reason_parser.mly" - (string) -# 96 "reason_parser.ml" - ) - | LESSSLASHGREATER - | LESSIDENT of ( -# 1005 "reason_parser.mly" - (string) -# 102 "reason_parser.ml" - ) - | LESSGREATER - | LESSDOTDOTGREATER - | LESS - | LBRACKETPERCENTPERCENT - | LBRACKETPERCENT - | LBRACKETLESS - | LBRACKETGREATER - | LBRACKETBAR - | LBRACKETAT - | LBRACKET - | LBRACELESS - | LBRACE - | LAZY - | LABEL_WITH_EQUAL of ( -# 994 "reason_parser.mly" - (string) -# 120 "reason_parser.ml" - ) - | INT of ( -# 993 "reason_parser.mly" - (string * char option) -# 125 "reason_parser.ml" - ) - | INITIALIZER - | INHERIT - | INFIXOP4 of ( -# 990 "reason_parser.mly" - (string) -# 132 "reason_parser.ml" - ) - | INFIXOP3 of ( -# 987 "reason_parser.mly" - (string) -# 137 "reason_parser.ml" - ) - | INFIXOP2 of ( -# 986 "reason_parser.mly" - (string) -# 142 "reason_parser.ml" - ) - | INFIXOP1 of ( -# 985 "reason_parser.mly" - (string) -# 147 "reason_parser.ml" - ) - | INFIXOP0 of ( -# 984 "reason_parser.mly" - (string) -# 152 "reason_parser.ml" - ) - | INCLUDE - | IN - | IF - | GREATERRBRACE - | GREATER - | FUNCTOR - | FUNCTION - | FUN - | FOR - | FLOAT of ( -# 974 "reason_parser.mly" - (string * char option) -# 166 "reason_parser.ml" - ) - | FALSE - | EXTERNAL - | EXCEPTION - | ES6_FUN - | EQUALGREATER - | EQUAL - | EOL - | EOF - | END - | ELSE - | DOWNTO - | DOTDOTDOT - | DOTDOT - | DOT - | DONE - | DOCSTRING of ( -# 1065 "reason_parser.mly" - (string) -# 186 "reason_parser.ml" - ) - | DO - | CONSTRAINT - | COMMENT of ( -# 1064 "reason_parser.mly" - (string * Location.t) -# 193 "reason_parser.ml" - ) - | COMMA - | COLONGREATER - | COLONEQUAL - | COLONCOLON - | COLON - | CLASS - | CHAR of ( -# 953 "reason_parser.mly" - (char) -# 204 "reason_parser.ml" - ) - | BEGIN - | BARRBRACKET - | BARBAR - | BAR - | BANG - | BACKQUOTE - | ASSERT - | AS - | AND - | AMPERSAND - | AMPERAMPER - -end - -include MenhirBasics - -let _eRR = - MenhirBasics.Error - -# 52 "reason_parser.mly" - -open Migrate_parsetree.OCaml_404.Ast -open Syntax_util -open Location -open Asttypes -open Longident -open Parsetree -open Ast_helper -open Ast_mapper - -(* - TODO: - - Remove all [open]s from the top of this file one by one and fix compilation - failures that ensue by specifying the appropriate long identifiers. That - will make the parser much easier to reason about. - - Go back to trunk, do the same (remove [open]s, and fully specify long - idents), to perform a clean diff. - -*) - -(** - - location.ml: - ------------ - let mkloc txt loc = { txt ; loc } - let rhs_loc n = { - loc_start = Parsing.rhs_start_pos n; - loc_end = Parsing.rhs_end_pos n; - loc_ghost = false; - } - let symbol_rloc () = { - loc_start = Parsing.symbol_start_pos (); - loc_end = Parsing.symbol_end_pos (); - loc_ghost = false; - } - - let symbol_gloc () = { - loc_start = Parsing.symbol_start_pos (); - loc_end = Parsing.symbol_end_pos (); - loc_ghost = true; - } - - ast_helper.ml: - ------------ - module Typ = struct - val mk: ?loc:loc -> ?attrs:attrs -> core_type_desc -> core_type - let mk ?(loc = !default_loc) ?(attrs = []) d = - {ptyp_desc = d; ptyp_loc = loc; ptyp_attributes = attrs} - .. - end - - parse_tree.mli - -------------- - and core_type = { - ptyp_desc: core_type_desc; - ptyp_loc: Location.t; - ptyp_attributes: attributes; (* ... [@id1] [@id2] *) - } - - and core_type_desc = - | Ptyp_any - (* _ *) - | Ptyp_var of string - (* 'a *) - | Ptyp_arrow of label * core_type * core_type - (* T1 -> T2 (label = "") - ~l:T1 -> T2 (label = "l") - ?l:T1 -> T2 (label = "?l") - *) - | Ptyp_tuple of core_type list - (* T1 * ... * Tn (n >= 2) *) - - reason_parser.mly - --------------- - In general: - - syntax variant {pblah_desc: core_blah_desc - pblah_loc: {txt, loc} - pblah_attributes: ... } - / \ / \ - val mkblah: ~loc -> ~attributes -> core_blah_desc -> core_blah - let mkblah = Blah.mk - -*) - - -let dummy_loc () = { - loc_start = Lexing.dummy_pos; - loc_end = Lexing.dummy_pos; - loc_ghost = false; -} - -let mklocation loc_start loc_end = { - loc_start = loc_start; - loc_end = loc_end; - loc_ghost = false; -} - -let with_txt a txt = { - a with txt=txt; -} - -let make_real_loc loc = { - loc with loc_ghost = false -} - -let make_ghost_loc loc = { - loc with loc_ghost = true -} - -let ghloc ?(loc=dummy_loc ()) d = { txt = d; loc = (make_ghost_loc loc) } - -(** - * turn an object into a real - *) -let make_real_exp exp = { - exp with pexp_loc = make_real_loc exp.pexp_loc -} -let make_real_pat pat = { - pat with ppat_loc = make_real_loc pat.ppat_loc -} -let make_real_cf cf = { - cf with pcf_loc = make_real_loc cf.pcf_loc -} - -(** - * turn a object into ghost - *) -let make_ghost_cf cf = { - cf with pcf_loc = make_ghost_loc cf.pcf_loc -} -let make_ghost_exp exp = { - exp with pexp_loc = make_ghost_loc exp.pexp_loc -} - -let make_ghost_pat pat = { - pat with ppat_loc = make_ghost_loc pat.ppat_loc -} - -(** - * change the location state to be a ghost location or real location - *) -let set_loc_state is_ghost loc = - if is_ghost then make_ghost_loc loc else make_real_loc loc - -let mktyp ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Typ.mk ~loc d - -let mkpat ?(attrs=[]) ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Pat.mk ~loc ~attrs d - -let mkexp ?(attrs=[]) ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Exp.mk ~loc ~attrs d - -let mkmty ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Mty.mk ~loc d - -let mksig ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Sig.mk ~loc d - -let mkmod ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Mod.mk ~loc d - -let mkstr ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Str.mk ~loc d - -let mkclass ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Cl.mk ~loc d - -let mkcty ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Cty.mk ~loc d - -let mkctf ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Ctf.mk ~loc d - -let may_tuple startp endp = function - | [] -> assert false - | [x] -> {x with pexp_loc = mklocation startp endp} - | xs -> mkexp ~loc:(mklocation startp endp) (Pexp_tuple xs) - -(** - Make a core_type from a as_loc(LIDENT). - Useful for record type punning. - type props = {width: int, height: int}; - type state = {nbrOfClicks: int}; - type component = {props, state}; -*) -let mkct lbl = - let lident = Lident lbl.txt in - let ttype = Ptyp_constr({txt = lident; loc = lbl.loc}, []) in - {ptyp_desc = ttype; ptyp_loc = lbl.loc; ptyp_attributes = []} - -let mkcf ?(loc=dummy_loc()) ?(ghost=false) d = - let loc = set_loc_state ghost loc in - Cf.mk ~loc d - -let simple_ghost_text_attr ?(loc=dummy_loc ()) txt = - let loc = set_loc_state true loc in - [({txt; loc}, PStr [])] - -let mkExplicitArityTuplePat ?(loc=dummy_loc ()) pat = - (* Tell OCaml type system that what this tuple construction represents is - not actually a tuple, and should represent several constructor - arguments. This allows the syntax the ability to distinguish between: - - X (10, 20) -- One argument constructor - X 10 20 -- Multi argument constructor - *) - mkpat - ~loc - ~attrs:(simple_ghost_text_attr ~loc "explicit_arity") - pat - -let mkExplicitArityTupleExp ?(loc=dummy_loc ()) exp = - mkexp - ~loc - ~attrs:(simple_ghost_text_attr ~loc "explicit_arity") - exp - -let is_pattern_list_single_any = function - | [{ppat_desc=Ppat_any; ppat_attributes=[]} as onlyItem] -> Some onlyItem - | _ -> None - -let set_structure_item_location x loc = {x with pstr_loc = loc};; - -let mkoperator {Location. txt; loc} = - Exp.mk ~loc (Pexp_ident(mkloc (Lident txt) loc)) - -(* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. - - Every grammar rule that generates an element with a location must - make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. - - jordwalke: Noticed that ghost expressions are often used when inserting - additional AST nodes from a parse rule. Either an extra wrapping one, or an - additional inner node. This is consistent with the above description, I - believe. -*) - - -let ghunit ?(loc=dummy_loc ()) () = - mkexp ~ghost:true ~loc (Pexp_construct (mknoloc (Lident "()"), None)) - -let mkinfixop arg1 op arg2 = - mkexp(Pexp_apply(op, [Nolabel, arg1; Nolabel, arg2])) - -let mkinfix arg1 name arg2 = - mkinfixop arg1 (mkoperator name) arg2 - -let neg_string f = - if String.length f > 0 && f.[0] = '-' - then String.sub f 1 (String.length f - 1) - else "-" ^ f - -let mkuminus name arg = - match name.txt, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - mkexp(Pexp_constant(Pconst_integer(neg_string n,m))) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - mkexp(Pexp_constant(Pconst_float(neg_string f, m))) - | txt, _ -> - let name = {name with txt = "~" ^ txt} in - mkexp(Pexp_apply(mkoperator name, [Nolabel, arg])) - -let prepare_functor_arg = function - | Some name, mty -> (name, mty) - | None, (Some {pmty_loc} as mty) -> - (mkloc "_" (make_ghost_loc pmty_loc), mty) - | None, None -> assert false - -let mk_functor_mod args body = - let folder arg acc = - let name, mty = prepare_functor_arg arg.txt in - mkmod ~loc:arg.loc (Pmod_functor(name, mty, acc)) - in - List.fold_right folder args body - -let mk_functor_mty args body = - let folder arg acc = - let name, mty = prepare_functor_arg arg.txt in - mkmty ~loc:arg.loc (Pmty_functor(name, mty, acc)) - in - List.fold_right folder args body - -let mkuplus name arg = - match name.txt, arg.pexp_desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> - mkexp arg.pexp_desc - | txt, _ -> - let name = {name with txt = "~" ^ txt} in - mkexp(Pexp_apply(mkoperator name, [Nolabel, arg])) - -let mkexp_cons consloc args loc = - mkexp ~loc (Pexp_construct(mkloc (Lident "::") consloc, Some args)) - -let mkexp_constructor_unit consloc loc = - mkexp ~loc (Pexp_construct(mkloc (Lident "()") consloc, None)) - -let ghexp_cons consloc args loc = - mkexp ~ghost:true ~loc (Pexp_construct(mkloc (Lident "::") loc, Some args)) - -let mkpat_cons consloc args loc = - mkpat ~loc (Ppat_construct(mkloc (Lident "::") loc, Some args)) - -let ghpat_cons consloc args loc = - mkpat ~ghost:true ~loc (Ppat_construct(mkloc (Lident "::") loc, Some args)) - -let mkpat_constructor_unit consloc loc = - mkpat ~loc (Ppat_construct(mkloc (Lident "()") consloc, None)) - -let simple_pattern_list_to_tuple ?(loc=dummy_loc ()) = function - | [] -> assert false - | lst -> mkpat ~loc (Ppat_tuple lst) - -let mktailexp_extension loc seq ext_opt = - let rec handle_seq = function - | [] -> - let base_case = match ext_opt with - | Some ext -> - ext - | None -> - let loc = make_ghost_loc loc in - let nil = { txt = Lident "[]"; loc } in - Exp.mk ~loc (Pexp_construct (nil, None)) in - base_case - | e1 :: el -> - let exp_el = handle_seq el in - let loc = mklocation e1.pexp_loc.loc_start exp_el.pexp_loc.loc_end in - let arg = mkexp ~ghost:true ~loc (Pexp_tuple [e1; exp_el]) in - ghexp_cons loc arg loc - in - handle_seq seq - -let mktailpat_extension loc (seq, ext_opt) = - let rec handle_seq = function - [] -> - let base_case = match ext_opt with - | Some ext -> - ext - | None -> - let loc = make_ghost_loc loc in - let nil = { txt = Lident "[]"; loc } in - mkpat ~loc (Ppat_construct (nil, None)) in - base_case - | p1 :: pl -> - let pat_pl = handle_seq pl in - let loc = mklocation p1.ppat_loc.loc_start pat_pl.ppat_loc.loc_end in - let arg = mkpat ~ghost:true ~loc (Ppat_tuple [p1; pat_pl]) in - ghpat_cons loc arg loc in - handle_seq seq - -let makeFrag loc body = - let attribute = ({txt = "JSX"; loc = loc}, PStr []) in - { body with pexp_attributes = attribute :: body.pexp_attributes } - - -(* Applies attributes to the structure item, not the expression itself. Makes - * structure item have same location as expression. *) -let mkstrexp e attrs = - { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } - -let ghexp_constraint loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~ghost:true ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~ghost:true ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false - -let array_function ?(loc=dummy_loc()) str name = - ghloc ~loc (Ldot(Lident str, (if !Clflags.fast then "unsafe_" ^ name else name))) - -let syntax_error_str loc msg = - if !Reason_config.recoverable then - Str.mk ~loc:loc (Pstr_extension (Syntax_util.syntax_error_extension_node loc msg, [])) - else - raise(Syntaxerr.Error(Syntaxerr.Other loc)) - -let syntax_error () = - raise Syntaxerr.Escape_error - -let syntax_error_exp loc msg = - if !Reason_config.recoverable then - Exp.mk ~loc (Pexp_extension (Syntax_util.syntax_error_extension_node loc msg)) - else - syntax_error () - -let syntax_error_pat loc msg = - if !Reason_config.recoverable then - Pat.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) - else - syntax_error () - -let syntax_error_typ loc msg = - if !Reason_config.recoverable then - Typ.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) - else - syntax_error () - -let syntax_error_mod loc msg = - if !Reason_config.recoverable then - Mty.extension ~loc (Syntax_util.syntax_error_extension_node loc msg) - else - syntax_error () - -let unclosed opening closing = - raise(Syntaxerr.Error(Syntaxerr.Unclosed(opening.loc, opening.txt, - closing.loc, closing.txt))) - -let unclosed_extension closing = - Syntax_util.syntax_error_extension_node closing.loc ("Expecting \"" ^ closing.txt ^ "\"") - -let unclosed_mod opening closing = - if !Reason_config.recoverable then - mkmod(Pmod_extension (unclosed_extension closing)) - else - unclosed opening closing - -let unclosed_cl opening closing = - if !Reason_config.recoverable then - mkclass(Pcl_extension (unclosed_extension closing)) - else - unclosed opening closing - -let unclosed_mty opening closing = - if !Reason_config.recoverable then - mkmty(Pmty_extension (unclosed_extension closing)) - else - unclosed opening closing - -let unclosed_cty opening closing = - if !Reason_config.recoverable then - mkcty(Pcty_extension (unclosed_extension closing)) - else - unclosed opening closing - -let unclosed_exp opening closing = - if !Reason_config.recoverable then - mkexp(Pexp_extension (unclosed_extension closing)) - else - unclosed opening closing - -let unclosed_pat opening closing = - if !Reason_config.recoverable then - mkpat(Ppat_extension (unclosed_extension closing)) - else - unclosed opening closing - -let expecting nonterm = - raise Syntaxerr.(Error(Expecting(nonterm.loc, nonterm.txt))) - -let expecting_pat nonterm = - if !Reason_config.recoverable then - mkpat(Ppat_extension (Syntax_util.syntax_error_extension_node nonterm.loc ("Expecting " ^ nonterm.txt))) - else - expecting nonterm - -let not_expecting start_pos end_pos nonterm = - raise Syntaxerr.(Error(Not_expecting(mklocation start_pos end_pos, nonterm))) - -type labelled_parameter = - | Term of arg_label * expression option * pattern - | Type of string - -let mkexp_fun {Location. txt; loc} body = - let loc = mklocation loc.loc_start body.pexp_loc.loc_end in - match txt with - | Term (label, default_expr, pat) -> - Exp.fun_ ~loc label default_expr pat body - | Type str -> - Exp.newtype ~loc str body - -let mkclass_fun {Location. txt ; loc} body = - let loc = mklocation loc.loc_start body.pcl_loc.loc_end in - match txt with - | Term (label, default_expr, pat) -> - Cl.fun_ ~loc label default_expr pat body - | Type str -> - let pat = syntax_error_pat loc "(type) not allowed in classes" in - Cl.fun_ ~loc Nolabel None pat body - -let mktyp_arrow {Location. txt = (label, cod); loc} dom = - mktyp ~loc:(mklocation loc.loc_start dom.ptyp_loc.loc_end) - (Ptyp_arrow (label, cod, dom)) - -let mkcty_arrow {Location. txt = (label, cod); loc} dom = - mkcty ~loc:(mklocation loc.loc_start dom.pcty_loc.loc_end) - (Pcty_arrow (label, cod, dom)) - -let mkexp_app_rev startp endp (body, args) = - let loc = mklocation startp endp in - if args = [] then { body with pexp_loc = loc } else - mkexp ~loc (Pexp_apply (body, List.rev args)) - -let mkmod_app mexp marg = - mkmod ~loc:(mklocation mexp.pmod_loc.loc_start marg.pmod_loc.loc_end) - (Pmod_apply (mexp, marg)) - -let bigarray_function ?(loc=dummy_loc()) str name = - ghloc ~loc (Ldot(Ldot(Lident "Bigarray", str), name)) - -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] - -let bigarray_get ?(loc=dummy_loc()) arr arg = - let get = if !Clflags.fast then "unsafe_get" else "get" in - match bigarray_untuplify arg with - [c1] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array1" get)), - [Nolabel, arr; Nolabel, c1])) - | [c1;c2] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array2" get)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2])) - | [c1;c2;c3] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array3" get)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, c3])) - | coords -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Genarray" "get")), - [Nolabel, arr; Nolabel, mkexp ~ghost:true ~loc (Pexp_array coords)])) - -let bigarray_set ?(loc=dummy_loc()) arr arg newval = - let set = if !Clflags.fast then "unsafe_set" else "set" in - match bigarray_untuplify arg with - [c1] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array1" set)), - [Nolabel, arr; Nolabel, c1; Nolabel, newval])) - | [c1;c2] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array2" set)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, newval])) - | [c1;c2;c3] -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Array3" set)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, c3; Nolabel, newval])) - | coords -> - mkexp(Pexp_apply(mkexp ~ghost:true ~loc (Pexp_ident(bigarray_function ~loc "Genarray" "set")), - [Nolabel, arr; - Nolabel, mkexp ~ghost:true ~loc (Pexp_array coords); - Nolabel, newval])) - -let exp_of_label label = - mkexp ~loc:label.loc (Pexp_ident {label with txt=Lident(Longident.last label.txt)}) - -let pat_of_label label = - mkpat ~loc:label.loc (Ppat_var {label with txt=(Longident.last label.txt)}) - -let check_variable vl loc v = - if List.mem v vl then - raise Syntaxerr.(Error(Variable_in_scope(loc,v))) - -let varify_constructors var_names t = - let rec loop t = - let desc = - match t.ptyp_desc with - | Ptyp_any -> Ptyp_any - | Ptyp_var x -> - check_variable var_names t.ptyp_loc x; - Ptyp_var x - | Ptyp_arrow (label,core_type,core_type') -> - Ptyp_arrow(label, loop core_type, loop core_type') - | Ptyp_tuple lst -> Ptyp_tuple (List.map loop lst) - | Ptyp_constr( { txt = Lident s }, []) when List.mem s var_names -> - Ptyp_var s - | Ptyp_constr(longident, lst) -> - Ptyp_constr(longident, List.map loop lst) - | Ptyp_object (lst, o) -> - Ptyp_object - (List.map (fun (s, attrs, t) -> (s, attrs, loop t)) lst, o) - | Ptyp_class (longident, lst) -> - Ptyp_class (longident, List.map loop lst) - | Ptyp_alias(core_type, string) -> - check_variable var_names t.ptyp_loc string; - Ptyp_alias(loop core_type, string) - | Ptyp_variant(row_field_list, flag, lbl_lst_option) -> - Ptyp_variant(List.map loop_row_field row_field_list, - flag, lbl_lst_option) - | Ptyp_poly(string_lst, core_type) -> - List.iter (check_variable var_names t.ptyp_loc) string_lst; - Ptyp_poly(string_lst, loop core_type) - | Ptyp_package(longident,lst) -> - Ptyp_package(longident,List.map (fun (n,typ) -> (n,loop typ) ) lst) - | Ptyp_extension (s, arg) -> - Ptyp_extension (s, arg) - in - {t with ptyp_desc = desc} - and loop_row_field = - function - | Rtag(label,attrs,flag,lst) -> - Rtag(label,attrs,flag,List.map loop lst) - | Rinherit t -> - Rinherit (loop t) - in - loop t - -let pexp_newtypes ?loc newtypes exp = - List.fold_right (fun newtype exp -> mkexp ?loc (Pexp_newtype (newtype, exp))) - newtypes exp - -(** - I believe that wrap_type_annotation will automatically generate the type - arguments (type a) (type b) based on what was listed before the dot in a - polymorphic type annotation that uses locally abstract types. - *) -let wrap_type_annotation newtypes core_type body = - let exp = mkexp(Pexp_constraint(body,core_type)) in - let exp = pexp_newtypes newtypes exp in - let typ = mktyp ~ghost:true (Ptyp_poly(newtypes,varify_constructors newtypes core_type)) in - (exp, typ) - - -let struct_item_extension (ext_attrs, ext_id) structure_items = - mkstr ~ghost:true (Pstr_extension ((ext_id, PStr structure_items), ext_attrs)) - -let extension_expression (ext_attrs, ext_id) item_expr = - mkexp ~ghost:true ~attrs:ext_attrs (Pexp_extension (ext_id, PStr [mkstrexp item_expr []])) - -(* There's no more need for these functions - this was for the following: - * - * fun % ext [@foo] arg => arg; - * - * Becoming - * - * [%ext (fun arg => arg) [@foo]] - * - * Which we no longer support. - *) -(* Applies the attributes to the body, then wraps entire thing in an extension - * expression, whose payload consists of a single structure item that is body - *) -(* let wrap_exp_attrs body (ext, attrs) = *) -(* (* todo: keep exact location for the entire attribute *) *) -(* let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in *) -(* match ext with *) -(* | None -> body *) -(* | Some id -> mkexp ~ghost:true (Pexp_extension (id, PStr [mkstrexp body []])) *) - -(* Why not just mkexp with the right attributes in the first place? *) -(* let mkexp_attrs d attrs = *) -(* wrap_exp_attrs (mkexp d) attrs *) - -let mkcf_attrs ?(loc=dummy_loc()) d attrs = - Cf.mk ~loc ~attrs d - -let mkctf_attrs d attrs = - Ctf.mk ~attrs d - -type let_binding = - { lb_pattern: pattern; - lb_expression: expression; - (* The meaning of lb_leading_attributes and lbs_extension are dependent on - * the context of the let binding (module/expression etc) *) - lb_attributes: attributes; - (* lb_docs: docs Lazy.t; *) - (* lb_text: text Lazy.t; *) - lb_loc: Location.t; } - -type let_bindings = - { lbs_bindings: let_binding list; - lbs_rec: rec_flag; - lbs_extension: string Asttypes.loc option; - (* In Reason, we use this field to represent - extension attributes attached to the extension on a series of "let/and" - bindings As in: let [@extAttrs ] [%id] [@attribute] x = ...; It only - makes sense to have [lbs_attributes] when there is an [lbs_extension]. - *) - lbs_attributes: attributes; - lbs_loc: Location.t } - -let mklb (p, e) attrs loc = - { lb_pattern = p; - lb_expression = e; - (* Only some individual let bindings are allowed to have attributes - * depending on the context *) - lb_attributes = attrs; - lb_loc = loc; } - -let mklbs (extAttrs, extId) rf lb loc = - { lbs_bindings = [lb]; - lbs_rec = rf; - lbs_extension = extId ; - lbs_attributes = extAttrs; - lbs_loc = loc; } - -let addlbs lbs lbs' = - { lbs with lbs_bindings = lbs.lbs_bindings @ lbs' } - -let val_of_let_bindings lbs = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - (* ~docs:(Lazy.force lb.lb_docs) *) - (* ~text:(Lazy.force lb.lb_text) *) - lb.lb_pattern lb.lb_expression) - lbs.lbs_bindings - in - let str = mkstr(Pstr_value(lbs.lbs_rec, bindings)) in - (* Note that for value bindings, when there's an extension, the - * lbs_attributes are attributes on the extension *) - match (lbs.lbs_extension) with - | None -> str - | Some ext_id -> struct_item_extension (lbs.lbs_attributes, ext_id) [str] - -let expr_of_let_bindings lbs body = - let bindings = - List.map - (fun lb -> - (* Individual let bindings in an *expression* can't have item attributes. *) - (*if lb.lb_attributes <> [] then - raise Syntaxerr.(Error(Not_expecting(lb.lb_loc, "item attribute")));*) - Vb.mk ~attrs:lb.lb_attributes ~loc:lb.lb_loc lb.lb_pattern lb.lb_expression) - lbs.lbs_bindings - in - (* The location of this expression unfortunately includes the entire rule, - * which will include any preceeding extensions. *) - let item_expr = mkexp (Pexp_let(lbs.lbs_rec, bindings, body)) in - (* Note that for let expression bindings, when there's an extension, the - * lbs_attributes are attributes on the entire [let ..in x] expression. *) - match lbs.lbs_extension with - | None -> item_expr - | Some ext_id -> extension_expression (lbs.lbs_attributes, ext_id) item_expr - -let class_of_let_bindings lbs body = - let bindings = - List.map - (fun lb -> - (*if lb.lb_attributes <> [] then - raise Syntaxerr.(Error(Not_expecting(lb.lb_loc, "item attribute")));*) - Vb.mk ~attrs:lb.lb_attributes ~loc:lb.lb_loc lb.lb_pattern lb.lb_expression) - lbs.lbs_bindings - in - if lbs.lbs_extension <> None then - raise Syntaxerr.(Error(Not_expecting(lbs.lbs_loc, "extension"))); - if lbs.lbs_attributes <> [] then - raise Syntaxerr.(Error(Not_expecting(lbs.lbs_loc, "attributes"))); - mkclass(Pcl_let (lbs.lbs_rec, bindings, body)) - -(* - * arity_conflict_resolving_mapper is triggered when both "implicit_arity" "explicit_arity" - * are in the attribtues. In that case we have to remove "explicit_arity" - * - * However, if we simply remove explicit_arity, we would end up with a - * wrapping tuple which has only one component (inner tuple). - * This is against the invariance where tuples must have 2+ components. - * Therefore, in the case we have to remove explicit_arity, we also need to - * unwrap the tuple to expose the inner tuple directly. - * - *) -let arity_conflict_resolving_mapper super = -{ super with - expr = begin fun mapper expr -> - match expr with - | {pexp_desc=Pexp_construct(lid, args); - pexp_loc; - pexp_attributes} when attributes_conflicted "implicit_arity" "explicit_arity" pexp_attributes -> - let new_args = - match args with - | Some {pexp_desc = Pexp_tuple [sp]} -> Some sp - | _ -> args in - super.expr mapper - {pexp_desc=Pexp_construct(lid, new_args); pexp_loc; pexp_attributes= - normalized_attributes "explicit_arity" pexp_attributes} - | x -> super.expr mapper x - end; - pat = begin fun mapper pattern -> - match pattern with - | {ppat_desc=Ppat_construct(lid, args); - ppat_loc; - ppat_attributes} when attributes_conflicted "implicit_arity" "explicit_arity" ppat_attributes -> - let new_args = - match args with - | Some {ppat_desc = Ppat_tuple [sp]} -> Some sp - | _ -> args in - super.pat mapper - {ppat_desc=Ppat_construct(lid, new_args); ppat_loc; ppat_attributes= - normalized_attributes "explicit_arity" ppat_attributes} - | x -> super.pat mapper x - end; -} - -let reason_mapper = - default_mapper - |> reason_to_ml_swap_operator_mapper - |> arity_conflict_resolving_mapper - -let rec string_of_longident = function - | Lident s -> s - | Ldot(longPrefix, s) -> - s - | Lapply (y,s) -> string_of_longident s - -let built_in_explicit_arity_constructors = ["Some"; "Assert_failure"; "Match_failure"] - -let jsx_component module_name attrs children loc = - let firstPart = (List.hd (Longident.flatten module_name)) in - let lident = if String.get firstPart 0 != '_' && firstPart = String.capitalize firstPart then - (* firstPart will be non-empty so the 0th access is fine. Modules can't start with underscore *) - Ldot(module_name, "createElement") - else - Lident firstPart - in - let ident = mkloc lident loc in - let body = mkexp(Pexp_apply(mkexp(Pexp_ident ident) ~loc, attrs @ children)) ~loc in - let attribute = ({txt = "JSX"; loc = loc}, PStr []) in - { body with pexp_attributes = attribute :: body.pexp_attributes } - -let ensureTagsAreEqual startTag endTag loc = - if startTag <> endTag then - let startTag = (String.concat "" (Longident.flatten startTag)) in - let endTag = (String.concat "" (Longident.flatten endTag)) in - let _ = Location.raise_errorf ~loc "Syntax error: Start tag <%s> does not match end tag " startTag endTag in - () - -let prepare_immutable_labels labels = - let prepare (label, attr) = - if label.pld_mutable == Mutable then syntax_error(); - (label.pld_name.txt, attr, label.pld_type) - in - List.map prepare labels - -type core_type_object = - | Core_type of core_type - | Record_type of label_declaration list - -(* `{. "foo": bar}` -> `Js.t {. foo: bar}` and {.. "foo": bar} -> `Js.t {.. foo: bar} *) -let mkBsObjTypeSugar ~loc ~closed rows = - let obj = mktyp ~loc (Ptyp_object (prepare_immutable_labels rows, closed)) in - let jsDotTCtor = { txt = Longident.parse "Js.t"; loc } in - Core_type(mktyp(Ptyp_constr(jsDotTCtor, [obj]))) - -let only_core_type t startp endp = - match t with - | Core_type ct -> ct - | Record_type _ -> - let loc = mklocation startp endp in - Location.raise_errorf ~loc "Record type is not allowed" - -let only_labels l = - let rec loop label_declarations result = - match label_declarations with - | hd :: tail -> - let (l, a) = hd in - if (List.length a > 0) then - syntax_error () - else - loop tail (result @ [l] ) - | [] -> result - in - loop l [] - -let doc_loc = {txt = "ocaml.doc"; loc = Location.none} - -let doc_attr text loc = - let open Parsetree in - let exp = - { pexp_desc = Pexp_constant (Pconst_string(text, None)); - pexp_loc = loc; - pexp_attributes = []; } - in - let item = - { pstr_desc = Pstr_eval (exp, []); pstr_loc = exp.pexp_loc } - in - (doc_loc, PStr [item]) - - -# 1111 "reason_parser.ml" +# 1233 "reason_parser.ml" module Tables = struct @@ -50604,22 +43156,22 @@ module Tables = struct Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\159\000\153\000\000\000\000\001\000v\000\000\000\000\001\000w\002\000\000\000\000\000\159\000\153\000\000\000\000\000v\000\000\000\000\000w\003J\000\000\000\000\004+\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002;\0025\000\157\000\000\004+\000\000\000\000\000\000\003&\000\000\002/\002C\000\000\000\000\002D\002>\000\000\000\000\000\000\000\t\000\b\003\003\000\000\000\157\000\000\000\000\003\003\003\003\003\003{\003\003\003\003\003\003\149\003\003\003\159\003\158\003\157\003\156\003\155\003\154\003\153\003\152\003\151\003\150\003z\003\148\003\147\003\146\003\145\003\144\003\143\003\142\003\141\003\140\003\139\003\138\003\137\003\136\003\135\003\134\003\133\003\132\003\131\003\130\003\129\003\128\003\127\003~\003}\003|\000\000\000\000\000\028\000\000\000\000\002!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\001\000\000\001+\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\000\000\001\153\000\000\000\000\000A\000\000\000\000\000A\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001;\000\000\003\004\000\000\000\000\000\000\000\156\000\000\000\000\000\000\000\000\000\000\000\000\000\151\000\154\000\158\000\152\000\000\0037\003/\004-\000\000\000\000\000\000\000\000\000\000\002\011\000\000\000\000\000\000\002E\002<\000\000\003\007\000\000\000\000\001\000\000\003\006\003\005\001\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\031\000\030\000\000\000\000=\003\000C\000\000\000\000\000\000\000\002\007\003\000\000\000\000\003\000H\000\000\000\000\003\000\000\002\017\000\000\000\000\003\000\000\000\000\000\000\000\002\140\002\139\001\000\000\000\000\000\000\003\000\000\000\000\000\000\001D\000\000\000\000\000\000\001C\000\000\000\000\001\000\000\000\000\002)\000\000\000\000\000\000\001\001\145\000\000\002+\001\000\000\000\000\000\000\002(\000\000\002*\000\000\000\000\002'\000\000\000\000\000\000\000J\000\000\000\000\000\000\000\026\000\000\000\023\001\001\003\000\000\000\000\002\002\t\002\152\000;\000\000\000\000\000\000\000\000\003\002\005\002\153\002\b\000\000\002\006\000\000\000D\000\000\000\000\000\000\000<\002\154\000\000\001\129\000\000\000\000\002\155\000\000\003\000\000\000\000\002\000>\000\000\001+\001,\000?\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\001E\000\000\000\000\001F\000\000\000\000\002l\001\157\000\000\000\000\002\002k\000\000\000\000\000\000\001\001\000\000\000\026\003\000\000\000\000\000\000\000\000\000\000\002\027\001\155\000\000\000F\000\000\001\159\000\000\000E\000\000\000\000\000D\000\000\002&\000\000\000\000\000\000\002)\000\000\002+\000\000\000\000\000\000\002(\000\000\002*\000\000\000\000\002'\000\000\000\000=\000C\000\000\000\002\007\003\000\000\000\000\003\000H\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\000\0042\002j\000g\000\000\000\000\000\000\000\000\000\000\000\000\0040\000\000\000\000\000\000\000\000\000\151\000\154\000\158\000\152\000\000\000\000\000\000\002\011\000\000\000\000\000\000\000\000\000\000\002\004-\003\001\002\000\000\000\000\000\000\000\000\003&\000\000\0026\0024\0023\0022\0021\000\000\002F\000\000\000\000\003d\000\000\001V\000\000\000\000\000\000\002Z\000\000\000\000\003i\000\000\002\002\000\000\002\002\000\000\003d\000\000\003i\002.\0028\000\000\002\002\000\000\000\000\003q\000\000\000\000\000\000\003s\003r\000\000\000\000\000\000\000\000\000\000\002l\001\157\000\000\000\000\002\002k\000\000\000\000\000\000\001\001\002:\000\000\002\002\000\000\000\000\000\000\003q\000\000\000\000\003s\003r\000\000\000\000\000\000\000\000\000\156\000\000\001E\000\000\000\000\001F\000\000\003u\003t\000\000\000\000\000\000\002J\001`\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003h\003\\\003]\002\127\000\000\000\000\003f\002\000\000\000\000\001\003y\003g\002{\002\132\000\000\000\000\000\000\000\000\000\000\002\129\000\000\000\000\002\134\000\000\002}\000\000\0027\0029\002B\002?\0020\002@\002A\000\000\004,\002|\000\000\000\000\002t\000\000\002P\000\000\000\000\000\000\003j\000\000\003x\000\000\000\000\003w\003v\000\000\000\000\000\000\000\000\002v\000\000\000\000\003u\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003h\003\\\003]\002\127\000\000\000\000\003f\002\000\000\003y\003g\002{\002\132\000\000\000\000\000\000\002x\000\000\000\000\002\129\000\000\000\000\002\134\000\000\002}\000\000\000\000\004,\002|\000\000\000\000\002\000\000\000\000\002z\000\000\002t\000\000\000\000\000\000\002P\000\000\000\000\001\000\000\003c\000\000\000\000\003b\003a\000\000\000\000\003`\003_\002w\002~\003^\001\000\000\003l\000\000\001\000\000\003m\003k\000\000\003p\000\000\003o\003n\002\133\000\000\002x\000\000\000\000\003c\000\000\000\000\003b\003a\000\000\000\000\003`\003_\002w\002~\003^\000\000\000\000\000\000\003l\000\000\003m\003k\000\000\003p\000\000\003o\003n\002\133\000\000\000\000\001]\000\000\003w\003v\000\000\000\000\003j\000\000\003x\000\000\000\000\000\000\000\000\000\000\000\000\002\131\002\130\000\000\000\000\000\000\000\000\000\000\000\000\002\131\002\130\001W\001X\000\000\000\000\001R\000\000\000\000\000\000\000\000\003U\003T\003\002\002\003\001\002\000\000\000\000\003\011\003.\000\000\003\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\001K\000\000\002h\000\000\000\000\000\000\000\000\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001U\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\002b\003\002f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\003{\003\003\003\003\003\003\149\003\003\003\159\003\158\003\157\003\156\003\155\003\154\003\153\003\152\003\151\003\150\003z\003\148\003\147\003\146\003\145\003\144\003\143\003\142\003\141\003\140\003\139\003\138\003\137\003\136\003\135\003\134\003\133\003\132\003\131\003\130\003\129\003\128\003\127\003~\003}\003|\000\000\000\000\000\028\0010\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\002R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000(\000\000\000\000\000%\000\000\000\000\000$\000\000\000'\000\000\000&\000\000\000\000\000)\000\000\000.\000\000\000\000\000+\000\000\000\000\000*\000\000\000-\000\000\000,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\000\0004\000\000\000\000\0001\000\000\000\000\0000\000\000\0003\000\000\0002\000\000\000\000\0005\000\000\000:\000\000\000\000\0007\000\000\000\000\0006\000\000\0009\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\003\003\003\000\021\000\000\000\000\000\003\000\000\000\000\003\000\003\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\003\003\000\000\000\000\000\000\002\142\003\000\000\000\000\000\000\000\000\000\001\023\000\000\001\028\000\000\000\000\001\025\000\000\000\000\001\024\000\000\001\027\000\000\001\026\000\000\000\000\002\024\000\000\000\000\000\000\002\025\000\"\000\000\000\000\000\000\000\000\000\000\000\000\001\127\001~\000!\002\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002H\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\0012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\000\000\000\000\000\000\000\000\003)\0014\003\014\000\000\000\000\000\000\000\000\000\000\000\000\003,\000\000\003+\001\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\000\000\000\000\003\000\021\000\000\000\000\000\000\000\022\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\001*\000\001\023\002R\000\000\001\028\000\000\000\000\001\025\000\000\000\000\001\024\000\000\001\027\000\000\001\026\000\000\000\000\002\024\000\000\000\000\000\000\002\025\000\"\000\000\000\000\000\000\000\000\000\000\000\000\001\127\001~\000!\002\000\000\000\000\000\000\000\000\000\000\001'\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\003S\003R\002\000\000\001\015\000\000\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\002\002\001\006\000\000\003S\003R\003\002\002\000\000\001\015\000\000\001\005\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\002b\003\001\021\001\019\001\000\000\002\002\000\000\000\000\000\000\000\000\002\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\002\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\002\002\000\000\000\000\002\002\001G\002\000\000\000\000\000\000\000\000\001\000\000\001\001\000\000\001\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\002m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\001\133\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\002\015\003\002\143\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\001\"\000\000\000\000\000\000\001\031\000\000\000\000\000\000\001\030\000\000\000\000\001!\000\000\000\000\001 \000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\000\000\0047\000\000\000\000\000\000\000\000\003\003\000\000\000\000\003\003\001\000\000\001\141\000\000\001\000\000\000\000\000\000\000\000\000x\000\000\000\145\000\144\000\000\000\000\000\000\002\003\000\000\002\004\000~\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\002\140\002\139\000\000\000\000\000\000\000\000\000\128\000\000\000\149\000\000\000\000\000\150\000u\000\000\000\000\000\000\001\151\000r\000t\000|\000\000\000s\000\000\000\000\000\000\000\000\132\000z\000\000\000\000\000\127\000\000\000\000\000\000\000\000\000\131\000\000\000\000\000\000\000\000\000\129\000\000\000}\000\000\000\133\000\135\000\000\000\000\000\134\001\000\000\002\017\000{\001\000\000\000\000\146\000\000\000\000\000\000\014\000\000\000\000\000\015\000\147\000\000\001r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\147\000\000\000\000\000\149\000\000\000\000\000\145\000\144\000\000\000\000\000\150\000u\000\000\000\000\000\000\001\151\000r\000t\000T\002V\000\000\000s\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0042\000g\000\000\000\000\000\000\000\000\000\000\000\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\000\000\000\000\000\000\000\000\001\000`\000a\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\137\000]\000\000\000_\000\000\000\000\002T\000e\000\000\000k\002$\000d\000\000\000\000\000h\000\000\000\000\001c\000\000\000\000\000\000\000\000\000\000\000f\000\000\000l\000p\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\001\002^\000\000\001\001\000j\000\000\000\000\000\000\000o\000\000\000i\001\002%\000\000\000\000\000\000\000\000\002\"\000\000\002#\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001u\001t\001l\000\000\000\000\000\000\001d\000\000\000\000\000\000\001e\000c\000b\000\000\000\000\000\139\000\138\000\000\000\143\000\142\000\000\000T\000\000\000\141\000\140\000\000\000\000\000U\000\000\000\143\000\142\000\000\000\000\000\141\000\140\000\000\000\000\000\139\000\138\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\002\001G\002\000\000\000\000\000\000\000\000\001\000`\000a\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\137\000]\000\000\000_\000\000\000\000\002T\000e\000\000\000\000\000\000\000\000k\002$\000d\000\000\000\000\000h\000\000\000\000\000\000\000\000\000\000\000f\000\000\000l\000p\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\001\000j\000\000\000\000\000\000\000o\000\000\000i\001\002%\000\000\000\000\000\000\000\000\002\"\000\000\002#\001\000\000\000\000\000c\000b\000\000\000\000\000\000\000\000\000V\000X\000\000\000W\000\000\000\000\000\n\000\000\000\000\000\011\003\000\000\001n\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\004\031\003\000\000\000\000\003\003\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\003\000\000\000\000\001\000\000\000\000\001\000\000\001\000\000\001\003Y\003W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0049\000\000\004:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000\000\003[\000\000\001\001\001\000\000\000\000\002\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\001\003Y\003W\000\000\003X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0049\000\000\004:\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\001\000\000\003V\000\000\000\000\000\000\003[\000\000\001\002`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001\143\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\000\000\001w\003\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\002\020\000\000\000\000\000\000\002\021\000 \000\000\000\000\000\000\000\000\000\000\000\000\001|\001{\000\031\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\003\000\000\000\000\001c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\003\000\000\000\000\000\000\000\148\000\000\003\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\004 \003\000\000\000\000\000\000\000\000\000\000\000\000\001u\001t\001l\000\000\000\000\000\000\001d\003\000\000\000\000\000\000\001e\003\003\000\000\003\000\000\001\000\000\001\000\000\000\000\001\000\000\001\000\000\000\000\002\136\002\135\000\000\000\029\000\000\001/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\012\000\000\000\000\000\r\000Z\000\000\001p\002\000\000\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\002\000\000\001y\002\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000[\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\002\002\002\002\000\000\003Z\001\000\000\003X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\001)\000\000\001\000\000\002\000\000\003Z\001\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\003\024\003\023\000\000\000\000\003#\003\"\000\000\000\000\001\016\000\000\001\021\000\000\000\000\001\018\001\017\000\000\003$\000\000\000\000\000\000\003(\003'\000\000\003\026\000\000\000\000\000\000\001\136\000\000\000\000\001\137\000\000\000\000\000\000\000\000\003!\003 \000\000\000\000\000\000\000\000\001\002\148\001\000\000\000\000\000\000\004.\003\r\003-\000\000\003\012\000\000\000\000\000\000\003\028\003\027\001\131\000\000\0013\000\000\003\030\003\029\000\000\000\000\003\031\003\025\0014\000\000\0013\000\000\000\000\000\000\000\000\001\000\000\001\000\000\002\000\000\002\000\000\002\002\000\000\000\000\002\002\000\000\000\000\002\000\000\000\000\000\000\002\002\000\000\002\000\000\002\002\000\000\000\000\001/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\015\002\002\143\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\146\000\000\000\000\000\000\014\000\000\000\000\000\015\000\147\000\000\001r\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\012\000\000\000\000\000\r\000Z\000\000\001p\002\000\000\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\002\000\000\001y\002\000\000\000\000\000\000\003\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\148\000\000\000[\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\002\002\002\002\000\000\002\000\000\003\000\000\001\000\000\000\000\002\000\000\002\000\000\002\002\000\000\000\000\002\002\000\000\000\000\002\000\000\000\000\000\000\002\002\000\000\002\000\000\002\002\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\001\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\001O\001M\001N\001\000\000\001H\000\000\000\000\002\001I\000\000\000\000\000\000\000\000\000\000\000\000\002\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\\\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\001\133\000\001L\000\000\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\001\132\000\000\000\000\000\003\021\003\020\000\000\003\017\000\000\003\016\003\015\000\000\000\000\003U\003T\003\011\003.\000\000\000\000\000\000\003\022\000\000\000\000\003\028\003\027\000\000\000\000\000\000\003\030\003\029\000\000\000\000\003\031\003\025\003\014\000\000\000\000\000\000\000\000\000\000\000\000\003,\000\000\003+\000\000\003\024\003\023\000\000\000\000\003#\003\"\000\000\000\000\003$\000\000\000\000\000\000\003(\003'\000\000\003\026\000\000\003!\003 \003\r\003-\000\000\003\012\000\000\003)\000\000\000\000\000\000\002\000\000\002\002\000\000\000\000\002\n\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\002G\000\000\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\001\"\000\000\000\000\000\000\001\031\000\000\000\000\000\000\001\030\000\000\000\000\001!\000\000\000\000\001 \000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\001\138\000\000\000\000\001\139\000\000\000M\000\000\000\000\001\138\000\000\000\000\000\000\002\157\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\003\000\000\000\000\002\158\000\000\000\000\002\156\000\000\000\000\000\000\000\000\002\000\000\002\002\159\000\000\000\000\000\000\000\000\000\000\001\001\001\000\000\000L\000K\000\000\000Q\000P\000\000\000O\000N\000\000\000S\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\002\n\000\000\000\000\003M\003:\000\000\000\000\003@\003?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\158\000\000\000\000\002\156\000\000\000\000\000\000\002\000\000\002\002\159\001\001\134\000\000\000\001\135\000\000\000\000\000\000\003B\003A\000\000\000\000\003C\003=\0032\000\000\000\000\000\000\000\000\000\000\000\000\003P\000\000\003O\000\000\003<\003;\000\000\000\000\003G\003F\000\000\000\000\003H\000\000\000\000\000\000\003L\003K\000\000\003>\000\000\003E\003D\0031\003Q\0036\0030\000\000\003\000\002\000\000\002\002\000\000\003\007\000\000\000\000\003\006\003\005\000\000\000\000\000\000\000\001\134\000\000\000\000\000\003\003\000\000\001>\000\000\000\000\000\000\001@\000\000\001?\0035\000\000\0034\0033\000\000\000\000\001\134\000\000\004\001\000\000\001\022\000\000\003\017\000\000\003\016\003\015\000\000\001=\000\000\003\004\000\000\000\000\003\003\000\000\0011\000\000\000\000\004\003\000\000\001\134\000\000\004\002\000\000\000\029\000\000\000E\000\000\000\000\000F\000\000\000\000\000\025\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.\000\000\000\000\000+\000\000\000\000\000*\000\000\000-\000\000\000,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\000\0004\000\000\000\000\0001\000\000\000\000\0000\000\000\0003\000\000\0002\000\000\000\000\0005\000\000\000:\000\000\000\000\0007\000\000\000\000\0006\000\000\0009\000\000\0008\000\000\000\000\000\000\000\003\000\000\000\000\003\000\003\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\003\003\000\000\000\000\000\000\003\000\000\001\022\000\000\003\b\000\000\003\n\000\000\003\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\001\001\000\000\001\000\000\000\000\001\000\000\001\000\000\003\b\000\000\003\n\000\000\003\t\000\000\003\021\003\020\000\000\000\000\0011\000\000\000\000\000\000\0016\000\000\0018\0019\0017\001:\000\000\000\000\001\134\000\000\000\000\000\0039\0038\000\000\000\000\000\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000M\000\000\000L\000K\000\000\000Q\000P\000\000\000O\000N\000\000\000S\000R\000\000\000\000\002n\000\000\000\000\001\001\019\001\000\000\002o\000\000\000\000\000\000\003\003\000\000\001-\000\001\000\000\000\000\001.\000\002\000\000\000\003\000\000\002p\000\000\000\004\000\000\002q\000\000\000\000\002r\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\020\000\000\000\000\000\000\002\021\000 \000\000\000\000\000\000\000\000\000\000\000\000\001|\001{\000\031\003\000\000\000\000\000\000\004\003\000\000\001\134\000\000\004\002\000\000\000\000\000\000\001\134\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\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\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\000V\000X\000\000\000W\000\000\000\000\000\n\000\000\000\000\000\011\003\000\000\001n\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\006\000\000\000\000\000\004\031\003\000\000\000\003\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\003\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\000\000\001w\003\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\004 \003\000\000\000\000\003\000\000\000\000\003\003\003\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\004*\000\000") + (16, "\000\000\000\000\000\000\000\000\003\003\003\003\003\003\159\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\158\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\000\000\000\000\000\028\001H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\129\000\000\000\000\001\000\130\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\130\003p\000\000\000\000\000\000\004R\000\000\000\000\000\000\000\000\001R\000\000\000\000\000\000\000\000\003\028\000\000\002d\002^\000\000\000\004R\000\000\000\000\000\000\003L\000\000\002X\002l\000\000\000\000\002m\002g\000\000\000\000\000\000\000\t\000\b\003\003\000\000\000\000\000\000\000\003\003\003\003\003\003\159\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\158\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\000\000\000\000\000\028\000\000\000\000\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\001\000\000\001C\001D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\001\004\027\004\028\000\000\000\000\000A\000\000\000\000\000A\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\001^\000\000\000\000\001_\000\000\000\000\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001T\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\003]\003U\004T\000\000\000\000\000\000\000\000\000\000\002,\000\000\000\000\000\000\002n\002e\000\000\003-\000\000\000\000\001\000\000\003,\003+\001\000\000\000\000\000\000\002\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002H\000\030\000\000\000\000=\003\000C\000\000\000\000\000\000\000\002(\004 \000\000\000\000\004\015\000H\000\000\000\000\004\"\000\000\0022\000\000\000\000\004!\000\000\000\000\000\000\000\002\002\001\000\000\000\000\000\000\003\000\000\000\000\000\000\001]\000\000\000\000\000\000\001\\\000\000\000\000\001\000\000\000\000\002R\000\000\000\000\000\000\001\001\000\000\002T\001\000\000\000\000\000\000\002Q\000\000\002S\000\000\000\000\002P\000\000\000\000\000\000\000J\000\000\000\000\002u\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\025\000\023\001\000\000\000\000\000\000\001\000\000\000\026\003\000\000\000\000\002\002*\002\000;\000\000\000\000\000\000\000\000\003\002&\002\002)\000\000\002'\000\000\000D\000\000\000\000\000\000\000<\002\000\000\001\159\000\000\000\000\002\000\000\000\000\001\000\000\004\024\001\000>\000\000\001C\001D\000?\000\000\000\000\000\000\000G\000\000\000\000\000\000\002 \002\031\000\000\000\000\000\026\004\014\000\000\000\000\000\000\000\000\000\000\002D\001\000\000\000F\000\000\001\000\000\000E\000\000\000\000\000D\000\000\002O\000\000\000\000\000\000\002R\000\000\002T\000\000\000\000\000\000\002Q\000\000\002S\000\000\000\000\002P\000\000\000\000=\000C\000\000\000\002(\004 \000\000\000\000\004\015\000H\000\000\000\000\004\"\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\004Y\002\151\000r\000\000\000\000\000\000\000\000\000\000\000\000\004W\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\003\001\004T\003&\003\004\000\000\000\000\000\000\000\000\003L\000\000\002_\002]\002\\\002[\002Z\000\000\002o\000\000\000\000\000\000\003\138\000\000\001t\000\000\000\000\000\000\002\135\000\000\000\000\003\143\000\000\002\003\000\000\000\002\002\000\000\003\138\000\000\003\143\002W\002a\000\000\002\003\000\000\000\000\000\003\149\000\000\000\000\000\000\003\151\003\150\000\000\000\000\000\000\000\000\000\000\002\153\001\000\000\000\000\002\002\152\000\000\000\000\000\000\002 \002\031\002c\000\000\002\002\000\000\000\000\000\000\003\149\000\000\000\000\003\151\003\150\000\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\001_\000\000\003\153\003\152\000\000\000\000\000\000\002s\001|\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\142\003\130\003\131\002\000\000\000\000\003\140\002\000\000\000\000\001\003\157\003\141\002\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000\002\000\000\002`\002b\002k\002h\002Y\002i\002j\000\000\004S\002\000\000\000\000\002\000\000\002{\000\000\000\000\000\000\003\144\001\000\000\003\156\000\000\000\000\003\155\003\154\000\000\000\000\000\000\000\000\002\002\000\000\000\000\003\153\003\152\000\000\000\000\001\000\000\003\146\000\000\003\148\000\000\003\147\000\000\004S\000\000\000\000\000\000\000\000\000\000\000\000\003\142\003\130\003\131\002\000\000\000\000\003\140\002\000\000\003\157\003\141\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000\002\000\000\002\000\000\000\000\002\000\000\002\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\003\136\003\135\000\000\000\000\003\134\003\133\002\002\003\132\001\000\000\003\145\002\000\000\000\000\002\000\000\000\000\003\137\000\000\000\000\003\136\003\135\000\000\000\000\003\134\003\133\002\002\003\132\000\000\003\146\000\000\003\148\000\000\003\147\000\000\000\000\003\145\002\000\000\000\000\001y\000\000\003\155\003\154\000\000\000\000\003\144\000\000\003\156\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\002\002\001u\001v\000\000\000\000\001p\000\000\000\000\000\000\000\000\003{\003z\003'\003\001\003&\003\004\000\000\000\000\0031\003T\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\003\031\003\012\000\000\000\000\001c\002s\000\000\001k\000\000\000\000\001f\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003\012\000\000\000\000\001c\000\000\001a\000\000\000\000\000\000\000\000\000\000\001j\000\000\004\003\000\000\000\000\000\000\002\143\004\002\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000(\000\000\000\000\000%\000\000\000\000\000$\000\000\000'\000\000\000&\000\000\000\000\000)\000\000\000.\000\000\000\000\000+\000\000\000\000\000*\000\000\000-\000\000\000,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\000\0004\000\000\000\000\0001\000\000\000\000\0000\000\000\0003\000\000\0002\000\000\000\000\0005\000\000\000:\000\000\000\000\0007\000\000\000\000\0006\000\000\0009\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\002F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\004\011\004\n\004\005\000\021\000\000\000\000\000\004\007\000\000\000\000\004\018\000\004\019\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\004\021\004\020\000\000\004\b\004\004\000\000\000\000\000\000\002\004\012\000\000\000\000\000\000\000\000\000\001(\000\000\001-\000\000\000\000\001*\000\000\000\000\001)\000\000\001,\000\000\001+\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\000\002B\000\000\002A\000\000\002?\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\157\000\000\001\156\001\155\000\000\001\154\000!\002\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002q\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\003O\001L\0034\000\000\000\000\000\000\000\000\000\000\000\000\003R\000\000\003Q\001\002\007\000\000\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002F\000\000\000\000\000\000\000\000\004\005\000\021\000\000\000\000\000\000\000\022\004\011\004\n\004\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\135\001B\000\001(\002}\000\000\001-\000\000\000\000\001*\000\000\000\000\001)\000\000\001,\000\000\001+\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\000\002B\000\000\002A\000\000\002?\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\157\000\000\001\156\001\155\000\000\001\154\000!\002\000\000\000\000\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\002\023\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\003\003\003#\000\000\000\000\000\000\000\000\000\000\000\000\003y\003x\003\002\000\000\001 \000\000\001\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004/\000\000\003\003\003#\001\023\000\000\003y\003x\003'\003\002\000\000\001 \000\000\001\022\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\003\000\000\000\000\000\000\002\143\004\002\001&\001$\001\000\000\003\011\003\n\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\0018\001s\000\000\000\000\001\000\000\000\000\000\000\0019\001\000\000\000\000\000\000\000\000\0017\000\000\000\000\000\000\002.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001~\002\127\000\000\000\000\000\000\000\000\000\000\000\000\003\018\003\017\000\000\000\000\000\000\003\020\003\019\000\000\000\000\003\021\003\015\001`\003$\000\000\000\000\000\000\000\000\002\012\000\000\002\011\001\000\000\002\n\000\000\000\000\001\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\004$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\003\002\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\0013\000\000\000\000\000\000\0010\000\000\000\000\000\000\001/\000\000\000\000\0012\000\000\000\000\0011\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\000\000\004^\000\000\000\000\000\000\000\000\004\030\004\031\000\000\000\000\004\026\004\023\001\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\131\000\000\000\157\000\000\000\000\000\000\002$\000\000\002%\000\137\000\000\000\000\000\000\004\\\002{\000\000\000\000\000\000\000\000\000\141\000\000\000\000\000\000\000\000\000\139\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\131\000\000\000\158\000\156\000\000\000\000\000\137\000\000\000\000\000\000\004\\\000\000\000\000\000\000\000\000\000\000\000\000\000\141\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\139\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\155\000\000\001\000}\000\127\000\135\000\000\000~\000\000\000\000\000\000\000\000\143\000\133\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\142\000\000\000\000\000\000\000\000\000\140\000\000\000\136\000\000\000\144\000\146\000\000\000\000\000\145\001\000\000\0022\000\134\001\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000}\000\127\000\135\000\000\000~\000\000\000\000\000\000\000\000\143\000\133\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\142\000\000\000\000\000\000\000\000\000\140\000\000\000\136\000\000\000\144\000\146\000\000\000\000\000\145\001\000\134\001\000\000\000\158\000\156\000\000\000\000\159\000\000\000\000\000\000\014\000\000\000\000\000\015\000\000\000\001\140\000\000\000\000\000\000\000\000\000\000\000T\002\131\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004Y\000r\000\000\000\000\000\000\000\000\000\000\000\000\004W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\0018\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\0017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001~\000\000\000\000\000\000\000\000\000\000\000\000\001\000k\000l\000\000\000\000\000\000\000\000\000\000\000i\000\148\000e\000\000\000j\000\000\000\000\000\000\000g\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000\000\000\000f\000\000\000\000\002\129\000p\000\000\000v\002M\000o\000\000\000\000\000s\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\000q\000\000\000w\000{\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\001\002\139\000\000\001\001\000u\000\000\000\000\000\000\000z\000\000\000t\001\002N\000\000\000\000\000\000\000\000\002K\000\000\002L\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\001\142\001\134\000n\000m\000\000\000\000\000\150\000\149\000\000\000\154\000\153\000\000\000T\000\000\000\152\000\151\000\000\000\000\000U\000\000\000\154\000\153\000\000\000\000\000\152\000\151\000\000\000\000\000\150\000\149\000\000\000\000\000\000\000\000\000\000\003\020\003\019\000\000\000\000\003\021\003\015\001`\003$\000\000\000\000\000\000\000\000\001\000k\000l\000\000\000\000\000\000\000\000\000\000\000i\000\148\000e\000\000\000j\000\000\000\000\000\000\000g\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000\000\000\000f\000\000\000\000\002\129\000p\000\000\000v\002M\000o\000\000\000\000\000s\000\000\000\000\000\000\000\000\000\000\000q\000\000\000w\000{\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\001\000u\000\000\000\000\000\000\000z\000\000\000t\001\002N\000\000\000\000\000\000\000\000\002K\000\000\002L\001\000\000\000\000\000n\000m\000\000\000\000\000\000\000\000\000V\000X\000\000\000\000\000\000\000\000\000Z\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000_\000\000\000\000\000\000\000`\000\000\000\000\000\000\000^\000\\\000\000\000\000\000\000\000Y\000W\000\000\000\000\000\n\000\000\000\000\000\011\003\000\000\001\136\000\000\004H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\004F\000\000\000\000\003\003\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\003\000\000\000\000\002\001\000\000\000\000\001\000\000\002\b\000\000\002\022\003\127\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004`\000\000\004a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000\000\003\129\000\000\002\024\001\002\007\001\000\000\001\000\000\000\000\000\000\000\000\001\001\002\005\000\000\000\000\000\000\000\000\002\022\003\127\003}\000\000\003~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004`\000\000\004a\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\001\000\000\003|\000\000\000\000\000\000\003\129\000\000\002\024\002\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\015\001\001\001\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\000\000\001\145\003\000\000\000\000\000\000\004\r\000\000\000\000\000\000\000\000\000\000\000\000\0028\000\000\000\000\000\000\000\000\002:\000\000\0029\000\000\0027\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\152\000\000\001\151\001\150\000\000\001\149\000\031\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\003\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\003\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\004G\003\000\000\000\000\000\000\000\000\000\000\000\000\001\143\001\142\001\134\000\000\003\003\003\000\000\003\000\000\002\016\000\000\002\t\000\000\000\000\002\002\000\000\002\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\002\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\000\000\000\000\000\014\000\000\000\000\000\015\000\000\000\001\140\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\012\000\000\000\000\000\r\000b\000\000\001\138\002\000\000\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\027\001\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\002\000\000\001\147\002\000\000\000\000\000\000\004\r\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000c\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\002\002\002\002\002\000\000\002\002\000\000\000\029\000\000\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\012\000\000\000\000\000\r\000b\000\000\001\138\002\000\000\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\027\001\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\002\000\000\001\147\002\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000c\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\002\002\002\002\000\000\003\128\002\030\000\000\003~\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\002\023\000\000\000\000\000\000\001\000\000\000\000\001\000\000\001A\000\000\002\000\000\003\128\002\030\000\000\000\000\000\000\001?\000\000\000\000\000\000\000\000\000\000\003>\003=\000\000\000\000\003I\003H\000\000\000\000\000\000\001!\000\000\001&\000\000\000\000\001#\001\"\000\000\003J\000\000\000\000\000\000\003N\003M\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\002\000\000\002\000\000\003G\003F\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\002\004U\0033\003S\000\000\0032\000\000\000\000\000\000\003B\003A\001\000\000\001K\000\000\003D\003C\000\000\000\000\003E\003?\001L\000\000\001K\000\000\000\000\000\000\000\000\002\b\000\000\001\000\000\003\"\000\000\003!\000\000\003\014\003\r\000\000\000\000\003\025\003\024\000\000\000\000\003\026\000\000\000\000\000\000\003\030\003\029\000\000\003\016\000\000\003\023\003\022\000\000\000\000\001G\000\000\002\000\000\003\000\000\002\016\000\000\000\000\003\"\000\000\003!\000\000\003\014\003\r\000\000\000\000\003\025\003\024\000\000\000\000\003\026\000\000\000\000\000\000\003\030\003\029\000\000\003\016\000\000\003\023\003\022\004U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\001h\001l\001\001d\000\000\001b\000\000\000\000\000\000\000\000\000\000\000\000\003\017\001\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001:\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\001g\000\000\000\000\001\000\000\001a\000\000\000\000\001b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\000\000\000\000\001:\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\000\000\001;\001\000\000\000\000\000\003;\003:\000\000\0037\000\000\0036\0035\000\000\000\000\003{\003z\0031\003T\000\000\000\000\000\000\003<\000\000\000\000\003B\003A\000\000\000\000\000\000\003D\003C\000\000\000\000\003E\003?\0034\000\000\000\000\000\000\000\000\000\000\000\000\003R\000\000\003Q\000\000\003>\003=\000\000\000\000\003I\003H\000\000\000\000\003J\000\000\000\000\000\000\003N\003M\000\000\003@\000\000\003G\003F\0033\003S\000\000\0032\000\000\003O\000\000\000\000\000\000\003\007\000\000\003\006\003\005\000\000\000\000\000\000\001\000\000\002+\001\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\002\002p\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\0013\000\000\000\000\000\000\0010\000\000\000\000\000\000\001/\000\000\000\000\0012\000\000\000\000\0011\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\002\001\000\000\000\000\001\003\000\000\000M\000\000\002\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\003\000\000\000\000\002\000\000\002\000\000\000\000\002\000\000\000\000\002\000\000\002\002\000\000\000\000\000\000\000\000\000\000\002\015\001\001\000\000\000L\000K\000\000\000Q\000P\000\000\000O\000N\000\000\000S\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\011\003\n\000\000\000\000\002+\000\000\000\000\003s\003`\000\000\000\000\003f\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\002\000\000\000\000\002\000\000\000\000\002\000\000\002\002\001\001\000\000\000\001\000\000\000\000\000\000\003h\003g\000\000\000\000\003i\003c\003X\000\000\000\000\000\000\000\000\000\000\000\000\003v\000\000\003u\000\000\003b\003a\000\000\000\000\003m\003l\000\000\000\000\003n\000\000\000\000\000\000\003r\003q\000\000\003d\000\000\003k\003j\003W\003w\003\\\003V\000\000\003%\003\007\000\000\003\006\003\005\000\000\003-\000\000\000\000\003,\003+\000\000\000\000\000\000\000\001\000\000\000\003*\000\000\003(\000\000\001W\000\000\000\000\000\000\001Y\000\000\001X\003[\000\000\003Z\003Y\000\000\000\000\001\000\000\004(\000\000\001'\000\000\0037\000\000\0036\0035\000\000\001V\000\000\003)\000\000\003*\000\000\003(\000\000\001I\000\000\000\000\004*\000\000\001\000\000\004)\000\000\000\029\000\000\000E\000\000\000\000\000F\002\153\001\000\000\000\000\002\002\152\000\000\000\000\004\024\000>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000(\000\000\000\000\000%\000\000\000\000\000$\000\000\000'\000\000\000&\000\000\000\000\000)\000\000\000.\000\000\000\000\000+\000\000\000\000\000*\000\000\000-\000\000\000,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\000\0004\000\000\000\000\0001\000\000\000\000\0000\000\000\0003\000\000\0002\000\000\000\000\0005\000\000\000:\000\000\000\000\0007\000\000\000\000\0006\000\000\0009\000\000\0008\000\000\000\000\000\000\000\004\007\000\000\000\000\004\018\000\004\019\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\004\021\004\020\000\000\004\b\004\004\000\000\000\000\000\000\003\000\000\001'\000\000\003.\000\000\0030\000\000\003/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\000\002\011\000\000\002\n\002\004\000\000\002\t\000\000\000\000\002\002\000\000\002\003\000\000\003.\000\000\0030\000\000\003/\000\000\003;\003:\000\000\000\000\001I\000\000\000\000\000\000\001N\000\000\001P\001Q\001O\001S\000\000\000\000\001\000\000\000\000\000\003_\003^\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000M\000\000\000L\000K\000\000\000Q\000P\000\000\000O\000N\000\000\000S\000R\000\000\000\000\000\000\002\155\000\000\001$\000\000\002\156\000\000\000\000\000\000\003\003\000\000\001E\000\001\000\000\000\000\001F\000\002\000\000\000\003\000\000\002\157\000\000\000\004\000\000\002\158\000\000\000\000\002\159\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0028\000\000\000\000\000\000\000\000\002:\000\000\0029\000\000\0027\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\152\000\000\001\151\001\150\000\000\001\149\000\031\003\000\000\000\000\000\000\000\000\004*\000\000\001\000\000\004)\000\000\000\000\000\000\000\000\001\000\000\004(\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\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\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\000V\000X\000\000\000\000\000Z\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000_\000\000\000\000\000\000\000`\000\000\000\000\000\000\000^\000\\\000\000\000\000\000\000\000Y\000W\000\000\000\000\000\n\000\000\000\000\000\011\003\000\000\001\136\000\000\004H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\006\000\000\000\000\000\004F\000\000\000\003\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\003\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\000\000\001\145\003\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\000\000\004G\003\000\000\003\003\003\004\001\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\004Q\000\000") and error = - (125, "\128\000\157\018\157\002\135\001\000\133\015\020\t\132\151\020?\136\b\006\028\000\000\000\000\000\000\b\000\004\000\000\000\000\000\000\000B\001\0010!\027\001\015 \002\000\135\000\000\000\000\000\000\002\000\001\000\000\000\000\000\000\000\127\000\000\000\000\000\000\128\000@\000\000\000\000\000\000\000$\016\000\016\002\0061@\0000\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\001\000 c\026\000\003\000\000\000\130\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022.\b\015/\030ߧy\000\016D\128\144@\000@\b\024ƹ\000\000\000\000 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \128\000\128\0161\141r\000\001\128\000\000A\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,\\\016\031^=O\148\000 \137s\001 \128\000\128\0161\141r\000\001\128\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\001\000\000\004\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\002\000@\000\001\000\000\000\002\000\000\000\000\000\000\000\016\002\000\000\b\000\000\000\016\002\000\000\000\000\004\130\000\018\000@5\000\006\000\000\001\004\000$\016\000\016\002\0061@\0000\000\000\b \001 \128\000\128\0161\141r\000\001\128\000\000A\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\001%O \002\b\1510\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\016\016\016\002\0061@\0000\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\004\000\129\156k\144\000\012\000\000\002\b\000H \000 \004\012c\\\128\000`\000\000\016@\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016p@\127\tx>S\000\130%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\128\152\016\141\000\135\144\001\000C\129\011\020\004\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\002\000\137\000\000A\000\016\000\000\002\128\000@\000\000\016\004H\000\002\b\000\128\000\000\133\138\000\002`C7\002\030@\004\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\001%O \002\012\1510\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\004H\000\002\b\000\128\000\001A\004\015`\000&\014{\131\139\002\131\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\015\020\001$\151\020?\128(\014\028\031}\016@\134\000\002`8(8\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\030(\002I/\153ߠ(\127\000\016\0288?\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\128\000\0010\000\000 \000\128\000\000\005\005@\000 \024\000\000@@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\003 \000\000@\001 \000\000\n\n \000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\002\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\0002\000\000\004\000\018\000\000\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\012\128\000\001\000\004\128\000\000((\128\001\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\016@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\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\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\b\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\000\000@\000\000\002\128\000\016\012\128\016$\000\000;@\000\002\000$\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\001\005A\004 \024\000 @\000\001\128v\128\000\000\000\b\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\004\000\000\027\000\000\002\000\t\000\002\000\021\128F\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\b\004\b\000\0020\014\000\000\000\001\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\002\128\012\000\016\000\000;@\000\000\000\004\000\020\015\b ~\000\0010s\028X\020\028\128$\157\018\157\002\135\001\001\128\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000H \000 \004\012\\\128\000`\000\000\016@\002\000\000\000\000\000 \000\000\000@\000\000\000\000\000\000\002\000@\000\001\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\130\000\002\000@5\000\006\000\000\001\004\004,P\000\019\002\0301@\016\000 \np\011\020\000\004\135\140o\004<\128\b\002\028\031}\016@\134\000\002`8(9C\000I:%;\005\015\002\003\135\000\018\b\000\b\001\003\024 \000\024\000\000\004\016\016@\000L\bx\000C\000\128)\004\000\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\004\000\128\000\002\000\000\000\004\000\000\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\001\016\0048\000\144@\000@\b\024ƹ\000\000\000\000 \128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\136\000\bX\000&\004\016\004\142\134\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000B\000\0010!\027\001\015 \002\000\135\000\000\000\000\000\000\002\000\001\000\000\000\000\000\000\000\000\144@\000@\b\024ƹ\000\000\000\000 \128\000A\003\129\147\128%\148t0\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bZ &\004c\127\128!\000@\016\002\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\b@\000\000\000\000\000\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\002\018`C7\002\030@\004e\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\128\152\016\141\000\135\144\001\025C\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000 \000! \002\000\028\002w\128\000h\000@\016@B\000\t0!\027\001\015 \002\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\012\130\016\000 \001'h\000\006\128\004\001\004\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\128!b\128\000\152\016\141\000\135\144\001\000C\128\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\0009 ?\128<\026w\159\bh\000A\018\000\000\001\000\000\000\000\000\004\000\002\000\000\000\000\000\000\000\b\000\000\000\000\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000!\000\002\000\028\002w\128\000h\000@\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\133\138\000\002`C7\002\030@\004\001\014\004,P\000\019\002\0301@\016\000 \bp\001 \128\000\128\0161\141r\000\001\128\000\000A\000\000\131m\007\003'\131\000I(aX\000&\004\000`\000| \000\000\020\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\128\b6?\000x2x>\016\004\142\134\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\0010!\027\001\015 \002\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\000`\004>\000`\000| \000\000\005\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001O \002\000\135\002\022(\000\t\129\015\024ߠ\by\000\016\0048\000\b0\031\000`0@>\016\004\144\142\134\028\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024!\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\b\t\129\015\024ߠ\by\000\016\0048\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000m~\000d|`\001E\029\0288\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\128\128(X &\004\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\000\000\006\000C\012\006\000\007\000\000\000P\129\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\005<\128\b\002\028\bX\000&\004\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\129\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\129\000\000\006\001\000\000\000\000 \000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\024\016\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\129\144B \004\0018\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\016\128\001\000\014\001;@\0004\000 \b \000\000\000\000\000\000 \000\000\000\000\004\000\011\004@\029D$\000@\003\128N\000\r\000\b\002\b\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\b\000\002\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\000\000\016@\000L\bx\000C\000\128!\000\001\132\003\001\130\001\128\004\004\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\b\000\000\000\000\000\000\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\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\135\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016@\000L\bx\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\006\b\1280\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\031\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\001\011\020\000\004\135\140o\004<\128\b\002\028?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007q\004\016?a\128\000\1529\014,\n\014P@\018N\137|\001C\000\128\004\130\000\002\000@5\000\006\000\000\001\004\016\000\r\143\028\012\142\015\132\000 \128\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\001!\006\003\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\016\000\000\000\000\001\000\005\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000\001\128\144\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024\005\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004\001\018\000\000\130\000 \000\000\005\000\000\128\000\000 \b\144\000\004\016\001\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\024!\015\1280\024\000\031\b\000\000\003B\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P@\bN\137|\001C\000\128a\000\000\000\000\000\000\128\000@\000\000\000\000\000\000\000$\016\000\016\002\0061@\0000\000\000\b \128\000m4~\000dp| \001D\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\001\144B\000\004\0008\004\000\000\000\128 \128@\000\000\000\000\000\000\000\000\000\000 \000\000\016\004,P\000\019\002\0301@\016\000 \bp\000\000`\004>\000`\000| \b\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\bX\000&\004\016\000\128\002\006\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\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000B\000\0010!\027\001\015 \002\000\135\000\001\006\000C\012\006\000\007\000\002\000@\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000`\132>\000`\000| \000\000\004\b\024\t\004\000\004\000\129\140k\144\000\012\000\000\002\b \000\027M\031\1288\025\028\031\b\000A\001\002\006\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\1290\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\002\000\004\000\000\b\000\000 \000@\000\000\152\000\000\016\000H\000\000\002\128\128\130\000\004\128\000\000\000\000\128\001\000\000\002\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\b\000$\000\000\001@@A\000\002@\000\000\000\000@\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\128\002@\000\000\020\004\004\016\000$\000\000\000\000\004\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\b\000$\000\000\001@@A\000\002@\000\000\000\000@\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\002\128\128\130\000\004\128\000\000\000\000\128\001\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\005\001\001\004\000\t\000\000\000\000\001\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \000!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\154\031\000`0\000>\016\000\128\002\004\012\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\000\000\000@\000\000\000\000\000\000\004\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\000!\000\000D\000\000\004 \000\000\000P\000\016\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000`\000\129\000\000\006\001\000\000\000\000 \000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\004\000\000\b\000\000\000\000\000\000\000@ \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\137\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000l\000\000\b\000 \000\000\000@@\000\b\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004 \000\b\152\000\000\000\128\004\000\000\000\002\000\000\002\000\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000`\000\129\000\000\006\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\"@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \017 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\000\000\016\000\000\000 \000\004\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\002\000\000\000\004\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000 \000\b\000\000!\"\002\000\028\002w\128\000h\000@\016@\000\000\000\016\000\000\000\000\004\000\002\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\016\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\128\000@\000\000\016\000\004\000\000u\016\144\001\000\014\001;\0004\000 \b \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\002\000\000\000\000\000`\017 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\000\137\128\000\000\b@@\000\000\000\000\"\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\016\000H\000\000\002\128\128\000\016\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\004H\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\0000\b\144\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\128\000\000\000\000A\000\000\000\000\000\000\000\000 \000\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\b\128\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\b\128\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\144\000\016@\000L\bx\000C\000\128!\000\001\132P\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b\006\003\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\016\000\000\000\000\003\000\137\000\000A\000\016\b\000\000\128\000\000\000\000\024\004H\000\002\b\000\128@\003d\016\136\001\000\014\001;@\0004\000 \b \003 \132\000\b\000p\t\000\001\001\000A\000\000\000\000\000\000\001\000\000\000\000\000 \000X\"\000! \002\000\028\002w\128\000h\000@\016@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\016\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\000\000\012\"\135\024\012\016\015\132\000 \129\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\012\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\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\004,P\000\019\002\0301@\016\000 \bp\127\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048?\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\004,P\000\019\002\0301@\016\000 \bp\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016@\000L\bx\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128!b\128\000\152\016\141\000\135\144\001\000C\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\001\000 c\026\000\003\000\000\000\130\b\000\000\004\000\002\000G\000\000\000\000@\000\000\000\128\000\000\000\000\024\004H\000\002\b\000\128A\000\004\000\000\000\000\000\"@\000\016@\004\002\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\128\000\001\000\000 \000\128\000\000\001\001\001\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001B@\004\0008\004\000\000\000\128 \128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\0000\b\144\000\004\016\001\000\128\004\000\000\r\128\000\001\000%\128\000\000\b\b\b\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\128\000\000\000\000\024\004H\000\002\b\000\128@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\"\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\128\000\"`\000\001\002\0000\000\000\000\b\000\b\b\000\000\000\000\004\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\016\002\000\028\002v\128\000h\000@\016@\006A\b\000\016\000\019\000\003@\002\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144@\000@\b\024ƹ\000\000\000\000 \130\000\0004A\000\000\128\017\000\000\000\016\000\000\000 \000\000\000\000\006\001\018\000\000\130\000 \016@\001\000\000\000\000\0000\b\144\000\004\016\001\000\128\004\000\000\b\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000@\000\000\000\000\000\000\000\b\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\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\002\000\001\000\000\000@\000\016\000\001\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000D\000\000\004\000`\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000D\000\000\000\000 \000\000\000@@\001\b\006A\b\000\016\000\019\000\003@\002\000\130\000\000\000\017\000\000\000\000\b\000\000\000\016\016\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\012\130\016\000 \001'h\000\006\128\004\001\004\000\000\000\"\000\000\000\000\016\000\000\000 \000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000\000\000\000\002\000\000\0002\bD\000\128\007\000\157\000\026\000\016\004\016\001\144B\000\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\003 \132@\b\000p\t\000\001\001\000A\000\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002$\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\006\001\018\000\000\000\000 \000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\016\000\016\002\0061@\0000\000\000\b \000\000\r\016@\000 \004p\000\000\000\004\000\000\000\b\000\000\000\000\000\128\002\128\000\000\000\000\000\000\bX\000&\004\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\128\016\003\001\128\001\128\000\000\020 d,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000S\000\128!\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003\128\000a4>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\004\016\002\130\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003\001\000\000\000\000\000\016\000P\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\024\t\015\1280\024\000\031\b\000\000\001\002\007\000\000h\001@\n\b\b\0162\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\154\031\000`0\000>\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012\002\135\024\012\000\015\132\000\000\000\129\003\128\000m4~\000dp| \005\004\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\007\000\000h\001@\n\b\b\0162\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\154\031\000`0\000>\016\000\128\002\004\012\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\b\000\000@\000\000\000\000\b\002$\000\001\004\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\019\000\000\002\000\t\000\000\000\016\016\000\002\002\128\000@\000\000\016\004H\000\002\b\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\000\000\004\000\002\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000@\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000 \000 \000\000\001\002@\000\012\003\000\000\000\000@\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\004\000\000\025\000\000\000\000\t\000\000\000P\021\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\003 \000\000\000\001 \000\000\n\n \000@\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\006@\000\000\000\002@\000\000\020\020@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\001\144\000\000\000\000\144\000\000\005\001\016\000 \004\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000 \000\000\000\000\000\000H\000\000\002\128\136\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\006\001\018\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000P\000\000\000\000\002\000\137\000\000A\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000@\000\000\000\000D\000\016\000\0006\000\000\004\000\018\000\000\000 \004\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\016\000\000\128\000\000\000\000\024\004\b\000\000\000\000\000\000\000\012\000\000\000\000\000\"@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128\000\003\000\004\t\000\0000\014\000\000\000\001\000\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\0000\000\000l\000\000\000\000 \000\000\000@T\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\128\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\r\128\000\001\000\004\000\000\000\b(\128\001\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000\000\000\000@\000\000\000\130\136\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\0006\000\000\004\000\016\000\000\000 \000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\003`\000\000@\001\000\000\000\002\n \000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\r\128\000\000\000\004\000\000\000\b(\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\003`\000\000\000\001\000\000\000\002\002 \000@\b\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\b\000\000\000\000\001\128D\128\000\000\000\b\000\0000\000\000l\000\000\000\000 \000\000\000@D\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000 \b\144\000\004\016\001\000\000\004\000\000\r\128\000\001\000\004\128\000\000\b\b\136\001\000@\000\000\000\000\b\002$\000\001\004\000@\000\001\000\000\003`\000\000@\001 \000\000\002\002\"\000@\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000 \000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000 \000\000\b\000\002\000\b\000\000\019\000\000\000\000\b\000\000\000\016\016\000\002\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000@\000\000\016\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 \b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\004\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\000\000@\000\000\000\128\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\1290\153\018\157z\002\135\000\000\131@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000\128\000\016\000`\000\000@\000\129\002\000\004\128\000\000\000\000\128\003\000\000\002\000\004\b\016\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\128\000\0010\000\000\000\000\128\000\000\001\001\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000\000\000\000@\000\128\000\001\000\000\004\000\b\000\000\019\000\000\000\000\b\000\000\000\016\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\000\000\016\000\000\000 \000\128\001 \000\000\000\000 \000@\000\000\128\000\002\000\004\000\000\t\128\000\000\000\004\000\000\000\b\b\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000\000\000\000@\000\128\000\001\000\000\004\000\b\000\000\019\000\000\000\000\b\000\000\000\016\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000\000\000\000\000\000\002\b\000\000\000\024\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000@\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\016\000\000&\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\016\002\000\156\002v\128\000h\000@\016@\006A\b\000\016\000\019\000\003@\002\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\004H\000\002\b\000\128\000\002\000\000\004\000\000\128\000@\000\000\004\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000\000\000\016\000 \000\000@\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\002\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\004\000\000\t\128\000\000\000\004\000\000\000\b\b\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000\000\001\000\000\000\002\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\0000\154\031\000`0\000>\016\000\128\002\004\012\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\004\000\000\001\000\000@\001\000\000\002`\000\000\000\001\000\000\000\002\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\t\128\000\000\000\004\000\000\000\b\b\000\001\000!\000\002\000\028\002v\128\000h\000@\016A\000\000\002`\000\000\000\001\000\000\000\002\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\144B\000\004\0008\004\000\000\000\128 \130\000\000\004\000\000\000\002\000\000\000\004\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bx\000&Dg~\128\000@0\006A\b\128\016\004\019\000\003@\002\000\130\0002\b@\000\128\007\000\157\000\026\000\016\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\016\000\000\002\004\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\b|\001\128\000@\000\000:\0160\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\128\000@\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\b\128!\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\b\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\t\015\1280\024\000\031\b\000\000\001\002\006\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\024\004H\000\000\000\000\128\000\001\000\000\004@\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\017\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000 \000@\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\004\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000 \000\000\000\000\002\001\018\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000\002\002\000\000@\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000 \000\000\000@@\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000 \000\000\000\000\006\001\018\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\004\000\000\000\b\b\000\001\002\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\128\000\000\001\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\002\000\000\000\000\b\000\001\000\016 \129\b\000 \006\016\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000 \000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\004\000\000\000\000\000\"@\000\000\000\004\000\000\b\000\000\"\000\000\000\000\016\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\017\000\000\000\000\b\000\000\000\016\016\000\002\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\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 \b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000@\000\000\000\128\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\001\016\001\002\b\016\000\002\000a\000\000\128\003@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000\128\000\016\000`\000\000@\000\129\002\000\004\128\000\000\000\000\128\003\000\000\002\000\004\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000A\000\000\000\003\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\b\000\000\002\128\000\000\000\004\000\000\000\000\000\"@\000\000\000\004\000\000\b\000\000\"\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\"@\000\000\000\004\000\000\b\000\000\"\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\000\000\000\128\001\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000 \000\000\000@@\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\b\000\000\000\016\016\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\128\000 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\000\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\136\000\000\000\000@\000\000\000\128\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000\000\000\b\000 @\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\b\128!\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\b\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000H|\001\128\000@\000\000\b\0168\000\006G\014\006O\007\000PQ\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp \000\000\000\000\002\000\n\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\001!\006\003\000\003\000\000\000 @\000\027m\031\1288\025<\031\024\001AGG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\128P\003\001\128\001\128\000\000\016 p\000\r\143\028\012\158\015\140\000\135!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\r\006\003\004\003\000\b\b\000\027m\031\1288\025<\031\024\001AGG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\128\144\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016m~\000d| \r%\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014\002\000\000\000\000\000 \000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\018\031\000`0\000>\016\000\000\002\004\012\000A\003\129\147\1284\148t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024\005\015\1280\024\000\031\b\000\000\001\002\006\000 h\001@\026J:\024r\022(\000\t\129\015\024ߠ\by\000\016\0048\000\b0\031\000`0@>\016\004\144\142\134\028\000A\003\129\147\1284\148t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\001\011T\000\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\006\027C\012\006\b\007\000\016\017\129\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\004,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\028<\000\003\001!\006\003\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\001\006\027C\012\006\b\007\000\146\017\129\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0128\000\131\000!\006\003\000\003\000\001\000 @X\000&\004\016\004\146\142\134\028\000\001\130\016\003\001\128\001\128\000\000P `\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\b\000\001\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048\000\b0\031\000`0@>\016\004\144\142\134\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003 \132\000\b\000p\t\000\001\001\000A\000\128\000\000\000\000\000\000\000\000\000\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\134\003\001\130\001\128$\132t0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\000\002\0126\135\024\012\016\015\132\001$#\135\000\016`\004>\000`\000| \000 \004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024!\015\1280\024\000\031\b\000\000\001\002\006\002A\000\001\000 c\026\000\003\000\000\000\130\b\000\006G\014\006O\007\000\016Q\128\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\016\135\024\012\000\015\132\000\000\002\129\003\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\b\000\000\000\000\000\000\000\000\000\004\000\000\002\000\000\000\000B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000a>\000`\128|`\001\001\029\0288\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\001\000\000h\001\002\138:8p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000m~\000d|`\001E\029\0288\t\004\000\004\000\129\140k\144\000\012\000\000\002\b \000\027m\031\1288\025<\031\024\000QGG\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\018\031\000`0\000>\016\000\000\002\004\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\001\000\000\000\000\000\016\000P\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\024\t\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000\001\128P\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\002\000\000\000\000\000`\002\000\000\000\000\000\000\002\022.\000\015/\030ߧy\000\016D\128\128\000\000\000\000\016\004H\000\002\b\000\128\000\000\000\000\000\000\000\000\128\000@\000\000\000\000\004\000\016 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\0040\000\142\142\028\133\138\000\002`C7\002\030@\004\001\014\016\000\0126\135\024\012\016\015\140\000 #\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\027C\012\006\b\007\000\146\017\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000!b\128\000\152\016\141\000\135\144\001\000C\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\027m\031\1288\025<\031\024\000AGG\015\000\000(|\001\128\000@\000\000\b\0160\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016@\000L\bx\000C\000\128!\000\001\132P\003\001\128\001\128\000\000\016 p\000\r\143\028\012\142\015\132\000\000\130\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\000\006\003\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\015\129\144B \004\1298\004\000\000\000\128 \128\004\128\000\000\000\000\128\001\000\000\002\000\000\b\000\000\000\000 \000\000\004\000\018\000\000\000 \128\001 \000\000\000\000 \000@\000\000\128\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000@\001 \000\000\n\002\002\b\000\018\000\000\000\000\002\000\004\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\018\000\000\000 \128\001 \000\000\000\000 \000@\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000@\001 \000\000\n\002\002\b\000\018\000\000\000\000\002\000\004\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\128\002@\000\000\020\004\004\016\000$\000\000\000\000\004\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\004\128\000\000(\b\b \000H\000\000\000\000\b\000\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\b\004\000\128\000\000\128\000\000\000\000\000\000\000\000 \000\000\004\000\000\000\000\000\000\000\000\000\004@\000B\000\0010!\027\001\015 \002\000\135\b\000\006\001C\012\006\000\007\000\000\001@\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\151o\004=\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\001\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\128\000\000!b\128\000\157\018\141\000\135\001\000C\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000 \000\000\b\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016@\000N\137|\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\004\000\000\000\000\003 \132@\b\000p\t\000\001\001\000A\000\t\000\000\000\000\001\000\002\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002dK7\002\030\004\001\014\000d\016\136\001 N\001;@\0004\000 \b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000\000\000\000\000!\016\002\000\028\002v\128\000h\000@\016A\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\b\000\000@\000\000\000\000\b\002$\000\001\004\000@\000\000\000\000\002\000\000\000@\001 \000\000\002\002\000\000@\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000 \000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\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\000B\000\000\137\128\000\004\b\000\000\016\000 \000# \000\000\000\000\006\000.\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048\000\0000\002\031\000`0\000>\016\000\000\n\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012\016\135\024\012\000\015\132\000\000\000\129\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\0000\001\000\000\000\001@\000\000\000\016\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\004\000`\000| \000\000\004\b\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\000B\000\0010!\027\001\015 \002\000\135\000\000\006\001C\012\006\000\007\000\000\000@\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\b\000\000\000\000\001\128\011\128\000\000\000\000\000\000\bX\000?\132{~\159)\000A\018\002\000\000\000\000\000@\017 \000\b \002\000\000\000\000\000\000\000\000\002\000\001\000\000\000\000\000\016\000@\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\017\000C\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\012\000\135\024\012\000\015\140\000\000\002\129\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\006\000 \000\000\000(\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \128\000\128\0165\141r\000\001\128\016\000A\000\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000\000\003\000\016\000\001\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\000\000\000\020\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\003\r\006\003\004\003\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\004\000`\000| \000\000\020\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024!\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\006\bC\012\006\000\007\000\000\000\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000@\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\024\004H\000\000\000\000\128\000\003\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\b\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130ai!C\018:\154p\000\000\000\000\000\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\001\003\129\147\128\005\020tp\002\r\143\030\012\158\015\132\001,\135\000\000,\004@\0000\004p\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\001\016\000\012\001\028\000\b\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\b\000\000\000\n\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\128\b\000\000\000\n\000\000\000\000\128\000\000@\000\012\000@\000\000\000P\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\r\143\028\012\158\015\140\000 \135!b\128\000\152\016\141\000\135\144\001\000C\128\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \128\000\128\0161\141r\000\001\128\000\000A\000\000\131m\007\003'\131\000I(a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\002\022(\b\t\129\015\024ߠ\by\000\016\0048\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H \000 \004\012c\\\128\000`\000\000\016A\000\000h\001@\002\b\b\016:\030(\003\t/\153ߠ(\127\016\016\0128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\130\004 \000\128\024@@ \000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\004\016\000\130\002\004\r \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\t\000\000\b\000\001\000\006\000\000\004\000\b\016 \000H\000\000\000\000\b\0000\000\000 \000@\129\000\002@\000\000\000\000@\000\128\000\001\000\000\004\000\000\000\000\016\000\000\000\000\b\000\000\000\016\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\000\000\001\000\000\000\000\000\128\000\000\001\001\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\000\000\000\002\002\000\b\000\018\000\000\000\000\002\000\004\000\000\b\000\000 \000\000\000\000\128\000\000\000\000@\000\000\000\128\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\000\000\001\000\000\000\000\000\128\000\000\001\001\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144@\000@\b\024ƹ\000\000\000\000 \129\000\0000\001\000\000\000\001@\000\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144@\000@\b\024ƹ\000\000\000\000 \128\000\0000\001\000\000\000\001@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\018\b\016\000\000\003\000\000 \000\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000@\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\023\004\007\151\143o<\128\b2\\\000\000 \000\000\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\022(\000\t\129\015\024ߠ\by\000\016\0048\000\0000\002\031\000`0\000>\016\000\000\n\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012\016\135\024\012\000\015\132\000\000\000\129\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000&\004\016\000\128\002\004\012\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\004>\000`\000| \001\000\004\012\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\006A\b\000\016\000\019\000\003@\002\000\130\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000@\016@\000L\bx\000C\000\128!\000A\128\016\003\001\128\001\128\000\128\016 d,P\000\019\002\0301@\016\000 \bp\000\000`\132>\000`\000| \000\000\004\b\024\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000\000\027A\031\1288\025\028\031\b\000A\001\002\006\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\129\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\000\000\000@\000\016\000\001BD\004\0008\004\000\000\000\128 \128\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\004\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\004\000\001\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\000\031\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\024\004H\000\002\b\000\128@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\000\000\000\002\002\000\000@\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000 \000\000\000@@\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\130\000\002\000@5\000\006\000\000\001\004\000\000\r\143\028\012\142\015\132\000 \128\129\003\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\128\016\003\001\128\001\128\000\000\020 d,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\016\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\016\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\016\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000S\000\128!\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003\000\000a\004>\000`\000| \001\000\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\144@\000L\bx\000C\000\128!\000\001\132\016\003\001\128\001\128\004\000\016 d,P\000\019\002\0301@\016\000 \bp\000\000a\004>\000`\000| \001\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\006G\014\006G\007\000\016@@\129\144@\000L\bx\000C\000\128!\000\001\128\144\003\001\128\001\128\000\000\016 `\000\r\143\028\012\142\015\132\000\128\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @@\000\000\000\000\004\000\020\000\000\000\000\000\000\000B\000\0010!\027\001\015 \002\000\135\b\000\006\002C\012\006\000\007\000\000\000@\129\128\0006\130?\000p28>\016\002\130\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\000\006\003\000\003\000\000\000 @\000\027A\031\1288\025\028\031\b\001A\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\128\0006\130?\000p28>\016\002\130\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\000\000\000@\000\016\000\000\000\000\128\000\000\000\000@\000\000\000\128\128\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\002\000\000\000\004\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\020\b\004\151\020?\136\000\006\028\031\002\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\144\000\000\128\000\016\000`\000\000@\000\129\002\000\004\128\000\000\000\000\128\003\000\000\002\000\004\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\004\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144B \004\0018\004\000\000\000\128 \128\004\000\000\000\000\000\128\"@\000\016@\004\000\000\000\000\000 \000\000\004\000\002\000\000\000 \000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\b!\006\003\000\003\000\b\000 @@\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000 \000\000\b\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000@\000\000\016\000\004\000\000\000\000 \000\000\000\000\016\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\0040\000\142\142\028\133\138\002\002`K7\002\030@\004\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\011\020\000\004\135\140o\004<\128\b\002\028\bX\000&\004\016\000\130%\140\012\130\016\000 \001'h\000\006\128\004\001\004\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\131 \133\b\000p\tR\000\001\128\000\019U@\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\006\000\000\000\000\000\000\000\000 LQ\000\000\016\000\001\000\b\000\000@\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\000\r\128\000\001\000\n\128\000\004\000\000\152\000! \002\000\028\002v\128\000h\000@\016@\006A\b\000\016\000\019\000\003@\002\000\015\144B\000\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\0006\000\000\000\000\000\000\000\000\000\002b\136\003 \132\000\b\000p\t\000\001\001\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\015\012\006\000\007\000\000\000@\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000$\000\000\000\000\000\000\000\000\000\002\002\128\003 \132\000\b\000p\t\000\001\001\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\b@\000\128\007\000\157\000\026\000\016\005\016@\000\000\144\000\000\000\000\000\000\000\000\000\b\n\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\b@\016\000\019\000\003@\002\000\130\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\131 \132 \b\000p\t\000\001\017\000A\000\025\004 \000@\003\128N\000\r\000\b\002\b \000\000\b\000\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\002\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\004 \000@\003\128J\144\000\012\000\000\002\b\0009 ?\128\026v\159\bh\000A\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\001\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\001\144B@\004\0008\004\000\000\000\128 \128\012\130\016\000 \001'h\000\006\128\004\001\004\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\019 \133\b\000p\tR\001\001\141\000\019U@\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\006\128\000\000\000\000\000\004\0004 LQ\000\000\016\000\001\000\b\000\000@\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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$\0004\000\000\004\000*\000 \017\002b\136\003 \132\128\b\000p\t\000\001\001\000A\003!\000\002\000\028\002v\128\000h\000@\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\026\000\000\000\000\000\000\016\000\0011D\001\144B\000\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\007\006\003\000\003\000\000\000 P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\b\000\"\b\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\130\016\000 \001'h\000\006\128\004\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\b\000\016\000\019\000\003@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\b\000\012\130\016\000 \001'h\000\006\128\004\001D\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\b\002\000\028\002v\128\000h\000@\016A\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\b@\000\128\007\000\157\000\026\000\016\005\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\016\132\001\000\014\001;@\0004\000 \b \128\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b0\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\000\000\000\000\000\000\000\000\001\000@\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\016\006A\b\000\016\000\019\000\003@\002\000\130\b\000\000\b\000\000\000\000\000\000\000\000\000\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\025\004 \000@\003\128N\000\r\000\b\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\016\006A\b\000\016\000\019\000\003@\002\000\130\b\000\000\b\000\000\000\000\000\000\000\000\000\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000 \000\128\000\bX\001&\004\016\004\142\134\028\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\027T\004\004\151\140o\004<\128(\130\028\bڠ &\004\000`\128| \t!\029\0128\000\131m\007\131'\131\000K(a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000L\bx\000C\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\000\006\000C\012\006\000\007\000\000\000P\129\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\020\000 \bp!b\128\000\152\016\141\000\135\144\001\000C\128\000\131\r\006\003\004\003\000I\ba\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000A\134\003\001\130\001\128$\132t0,P\000\019\002\0301@\016\000 \bp\000\016a>\000`\128| \t!\029\0129\011\020\000\004\135\140o\004<\128\b\002\028\000\004\024m\015\1280\024 \031\b\002HGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\144@\000L\bx\000C\000\128!\000\001\130\016\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\128\152\016\141\000\135\144\001\000C\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\006G\014\006O\007\000\020Q\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\0010!\027\001\015 \002\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\000\000\000\000\000\000\000\b\b\002\133\138\002\002`C7\002\030@\004\001N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\000\000`\004>\000`\000| \000\000\005\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000S\000\128!\133\138\000\002`C7\002\030@\004\001\014\016\000\0126\135\024\012\016\015\140\000 #\135\128\000a>\000`\128|`\001\001\029\0289\011\020\000\004\135\140o\004<\128\b\002\028 \000\024m\015\1280\024 \031\024\000@GG\014B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\144@\000L\bx\000C\000\128!\000\001\134\003\001\130\001\128\004\004tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\0288\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\001\129\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\024\025\004\"\000`\019\128N\000\r\000\b\002\b\000!\016\002\000\028\002v\128\000h\000@\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\b@\000\128\007\000\157\000\026\000\016\004\016\000\000\000\000\000\000\016\000\000\000\000\002\000\005\130 \014\018\000 \001'x\000\006\128\020\001\004\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024 \031\b\000@A\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B@\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000@\000\000\016\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\007Q\t\000\016\000\019\000\003@\002\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\016\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\000\129\000\000\006\001\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\031\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000B\000\0010!\027\001\015 \002\000\135\015\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\031\000\000\000\000\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\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048\127\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \130\0070\000\019\007=\129A\030(\002I/\153ߠ(\127\000\016\0288\000\144@\000@\b\024ƹ\000\000\000\000 \130\000\001\003\129\145\128\004\016\016 d,P\000\019\002\0301@\016\000 \bp\128\000`$>\000`\000| \000\000\004\b\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\002\000\000\000\000\000 \000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\018\031\000`0\000>\016\000\000\002\004\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!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\000\006\003\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\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\128\"@\000\016@\004\000\000\000\000\016\000\000\004\001\018\000\000\130\000 \000\000!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\004!\006\003\000\003\000\000\000h@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\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\128\000\000\000\000\000\000\000\000\000\024\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\030(\001\t/\153ߠ(\127\000\016\0128\000\000\000\000\002\000\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000@\000\000\000\000\000\000\000$\016\000\016\002\0061@\0000\000\000\b \128\000m4~\000dp| \001D\004\b\025\011\020\000\004\135\140o\004<\128\b\002\028 \000\024M\015\1280\024\000\031\b\000@\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000d\016\128\001\000\014\001;@\0004\000 \b \016\000\000\000\000\000\000\000\000\000\000\b\000\000\004\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024\001\015\1280\024\000\031\b\002\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\031\000`0@>0\000\128\142\142\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\012&\135\024\012\000\015\132\000 \000\129\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\b@\000\128\007\000\157\000\026\000\016\004\016\000\000\000\000\000\000\000\000\000\000\128\000\000\000\002\000\133\138\000\002`C7\002\030@\004\001\014\000\002\012\000\135\024\012\000\015\132\000\004\000\129\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\bX\000&\004\016\000\130\002\004\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\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\002`\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\128\000\0010\000\000 \000\144\000\000\005\001\001\004\000\t\000\000\000\000\001\000\002\000\000\004\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\002\128\128\130\000\004\128\000\000\000\000\128\001\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\004\000\000\t\128\000\001\000\004\128\000\000(\b\b \000H\000\000\000\000\b\000\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\002\128\128\130\000\004\128\000\000\000\000\128\001\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\005\001\001\004\000\t\000\000\000\000\001\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000@\001 \000\000\n\002\002\b\000\018\000\000\000\000\002\000\004\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000B\000\0010!\027\001\015 \002\000\135\b\000\006\019C\012\006\000\007\000\016\000@\129\129\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\004,P\000\019\002\0301@\016\000 \bp\128\000a4>\000`\000| \001\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000@\000\000\016\000\000\000\000\000\000\001\001\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\136\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\000\000B\000\000\137\128\000\000\b@@\000\000\002\000 \016\000\004L\000\000\000B\002\000\000\000\005\000\001\000`\000\129\000\000\006\001\000\000\000\000 \000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\007\132\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\004\002$\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\0170\000\000\001\b\b\000\000\000T\000\004\002\000\000\137\128\000\000\b@@\000\000\000\000 \000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000 \000\000F\000\000\000\000\000\000\000\002\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\004H\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\003`\000\000@\001\000\000\000\002\002\000\000@0\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\137\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\0170\000\000\001\000\b\000\000\000\004\000\000\004\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000`\000\129\000\000\006\001\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\000\000\b\000$\000\000\001@@\000\b\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\b\152\000\000\000\128\004\000\000\000\002\000\000\002\000\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000`\000\129\000\000\006\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\"@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\137\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000\000\000\128\000\000\001\001\000\000 @\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\000\000\016\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\004\000\000\001\000\000@\000\007Q\t\016\016\000\019\000\003@\n\000\130\000\000\000\000\000\000\000\000\001\000\000\000@\000\016\000\000\128\000\000\000\000\024\004H\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\b\000\000\000\000\001\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\b\000\000\000\007\132\000\000\000\000\002\b\000\000\000\000\000\000\000\001\000\000\000\000\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000D\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000 \000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000D\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\004\128\000\133\138\000\002`C7\002\030@\004\001\014\000\000\012\"\135\024\012\000\015\132\000\000\000\129\003\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024E\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\024\004H\000\002\b\000\128@\000\004\000\000\000\000\000\"@\000\016@\004\002\000\031\003 \132@\012\000p\t\000\001\001\000A\000\025\004\"\000@\003\128N\000\r\000\b\002\b\000!\000\002\000\028\002v\128\000h\000@\016@\000\000\000\000\000\000@\000\000\000\000\b\000\022\b\128:\136H\000\128\007\000\157\000\026\000P\004\016\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000a\020>\000`\128| \001\001\004\0128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Q\t\000\016\000\019\000\003@\002\000\130\000\000\000\000\000\000\000\000\001\000\000\000@\000\016\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\b\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\015\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000B\000\0010!\027\001\015 \002\000\135\007\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\015\000\000\000\000\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\001\002\000\000\012\003\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048?\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\004,P\000\019\002\0301@\016\000 \bp\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H \000 \004\012c\\\128\000`\000\000\016A\000\000\026 \128\000@\b\000\000\000\b\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b \000\128\000\000\000\000\024\004H\000\002\b\000\128@\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\016\000\0006\000\000\004\000\016\000\000\000 \012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000:\136H\000\128\007\000\157\000\026\000P\004\016\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\000\000\000\000\000\"@\000\016@\004\002\000\016\000\0006\000\000\004\000\150\000\000\000 \012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000`\017 \000\b \002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B@\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000 \000\000\000\000\006\001\018\000\000\130\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\b\000\000\000\000\001\128D\128\000 \128\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\129\000\000\006\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\001\b\000\002&\000\000\016 \003\000\000\000\000\128\000\128\128\000\000\000\000A\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\130\017\0000\001'h\000\006\128\004\001\004\000d\016\136\001\000\014\001;@\0004\000 \b \003 \132\000\b\000p\t\000\001\001\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H \000 \004\012c\\\128\000`\000\000\016A\000\000\026 \128\000@\b\000\000\000\b\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b \000\128\000\000\000\000\024\004H\000\002\b\000\128@\002\000\000\004@\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\004\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000`\000\129\000\000\006\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\001\000\000\128\000\000 \000\b\000\000\001\002\000\000\012\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\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\128\000\"`\000\000\002\0000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \012\130\016\000 \001'h\000\006\128\004\001\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\003\000\000\"\000\000\000\000\016\000\000\000 \000\132\003 \132\000\b\000p\t\000\001\001\000A\000\000\000\b\128\000\000\000\004\000\000\000\b\b\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\006A\b\000\016\000\019\000\003@\002\000\130\000\000\000\017\000\000\000\000\b\000\000\000\016\016\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\128D\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000 \000\000\000\000\006\001\018\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\003\000\137\000\000\000\000\016\000\000@\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\b\000\b\001\003\024 \000\024\000\000\004\016\000\000\006\136 \000\016\0028\000\000\000\002\000\000\000\004\000\000\000\000\000@\001@\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\128\000`$>\000`\000| \000\000\004\b\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\000B\000\0010!\027\001\015 \002\000\135\000\000\006\001C\012\006\000\007\000\000\000@\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\128D\128\000 \128\b\004\016\000@\000\000\000\000\012\002$\000\001\004\000@ \000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\017\000\000\002\000\b\000\000\000\016\016\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\029D$\000@\003\128N\000\r\000(\002\b\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000\000\000\000`\017 \000\b \002\001\000\000\000\000\017\000\000\002\000K\000\000\000\016\016\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\0000\b\144\000\004\016\001\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \002\000\028\002w\128\000h\000@\016@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\b\000\000\000\000\001\128D\128\000 \128\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\000\000\000\000\000\"@\000\016@\004\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000@\128\000\003\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\019\000\000\b\016\001\128\000\000\000@\000@@\000\000\000\000 \128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\001\000 c\026\000\003\000\000\000\130\000\000\000\004\000\002\000G\000\000\000\000@\000\000\000\128\000\000\000\000\024\004H\000\002\b\000\128A\000\004\000\000\000\000\000\"@\000\016@\004\002\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000 @\000\001\128v\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\001\000\000\000\000\000\000\000\000 \004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\004\000\000\001\000\000@\000\007\000\b\016\000\000`\029\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\128\000\"`\000\000\002\0000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \012\130\016\000 \001'h\000\006\128\004\001\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\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\003\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\001\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\b\000\000\000\000\000! \002\000\028\002w\128\000h\000@\016@\000\000\000\000\000\000\000\000 \000\000\b\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000 \000\000\b\000\002\000\000:\136H\000\128\007\000\157\000\026\000P\004\016\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\016\144\001\000\014\001;\0004\000 \b \000\000\000\000\000\000\000\000\016\000\000\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000\000\000\128\000\000\001\001\000\000 @\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\000\000\016\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\001\000 c\026\000\003\000\000\000\130\b\000\006G\014\006G\007\000\016@@\129\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\016\000\012&\135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\t\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\t\128\000\000\000\000\000\000\000\b\000\000\000(x\012'Dg~\128@@0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\003\129\145\128\004\016\016 d,P\000\019\002\0301@\016\000 \bp\128\000`$>\000`\000| \000\000\004\b\028\000\003i\007\003#\131\000( @X\000&\004\000`\000| \000\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\128\144\003\001\128\001\128\000\000\016 `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024\005\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\132>\000`\000| \000\000\029\b\024\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000@\000 \000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002`C7\002\030@\004\001\014\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\0040\000\128\142\142\028\004\000\000\000\000\000@\001@\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\128\000`$>\000`\000| \000\000\004\b\028\000\003m\007\003'\131\000((X\000&\004\016\000\000\002\004\014\000\001\003\129\147\128\020\020tp,P\000\019\002\0301@\016\000 \bp\128\000a>\000`\128|`\001\001\029\028<\000\003m\007\003'\131\000((X\000&\004\016\000\000\002\004\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\r\143\028\012\158\015\132\001\135!b\128\000\152\016\141\000\135\144\001\000C\128\000\131\r\006\003\004\003\000I\ba@\000\000\000\000\004\000\020\000\000\000\000\000\000\000B\000\0010!\027\001\015 \002\000\135\b\000\006\002C\012\006\000\007\000\000\000@\129\128\b6?\000p2x>\016\006\146\142\134\028\133\138\000\002`C7\002\030@\004\001\014\000\002\0126\135\024\012\016\015\132\001$#\135!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\000\006\003\000\003\000\000\000 @\004\027m\031\1288\025<\031\b\003IGC\014B\000\0010!\027\001\015 \002\000\135\000\001\006\027C\012\006\b\007\000\146\017\128\b6?\000p2x>\016\006\146\142\134\028\133\138\000\002`C7\002\030@\004\001\014\000\002\0126\135\024\012\016\015\132\001$#\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\0126\135\024\012\016\015\140\000 #\135\003\000\004\b\000\0000\014\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\bX\000&\004\000`\128| \t!\029\0128\000\131\000!\006\003\000\003\000\001\000 @X\000&\0040\000\130\142\142\028\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\132>\000`\000| \000\000\020\b\024\000\000\000\000\000\000\000\000\128\000\000@\000\b\000\000\000\000\000\000\000\000\000\004\000\000\002\000\000\000\000B\000\0010!\027\001\015 \002\000\135\b\000\006\027C\012\006\b\007\000\016\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\016\144\001\000\014\001;\0004\000 \b \000\000\000\000\000\000\000\000\016\000\000\b\000\001\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\002\000\000@\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\134\003\001\130\001\128\004\004tp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\0010!\027\001\015 \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\004\000\003m\007\003'\131\000\n(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\003\129\147\128\005\020tp$\016\000\016\002\0061@\0000\000\000\b \128\000m~\000d|`\001E\029\0288\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\000&\004\000`\000| \000\000\004\b\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\000B\000\0010!\027\001\015 \002\000\135\000\000\006\001C\012\006\000\007\000\000\000@\129\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\128\011\128\000\000\000\000\000\000\bX\000?\132{~\159)\000A\018\002\000\000\000\000\000@\017 \000\b \002\000\000\000\000\000\000\000\000\002\000\001\000\000\000\000\000\016\000@\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\017\000C\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\r\143\028\012\158\015\140\000(\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000h\001\002\138:8r\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\031\000`0@>0\000\128\142\142\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024m\015\1280\024 \031\b\002HGC\014\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\002\022(\b\t\129\015\024ߠ\by\000\016\0048\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\003m\007\003'\131\000\b(\000\024E\015\1280\024\000\031\b\000\000\001\002\006\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\138\031\000`0\000>\016\000\000\002\004\014\000\001Q\003\129\145\128\000\016T `\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\132\000\003\000\006\003\000\003\000\000\000@\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\012\130\017\0004\t'h\000\006\128\004\001\004\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\000\000\001\000\000\000 \000\144\000\000\005\001\001\004\000\t\000\000\000\000\001\000\002\000\000\004\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\t\000\000\000P\016\016@\000\144\000\000\000\000\016\000 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000 \000\144\000\000\005\001\001\004\000\t\000\000\000\000\001\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002\000\t\000\000\000P\016\016@\000\144\000\000\000\000\016\000 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000\018\000\000\000 \128\001 \000\000\000\000 \000@\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\b\000$\000\000\001@@A\000\002@\000\000\000\000@\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\128\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000@ \004\000\000\004\000\000\000\000\000\000\000\000\001\000\000\000 \000\000\000\000\000\000\000\000\000\"\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\n\031\000`0\000>\016\000\000\n\004\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\004\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000 \000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\bX\000'Dc~\128!\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\004\000\000\001\011\020\000\004\151o\004=\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\000\000\000@\000\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\002tK7\002\030\004\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000 \000\000\000\000\025\004\"\000`\003\128N\000\r\000\b\002\b\000H\000\000\000\000\b\000\016\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\"_1@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\002\000\000\000\000\000@\017 \000\b \002\000\000\000\000\000\016\000\000\002\000\t\000\000\000\016\016\000\002\000\128\000\000\000\000\024\004H\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\004L\000\000 @\006\000\000\128\001\000\001\031\001\000\000\000\000\0000\001p\000\000\000\000\000\000\007\000\000\001\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\016@\000L\bx\000C\000\128!\000\001\128\016\003\001\128\001\128\000\000P d,P\000\019\002\0301@\016\000 \bp\000\000`\132>\000`\000| \000\000\004\b\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\012\000@\000\000\000P\000\000\000\004\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048@\0000\018\031\000`0\000>\016\000\000\002\004\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\004\000\025\004 \000@\003\128N\000\r\000\b\002\b\004\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\002\022(\000\t/\152ߠ\b{\000\016\0048\001\144B \006\1298\004\000\000\000\128 \128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019_1@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\002\000\000\000\133\138\000\002tK7\002\030\004\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000 \000\b\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000B\000\001:%\027\001\015`\002\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\151o\004=\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\002\128\000\000\000\000\000\000\bX\000&\004S\000\130%\004\000\000\000\000\000\128\"@\000\016@\004\000\000\000\000\000\000\000\000\004\000\002\000\000\000\000\000 \000\129\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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,P\000\019\002\0301@\016\000 \bp\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\0010!\027\001\015 \"\000\135\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000 \000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\024\001\015\1280\024\000\031\024\000\000\005\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\012\000@\000\000\000P\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\b\000\b\001\003X \000\024\001\000\004\016\000\144@\000@\b\024ƹ\000\000\000\000 \128\000\0000\001\000\000\016\001\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\0000\001\000\000\000\001@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\0000\031\000`0@>0\000\128\142\142\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\138\000\130`C7\002\030@D\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\005\000\000\000\000@\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\001\128\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\000\129\000\000\006\001\000\000\016\000 @\128\003\b\004\136\000\0020\014\000\000\000\005\000\000\004\000\000\t\128\000\001\000\004\128\000\000\b\n\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\bP\000\000`\029\000\000\000\002\000\n\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\128\002@\000\000\004\005\004\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\001\001A\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\b\0000\000\000 \000@\128\001\000\000\002`\000\000@\001 \000\000\002\002\130\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\001\001A\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000@\001 \000\000\002\002\130\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\004\000\018\000\000\000 ( \132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\001\000\002\000\000\004\000\000\016\000 \000\000L\000\000\b\000$\000\000\000@PA\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\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\016\000\000&\000\000\004\000\018\000\000\000 ( \132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\b\000$\000\000\000@PA\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\128\002@\000\000\004\005\004\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003 \004\b\000\0000\014P\000\000\128\000\002\004\004\000\000\t\128\000\001\000\004\128\000\000\b*\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000@\001 \000\000\002\002\130\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\002D\000\001\024\007h\000\000\000\002\128\000\002\000\000\004\000\000\128\002@\000\000\004\005\004\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004(\000\0000\014\000\000\000\001\000\005\004\000\000\t\128\000\001\000\004\128\000\000\b\n\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000@\001 \000\000\002\002\130\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000\000\004\000\024\000\000\016\000 @\000\128\000\0010\000\000 \000\144\000\000\001\001A\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\b\000$\000\000\000@PA\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000 \000\144\000\000\001\001A\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\b\000$\000\000\000@PA\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\000\000\000\128\001\000\000\002\000\000\b\000\016\000\000&\000\000\004\000\018\000\000\000 ( \132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\t\128\000\001\000\004\128\000\000\b\n\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\016\000\000&\000\000\004\000\018\000\000\000 ( \132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\t\128\000\001\000\004\128\000\000\b\n\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002`\000\000@\001 \000\000\002\002\130\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\152\000\000\000\000@\000\000\000\128\002\018\000\000\004\000\000\000\002\000\000\000\004\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\000\000 \000\000\000@P\001\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000\000\000\128\000\000\001\001@\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000L\000\000\000\000 \000\000\001@P\000\b\002@\000\002\000\000@\001\000\001\000\018\004\b\b\000\000\019\000\000\002\000\t\000\000\000\016\020\016B\000\144\000\000\000\000\016\000h\000\000@\000\129\002\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\128\000\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\002\000\004\000\000\b\000\000 @@\000\000\152\000\000\016\000H\000\000\000\128\130\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\128\000\0010\000\000\000\000\128\000\000\001\001@\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\000 \000\000\000\000@\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\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\016\000\000&\000\000\000\000\016\000\000\000 (\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\002@\000\002\000\000@\001\128\000\001\000\002\004\b\000\018\000\000\000\000\002\000\012\000\000\b\000\016 @\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\000!\006\003\000\003\000\000\000@X\000&\004\016\000\000\006\132\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\002\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\"@\000\000\000\004\000\000\024\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000@\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\019\014O\015~'\024\150Q\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\r\143\028\012\158\015\140\000(\135\000\016m~\000d| \te\029\0128\000\001`\"\000\001\128#\129\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\b\128\000`\b@@\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000@\000\000\000P\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\012\000@\000\000\000P\000\000\000\004\000\000\002\000\000`\002\000\000\000\002\128\000\000\000 \000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000m~\000d|`\001\005\029\0289\011\020\000\004\135\140o\004<\128\b\002\028\000\000\000\004\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000\004\027m\031\1288\025<\031\b\002IGC\014\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\004\000\129\140k\144\000\012\000\000\002\b \000\027M\031\1288\025\028\031\b\000A\001\002\007C\000a:%;\005\015\002\001\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\016@\132\000\016\003\b\b\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\001\128\002\004\000\000\024\007h\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\020\000\004\135\140o\004<\128\b\002\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b|\001\128\000@\002\000\b\0160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144B\000\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\020 \004\151\020?\136\b\006\028\000\000\000\000\001\000\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000 \000\000\000\000\000\000\000\018\b\000\b\001\003\024 \000\024\000\000\004\016\000\0006\130?\000p28>\016\000\130\002\004\r \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\t\000\000\b\000\001\000\006\000\000\004\000\b\016 \000H\000\000\000\000\b\0000\000\000 \000@\129\000\002@\000\000\000\000@\001\128\000\001\000\002\004\000\000\018\000\000\000\000\002\000\004\000\000\b\000\000 \000\000\000\000\128\000\000\000\000@\000\000\000\128\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\001 \000\000\000\000 \000\000\000\128\001\002\000\000\t\000\000\000\000\001\000\002\000\000\004\000\000\016\000\000\000\000@\000\000\000\000 \000\000\000@@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\b\000\000\000\016\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\002\000\000\000\004\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\b\b\000 \000H\000\000\000\000\b\0000\000\000 \000@\128\000\002@\000\000\000\000@\000\128\000\001\000\000\004\000\000\000\000\016\000\000\000\000\b\000\000\000\016\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\004\128\000\000\000\000\128\003\000\000\002\000\004\b\000\000$\000\000\000\000\004\000\b\000\000\016\000\000@\000\000\000\001\000\000\000\000\000\128\000\000\001\001\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000 \000\000\000@@\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\128\000\000\000\000@\000\000\000\128\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\004 \129\140k\144\000\012\000\000\002\b\000H \000 \004\012c\\\128\000`\000\000\016@\128\000\024\000\128\000\000\000\000\000\000\b\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H \000!\004\012c\\\128\000`\000\000\016@\002A\000\001\000 c\026\000\003\000\000\000\130\000\000\000\004\000\000\000\005\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000H @\000\000\012\000\000\128\000 @\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\001\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,\\\016\031^=O\148\000 s\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\bX\000&\004\016\000\000\002\004\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @!\016\003\000\156\002v\128\000h\000@\016@\002A\000\001\000 c\026\000\003\000\000\000\130\000\000\006G\014\006G\007\000\016@@\129\128\128\000\000\000\000\016\004H\000\002\b\000\128\000\001\000\000\000\000\128\004\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\016\000\000\000\000\000\000\000\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000\000\027A\031\1288\025\028\031\b\000Q\001\002\006B\000\0010!\027\001\015 \002\000\135\000\000\006\016C\012\006\000\007\000\016\000@\129\128\000\000\000\002\000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\004>\000`\000| \001\000\004\012\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\b@\000\128\007\000\157\000\026\000\016\004\016\000\000\000\000\000\000\000\000\000\000\128\000\000\000\002\000\133\138\000\002`C7\002\030@\004\001\014\000\002\012\000\135\024\012\000\015\132\000\004\000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\004!\006\003\000\003\000\000\000 @H \000 \004\012c\\\128\000`\000\000\016@\000\000\b\001@\002\b\b\0160\000\000\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\128\000\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\002\022(\000\t\129\015\024ߠ\by\000\016\0048\000\0000\130\031\000`0\000>\016\000\128\002\004\012\012\000\016 \000\000;@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\b\000\000\002\000\000\128\000\014\018 \001'x\000\006\128\020\001\004\000\000\000\000\000\000\000\000\002\000\000\000\128\000 \000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\000\003\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\003\000\137\000\000A\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\132\128\b\000p\t\000\001\001\000A\000\000\000\000\000\000\000\000\000\128\000\000 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\128\000\000 \000\b\000\000! \002\000\028\002w\128\000h\001@\016@\000\000\000\000\000\000\000\000 \000\000\b\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B@\004\0008\004\000\000\000\128 \128\000\000\000\000\000\000\000\000@\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\016\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\004\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\b\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\002\000\000\000\004\004\000\000\129\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\128\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004,P\000\019\002\0301@\016\000 \bp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\004\000\129\140k\144\000\012\000\000\002\b\000\000\027A\031\1288\025\028\031\b\000A\001\002\006\022(\000\t\129\015\024ߠ\by\000\016\0048\000\0000\130\031\000`0\000>\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\000!\006\003\000\003\000\000\000(@X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @X\000&\004\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\144\001\000C\129\011\020\000\004\135\140o\004<\128\b\002\028\000\000\024A\015\1280\024\000\031\b\000@\001\002\006\000\000\b|\001\128\000@\002\000\b\0162\022(\000\t\129\015\024ߠ\by\000\016\0048\000\0000\130\031\000`0\000>\016\000\128\002\004\012\133\138\000\002`C7\002\030@\004\001\014\000\000\012 \135\024\012\000\015\132\000 \000\129\003!b\128\000\152\016\141\000\135\144\001\000C\128\000\003\b!\006\003\000\003\000\b\000 @X\000&\004\000`\000| \000\000\004\b\024\000\003h#\007\003#\131\000( @X\000&\004u?:\000\000\03189d\138\031\132\031A\000\000\031:\152BJ\000\000C0\000\000Cp\000\000\000\000\000\000;\000\000Cp\000\000<(\000\000Cp\000\000Cj8\014\000\000\000\0009\150\000\000L\138\155\130\000\000v\004\031\000\000&\152T\031Cp\000\000I:&:p\031\000\000I\nED(\144\014::j\000\000\014p\130\000\0258ED(\144q6:@z9\000\0008,\000\000l\144<^\000\000;\":L\0258ql\144\000\000\000\000\000\000\000\000Cp\000\000\000\000\000\0009n\014Cp8\bl\000\000v\000\0008\024@\142\000\000<\000\000\000\000\000\000\001;\138:*\000\000^R\"CpJ\028Cp@B\000\000\000\000\000\000\000\000\000\000\000\000>\031\031\000\000\000\000\000\000=G<\000\000\000\000,\031\000\000\031\016\000\000\031\000\000n?\146Cp\000\000\000\000\000\000\000\000??\014R\"\000\000@V<&R\"\000\000@>\138R\"\000\0008A\000\000?@\000\000:\138:*:*\000\000\000\000An\000\000\000\000I<8B\000\000E$\000\000:\138E\146\000\000ICp?`\000\000EIFD\000\000I\000\000\000\000\000\000\000\0007E\000\000\000\000\000\000\000\00078Cp?E\000\000\000\000\000\000\000\000\031\000\000G6\000\000?\14678I\000\000\000\000?\146\000\00078?\146\000\000GH\000\000F\031\000\000\000\000H\002\000\000\000\000\000\000\000;\150\nH\"\000\000:H\1569\000\000HI\000\000\000H\031\000\000\000\000B\028H\156\000\000\000\000IVI\150\154\000\000\000\000G\158\000\000\000\000I=\002@\154Cp@\154\000\000\000\000J\138\000\000\n\000\000J\000\000IK\024\000\000K&\000\000I<8K \000\000K\148\000\000I<8L\026\000\000L\128\000\000:\138L\134\000\000\000\000\000\000\000\000P\000\000\000\000\000\000L`J@\000\000\000\000\150P\000\000P\000\000,MNH\002\000\000B\000\000\000\000\000\000>X9M,M\028PG@\000\000M7\0258z\000\000\000\000\000\000\000\000H\002O.m\000\000 30t\0068 z\000\000\000\000\000\000\000\000P\n\017n\000\000;\000\000\000\000\000\000\000\000\000\000@\000\000Cf@\000\000Nt\000\000N8\031\000\000@\031\000\000;J\000\000\000\000=\158\000\000\000\000P\000\000J\000\000\000\000\000\0009P\000\000\000\000O^Gj\000\000A*V:n\000\000\000\000?O\1429NP\000\000\000\000:\154O\142\000\000\000\000O\030K(\000\000\000\000\000\000;\000\000\000\000\000QP(G\134\000\000A*<\024\000\000\000\0009P;\000\000\0008\000\000O~K\144\000\000BX\000\000\000\0009<\130;\000\000\000\000\000\000>\nQ\nH\002H\002\000\000\000\000\000\000\000\000O\004K\000\000\000\000\0028,\000\000\000\000\000\000\000\000\000\000\130\130\003\020\000\000e\142\n\000\000:\134\000\000Ӡ\000\000\000\000\000\000\000\000\000\000\000\000\000\000Pf\000\000\000\000=|\n\000\000\004\000\000\n>j?\000\000O\000\000\0208\000\000\000\0009\158\n\n9\000\0008I\000\000\000\000ZPO@@CpZCp\000\000\000\000\000\000\000\000C.R\150\000\000\000\000!\000\000\000\000\000\000\000\000\150P\146\000\000\"\130\000\000v@\000\000\000\000\000\000\000\000R\012\000\000\130Q\000\000>\000\000\000\0008L\b\000\000\000\000\000\000\000\000\000\000Q@K\146\000\000A<\000\000\000\000t\150\000\000Ap\000\000\000\000\000\0009\018:\134\000\000D\000\000\000\000\000\004?\000\000Q\000\000RR@8R\n=\000\000\000\000S*S\000@r\000\000H\0028.p\130\030\024Mj?:S\000\000K\031T\002\000\000=SR\000\000\000\000\000\000\000\000\145\012\031\000\000Ѧ\145\012\000\000;\150T\004\000\000.\145\012\000\000\145\012\000\000\145\012\000\000C\145\012\000\000\145\012\000\000T\028\145\012\000\000T\026\145\012\000\000\145\012\000\000\145\012\000\000>\145\012\000\000\145\012\000\000T \145\012\000\000T \145\012\000\000\145\012\000\000\145\012\000\000\000\000\145\012\000\000.\145\012\000\000\000\145\012\000\000\145\012\000\000\145\012\000\000E\145\012\000\000\145\012\000\000T(\145\012\000\000T(\145\012\000\000\145\012\000\000\145\012\000\000Q\145\012\000\000\145\012\000\000T0\145\012\000\000T0\145\012\000\000\145\012\000\000\145\012\000\000<\031S\031\000\000G*\000\000MN8\014NK<J8\014L\138x\031T,P\000\000\136\000\000N\156wBwBL\138\000\000\000\000?$DN\156\000\000\000\000\000\000\000\000TnXmS4\031T\000\000m\014P\000\000\000\000\000\000\000\000\000\000S4\000\000TS4\000\000TS4\000\000S4\000\000S4\000\000X\142V\002\000\000T\020X\142V\000\000\000\000[,X\142[,T$X\142[,\000\000\000\000\000\000\000\000C6H\0028A*>\000\000U\000TC?\n\000\000CPAB6\0258\146\n\0258\146\0258\147\0258\148n\0258\149:lD\0258\150\006\150\0258\151\158\0258\152j\0258\1536\0258\154\002P\000\000P?\\P\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\007\0258x\000\000@;@TBF\132\0258,\000\000\000\000R\"=\132=\132\000\000T\\\031Tv\0258\bTh\031T|\0258\tT\138\0258\n\000\000;\148\031T\150\0258\011A~\0258\012\000\000ED(z\0258\028\000\000\000\000G\0258\154\000\000\000\00030\000\000\000\000\000\000\000\000<\028B\158\0258̲\000\000@\028\000\000\000\000B\014\000\000C\n;\150\000\000\000\000D(8 z\154\0258\000\000Cf@D30~T\154\0258\155\000\000\000\000\000\000T@L\12830\000\000\000\00030zx82T~\031TMM\000\000\000\000\000\000YfS4?;U,\000\000Z\b?\000\000U:Z?\000\000UJ[?\000\000\\\156?\000\000]x?\000\000\000\000\000\000\000\000@@L\000\000U\006@L\000\000\000\000{>\000\000U\154@8\136?zCM>D0@U\000\000CtF\144\000\000x\014M\000\000\000\000UDO\000\000\000\000YZ\031U\000\000\000\000\000\000\000\000\000\000F\144\000\000UhF\144\000\000L&\152>::*UUP\0319P\000\000\000\000B\000BUU|\031A\020\000\000U=\13030U30\022\000\000\000\000z(z(\017n@<\154@VLBJH30~\000\000\000\000p=\132U\031U30'\144U\031U30(\136U30)\128\000\000<\130\031U30*xD30+p\000\000z;py\\z(\017n\1594\000\000\000\000\000\000V2@VnUz(E\000\000\000\000\000\000z(\000\000I6V@\000\000\000\000\031\000\000\000\000\000\000Q;\138\000\000@\000\000zHy\\z(I6\000\000\031\000\000\000\000:\152FbVJUuN\000\000F\136=\132U\031F\132\000\000\000\000F\132\000\000\000\000\000\000\018b\019\\L\150\000\000:\152\000\000\000\000\000\000U@>\020V\000\000\018b\000\000\000\000V\150\017n=\154@=\154U@=\154\000\000\000\000\000\000>\136@\000\000Q@\000\000\000\000\000\000\021PN4\000\000\000\000<\000\000\000\000M~\000\000FR\000\000\000\000V\016M~\000\000?\000\000\000\000M~G8\000\000\000\000\017nN>\000\000\000\000\000@\016H\0258\148\000\000\000\00030\000\000\000\000\000\000\000\000y\\&\152&\152_$\000\000\000\000\000\000Vp@VV\"&\152F\000\000\000\000\000\000&\152\000\000D\148Vv\000\000\000\000\031V.\031\000\000\000\000\000\000\000\000KH>:\000\000\000@y\\&\152D\148\000\000\031\000\000\000\000:\152J~V\132V\016R\"\000\000I r=\132V*\031JH\000\000JH\000\000\000\000\000\000,h-`KH\000\000:\152\000\000\000\000\000\000V\006@B|.X\000\000,h\000\000\000\000V&\152\000\000\000\000/PV\000\000z(\000\000\000\000\000\000Ct\000\000{z@L\000\000V\020@L\000\000\000\000{z\000\000\0258\000\000z\004\0258x\025830\028\0258r\0258\0258l\0258\0258f\0258\0258`\0258\0258Z\0258\0258T\0258\0258N\0258\0258Hp\130\0258B\0258Ǿ\0258<\0258ȸ\02586\000\000\0258\000\000\000\000@D(\000\000\000\000\000\000\144\0258\000\156\134\0258ɲI\0258l\157^\0258030\1586\0258ʬ\159\014\0258*CI\000\000B\158<\028\000\000\150=\n\000\000Kx\000\000;\150\000\000\000\000\000\000A\\N29G,K\018\031>\000\000\031\000\000V7Z\031o6A@\031r\000\000qRN2\000\000V^;\150r\006\000\000;\150\000\000\000\000\000\000Nh\000\000\000\000W(nX\142YfB<\000\000V\132YfP\000\000\000\000lYflV\134Yfl\000\000\000\000\000\000\000\0009\020\000\000OTDJ>rH\0029\028\000\000\000\000@\000\000<\028H\13882V\148\031VM\000\000Yf\000\000E@L{>\000\000{z\000\000˦I\014I\000\000WrI|F\000\000\000\000\0258\000\000\000\000|X@|XV\152@|X\000\000\000\000\000\000f\156@\000\000\000\000K@\000\000\000\000\000\000D(\000\000WX\000\000N\000\000A*E\150\000\000W`\000\000N\156\031\000\000\000\000W^\000\000Wl\000\000A*J82V\031VM\000\000X\142\000\000@LWJ@\158VM~\000\000^\156@L\000\000V@L\000\000\000\000^\156\000\000\000\000IR6\000\000\000\000\000\000NJ\148\000\000D\000\000O\138A*>6\000\000\000\000WO\138_WO\138\000\000VWO\138\000\000\000\000_\000\000\000\000H\030\024>WnXm\000\000E:H\002A\000\000\000\000\000\000\000\000\000G \0258\000\000\000\000\000\0009\000\000VlD\000\000\000\000\000\000W\000\000D\000\000\000\00030l\000\000\000\000\000\000W\000\000;\150;\150T\000\000X\024\000\000Df\000\000X\"\000\000N\000\000\000\000\0258E2\000\000\000\000lX \000\000;\"8\024Mt\000\000\000\000L\000\000Pt\000\000\000\000X$\000\000;\150F`82W|\031W>\134>\134\000\000\000\000\000\000W\000\000F@LX\0069OF\144\000\000\000\000\000\000W@L\000\000W\138@L\000\000\000\000W\000\000X @\158WF\144\000\000Y&@L\000\000W\154@L\000\000\000\000Y&\000\000\000\000=:p\130\000\000\000\000\000\000P\140J\017nH,\000\000P;\150Fx\000\000\000\000X\138P]\150X\144P\000\000WX\158P\000\000\000\000]\150\000\000\000\000O\030\024M\000\000XxnX^\144\000\0009\020\017nL^ECpR;\150G\022\000\000\000\000\134\000\000W\000\000H@LW\000\000Y&\000\000Q\140O\017nPL\000\000XP]\150\000\000\000\000\000\000\000\000\000\000P*\000\000N|\000\000X\000\000C$FN\000\000X\000\000O|\000\000\000\000\0258M\000\000\000\000lX\000\000;\"8\024P\000\000\000\000L\000\000Q|\000\000\000\000\000\000װTp\0258\159\138J>\0258\028UL\0258V30\\V(\0258\"W\004\0258\000\000\136\000\000W30O6\0258X30\13430\152Y\14030RW\00230\030\000\000\000\000\000\000\000\000\000\000X\000\000Pj(\000\000\000\000\031XJ\0258`\000\000\000\000\130\031XL30N30l\000c\004\022XHT\031\000\000K30\026\000\000\000\000@DXj30\000\000\000\000\000\000\000\000DdGX\000\00030~30\\zc|X\000\000Y\000HT;p\0258J\000\000\000\000\000\000\022\000\000O\000\000\000\000\000\000N\000\000\000\000H\002Zh\000\000\000\000\000\000\000\000[D\\ \000\000\02588\000\000\000\000PP\0258ڤ\000\000\000\00030\006\000\000\000\000\000\000\022JB\130B@CD\030L(\000\000Y\002\000\000Q\152\000\000\000\000\0258Q \000\000\000\000lY\b\000\000;\"8\024Qn\000\000\000\000M\012\000\000Q\148\000\000\000\000\000\000\000\000\\\000\000X\000\000]\0258x\000\000Qr\000\000\000\000DY \000\000P30\000\000dXfX\152\0258\026\0258`\000\000\000\000\023D_ZFD8<\000\000\145\012D8\000\000Y&\149\bD8\000\000Y*\149D8\000\000\150D8\000\000\151lD8\000\000\000\000\000\000\000\00030K08P\0258N\000\000\000\000M|8\000\000Y*\000\000X\1408\000\000NNY6\0258\000\000\000\000Y\0249\020\017nJ:\0258\000\000YZIYB\0258\000\000L\150_Z\000\000\024>\0258\000\000lD\000\000O\0262\0258\000\0001@\000\000\000\000ECM\130;\150I\138\000\000\000\000\000\000Q\000\000\000\000Q\000\000\000\000R\018\000\000\000\000R\024\000\000\000\000L\150\027,G\028&\029 YFY\0243030\152\000\000Rz\000\000\000\000YP\000\000YY\030\000\000\000\000\0258\016\000\000\000\000J@DX30Yj30\000\000\000\000YL9\020\017nQ30\000\000Y\146IYv30\000\000QB2830\000\000j\000\000Q4(30\000\0005 \000\000\000\000\000\000\000\000J\000\000\000\000Pd\0258|\000\000\000\00030\000\000\000\000\000\000\0006\024J2C.CEL\000\000Y\130\000\000R~\000\000\000\000\0258Q\000\000\000\000lY\132\000\000;\"8\024R6\000\000\000\000N\130\000\000R\000\000\000\000\000\000\000\000\000\000\000\000Y\144\000\000\000\000R8\000\000\000\000Һ\000\0008\024R\000\000\000\000ZRY\000\000J\000\000Q\000\000Y\152\000\000LT\000\000\014X\"\000\000Yt\000\000\000\000R\152\000\000\000\000SJ\000\000RF\000\000Y\000\000\016\000\000S\006\000\000\000\000Yz\000\000R\000\000lY\000\000Y\134\000\000ZY\000\000J\000\000R\000\000Y\000\000Y\000\000=\002Y\000\000IlC\\\000\000Y\000\000\000\000\000\000\000\000\155\130\000\000\000>\000\000\000\000\000\000Ml\000\000\000\000Y\000\000Y\000\000\000\000\000\000_\146\000\000\000\000Y\000\000Y\000\000\000\000\000\000v\004\000\000\000\000>\000\000|\000\000\000\000\000\000R\146\000\000\000\000Z\004\000\000Z\004\000\000\000\000\000\000`2\000\000\000\000Z\n\000\000Z\012\000\000\000\000\000\000x?$\000\000D\000\000x\000\000\000\000\000\000\000\000\000\000x\000\000h\144\144J\141Z\024Z\024:*:\138Z\028\000\000XZ(Z*x\000\000:*:\138Z8\000\000\000\000x\000\000\000\000Z,nX\142\000\000Z>\000\0007\000\000N\146\000\000ZH\000\000ZNZ\"3030\006\000\000n\000\000O\024\000\000Q\150\000\000\000\000O\006\000\000A*M\156\000\000Zj\000\000A\000\000TZ\000\000Zp\000\000R\000\000\000\000:Z:\000\000^Lh\000\000h\000\000\000\000\000\000\000\000UrJ\000\000R\000\000S\016\000\000\000\000[.[\146Z\000\000J\000\000S\000\000\000e430K0Z\128\000\000S(\000\000\000\000ST\000\000\000\000SV\000\000\000\000T\n\000\000\000\000\000e\000\000Rt\000\000\000\000\000\000Z\138\000\000zD(\000\000\000\000Y\000\000\000\000p\130Z\000\000\000\000\000\031\000\000Z\002\000\00030\000\000\000\000@G\134\000\000\000\000M8 \000\144\030\024MZ\128nX\144@_Z;\000\000Y_ZA\000\000\000\000B\156_ZB\156Y_ZB\156\000\000\000\000\000\000\000\000\144\\\nZ\000\000J\000\000S\016\000\000\144VPJ\000\000S\"\000\000Cpd\000\000\000\000\000\000\000\000\000\000Dd\000\000I>rCpP\002\000\000>\136ZZ\14430l30\000\000\0007\01630\000\026CL\n8 \000|30tD\000\0006\000\000Z\146@R3030|\00082Z&\031ZL>\134\000\000@rCpP\000\000CQ82ZV\031Z\128>\134\000\000H@\138\000\000tS:I\000\000[\t9\028\t9\t9\t9\t9\t9\t9\t9\007\134\t9\t9\t9\t9\rz\007\138\r~\006M\t9\t9\t9\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\003\006\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\t9\t9\000\026\t9\t9\003\t9\000\"\t9\000V\000&\t9\t9\t9\000\130\t9.^\t9\t9\t9\t9\t9\t9\t\t9\t9\t9\t9\t9\t9\027\027\000.\t9\t9\000\001\002\r\t9\t)\t9\t9\t9\0002\t9\t9.n\t9\001\006\001\n\001\014.r.v\t9\t9\000\138\000\t9\t9\020\003\n\003\026\t9\003N\023\146\003R\003\003\007v\t9\007z\028\142\028\150\t9\t9\t9\t9\t9\t9\t9\007\t9\t9\t9\t9\007\012\007~\007\130\t9.z\rn\t9\t9\t9\t9\t9\t9\t9.\t9\t9\t9\025>\t9\028\t9\t9\t9\t9\t9\t9\t9\007\134\t9\t9\t9\t9\rz\007\138\r~\006M\t9\t9\t9\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\t~\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\n\002\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\r\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\021\022\006\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\022\014\004M\004M\004M\004M\022\030\0226\022>\022&\022F\004M\004M\004M\004M\004M\004M\004M\004M\004M\022N\022V\004M\004M\004M\004M\004M\004M\004M\022^\022v\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\021\022.\022f\022n\022~\004M\004M\004M\004M\022\134\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\022\022\004M\022\004M\004M\004M\004M\022\150\004M\004M\004M\004M\004M\004M\022\158\022\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\022\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022\006\005\005\005\005\005\005\005\005\005\005\022\014\005\005\005\005\022\030\0226\022>\022&\022F\005\005\005\005\005\005\005\005\005\022N\022V\005\005\005\005\005\005\005\022^\022v\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022.\022f\022n\022~\005\005\005\005\022\134\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022\005\005\005\005\005\005\022\150\005\005\005\005\005\005\022\158\022\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\021\022\006\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\022\014\005\157\005\157\005\157\005\157\022\030\0226\022>\022&\022F\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\022N\022V\005\157\005\157\005\157\005\157\005\157\005\157\005\157\022^\022v\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\021\022.\022f\022n\022~\005\157\005\157\005\157\005\157\022\134\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\022\005\157\005\157\005\157\005\157\005\157\005\157\022\150\005\157\005\157\005\157\005\157\005\157\005\157\022\158\022\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\021\022\006\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\022\014\005\149\005\149\005\149\005\149\022\030\0226\022>\022&\022F\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\022N\022V\005\149\005\149\005\149\005\149\005\149\005\149\005\149\022^\022v\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\021\022.\022f\022n\022~\005\149\005\149\005\149\005\149\022\134\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\022\005\149\005\149\005\149\005\149\005\149\005\149\022\150\005\149\005\149\005\149\005\149\005\149\005\149\022\158\022\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022\006\005\005\005\005\005\005\005\005\005\005\022\014\005\005\005\005\022\030\0226\022>\022&\022F\005\005\005\005\005\005\005\005\005\022N\022V\005\005\005\005\005\005\005\022^\022v\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022.\022f\022n\022~\005\005\005\005\022\134\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022\005\005\005\005\005\005\022\150\005\005\005\005\005\005\022\158\022\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022\006\005\005\005\005\005\005\005\005\005\005\022\014\005\005\005\005\022\030\0226\022>\022&\022F\005\005\005\005\005\005\005\005\005\022N\022V\005\005\005\005\005\005\005\022^\022v\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\022.\022f\022n\022~\005\005\005\005\022\134\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022\005\005\005\005\005\005\022\150\005\005\005\005\005\005\022\158\022\t9\t9\t9\t9\t9\025\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t\t9\t9\t9\t9\t9\t9\025\025\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\020\t9\t9\t9\t9\023\146\t9\t9\t9\t9\t9\t9\t9\026\018\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\025>\t9\026N\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\026\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t=\t=\t=\t=\t=\025\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\025\025\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\020\t=\t=\t=\t=\023\146\t=\t=\t=\t=\t=\t=\t=\026\018\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\025>\t=\026N\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\023\146\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\025>\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\t9\t9\t9\t9\t9\003\t9\0006\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t\t9\t9\t9\t9\t9\t9\027\027\t9\t9\t9\t9\t9\r\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\027\000:\027\t9\t9\t9\t9\t9\t9\020\003\n\t9\t9\t9\023\146\t9\t9\027\t9\t9\t9\028\142\028\150\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\018\138\t9\t9\t9\t9\t9\018\142\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\025>\t9\028\t9\t9\t9\t9\t9\t9\028\158\t9\t9\t9\t9\t9\t9\t9\t9\006M\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\029\134\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t=\t=\t=\t=\t=\003\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\027\027\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\020\t=\t=\t=\t=\023\146\t=\t=\t=\t=\t=\t=\028\142\028\150\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\025>\t=\028\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t9\t9\t9\t9\t9\003\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t\t9\t9\t9\t9\t9\t9\027\027\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\020\t9\t9\t9\t9\023\146\t9\t9\t9\t9\t9\t9\028\142\028\150\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\025>\t9\028\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\b=\b=\b=\b=\b=\b=\b=\0006\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\027\000:\b=\b=\b=\b=\b=\b=\b=\b=\003\n\b=\b=\b=\023\146\b=\b=\027\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\018\138\b=\b=\b=\b=\b=\018\142\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\025>\b=\b=\b=\b=\b=\b=\b=\b=\028\158\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i-\142\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\003\006\016\016\016\016\016\016\016\016\016\016\016\016\016\005\017\016\016\016\005\017\016\016\016\016\016\016\016\016\016\016\016\016\016\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9/r\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t=\t=\000\026\t=\t=\t=\t=\000\"\t=\000V\000&\t=\t=\t=\000\130\t=\000*\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\000.\t=\t=\000\001\002\r\t=\t)\t=\t=\t=\0002\t=\t=.n\t=\001\006\001\n\001\014\003\002.v\t=\t=\000\138\000\t=\t=\t=\003\n\003\026\t=\003N\002\003R\003\003\007v\t=\007z\t=\t=\t=\t=\t=\t=\t=\t=\t=\007\t=\t=\t=\t=\007\012\007~\007\130\t=.z\rn\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\004\030\t=\t=\t=\t=\t=\t=\t=\t=\t=\007\134\t=\t=\t=\t=\rz\007\138\r~\t=\t=\t=\t=\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\021\022\006\t9\t9\t9\t9/\146\t9\t9\t9\t9\t9\022\014\t9\t9\t9\t9\022\030\0226\022>\022&\022F\t9\t9\t9\t9\t9\t9\t9\t9\t9\022N\022V\t9\t9\t9\t9\t9\t9\t9\022^\022v\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\021\022.\022f\022n\022~\t9\t9\t9\t9\022\134\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\022\t9\t9\t9\t9\t9\t9\022\150\t9\t9\t9\t9\t9\t9\022\158\022\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i/\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\005\021\016\016\016\005\021\016\016\016\016\016\016\016\016\016\016\016\016\016\b=\b=\000\026\b=\b=\b=\b=\000\"\b=\000V\000&\b=\b=\b=\000\130\b=\000*\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\000.\b=\b=\000\001\002\b=\b=\b=\b=\b=\b=\0002\b=\b=\b=\b=\001\006\001\n\001\014\003\002\b=\b=\b=\000\138\000\b=\b=\b=\003\n\003\026\b=\003N\023\146\003R\003\003\007v\b=\007z\b=\b=\b=\b=\b=\b=\b=\b=\b=\007\b=\b=\b=\b=\007\012\007~\007\130\b=\b=\rn\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\025>\b=\b=\b=\b=\b=\b=\b=\b=\b=\007\134\b=\b=\b=\b=\rz\007\138\r~\b=\b=\b=\b=\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\001\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b}\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\002\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004\030\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\002\002\014\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\002\b=\b=\b=\b=\b=\b=\002\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\002\002\b=\b=\b=\b=\b=\b=\b=\b=\001\026\002\002\b=\002\003\b=\003\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004\030\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\007\158\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\003\"\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\011\014\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\011\018\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\018~\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\018\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\t9\t9\t9\t9\027\146\t9\0006\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\011\014\t9\t9\t9\t9\t9\t9\027\027\t9\t9\t9\t9\t9\r\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\027\000j\027\t9\t9\t9\t9\t9\t9\018f\001\026\t9\t9\t9\002\t9\t9\030n\t9\t9\t9\030~\030\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\018\138\t9\t9\t9\t9\t9\018\142\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\004\030\t9\031\n\t9\t9\t9\t9\t9\t9\030\t9\t9\t9\t9\t9\t9\t9\t9\006M\t9\t9\t9\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\020\005\005\005\005\005\005\005\005\005\005\020\005\005\005\005\021\006\021\030\021&\021\014\021.\005\005\005\005\005\005\005\005\005\0216\021>\005\005\005\005\005\005\005\021F\021^\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\021\022\021N\021V\021f\005\005\005\005\021n\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\150\005\005\005\005\005\005\021~\005\005\005\005\005\005\021\134\021\142\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\020\020\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\020\005\157\005\157\005\157\005\157\021\006\021\030\021&\021\014\021.\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\0216\021>\005\157\005\157\005\157\005\157\005\157\005\157\005\157\021F\021^\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\020\021\022\021N\021V\021f\005\157\005\157\005\157\005\157\021n\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\005\157\021\150\005\157\005\157\005\157\005\157\005\157\005\157\021~\005\157\005\157\005\157\005\157\005\157\005\157\021\134\021\142\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\020\020\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\020\005\149\005\149\005\149\005\149\021\006\021\030\021&\021\014\021.\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\0216\021>\005\149\005\149\005\149\005\149\005\149\005\149\005\149\021F\021^\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\020\021\022\021N\021V\021f\005\149\005\149\005\149\005\149\021n\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\005\149\021\150\005\149\005\149\005\149\005\149\005\149\005\149\021~\005\149\005\149\005\149\005\149\005\149\005\149\021\134\021\142\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\020\005\005\005\005\005\005\005\005\005\005\020\005\005\005\005\021\006\021\030\021&\021\014\021.\005\005\005\005\005\005\005\005\005\0216\021>\005\005\005\005\005\005\005\021F\021^\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\021\022\021N\021V\021f\005\005\005\005\021n\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\150\005\005\005\005\005\005\021~\005\005\005\005\005\005\021\134\021\142\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\020\005\005\005\005\005\005\005\005\005\005\020\005\005\005\005\021\006\021\030\021&\021\014\021.\005\005\005\005\005\005\005\005\005\0216\021>\005\005\005\005\005\005\005\021F\021^\005\005\005\005\005\005\005\005\005\005\005\005\005\005\020\021\022\021N\021V\021f\005\005\005\005\021n\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\150\005\005\005\005\005\005\021~\005\005\005\005\005\005\021\134\021\142\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\031\158\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t=\t=\t=\t=\027\146\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\027\027\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\018f\t=\t=\t=\t=\002\t=\t=\t=\t=\t=\t=\030~\030\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\004\030\t=\031\n\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t9\t9\t9\t9\027\146\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\011\014\t9\t9\t9\t9\t9\t9\027\027\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\018f\t9\t9\t9\t9\002\t9\t9\t9\t9\t9\t9\030~\030\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\004\030\t9\031\n\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\b=\b=\b=\b=\b=\b=\0006\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\027\000j\b=\b=\b=\b=\b=\b=\b=\b=\001\026\b=\b=\b=\002\b=\b=\030n\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\018\138\b=\b=\b=\b=\b=\018\142\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004\030\b=\b=\b=\b=\b=\b=\b=\b=\030\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\020\020\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\020\004M\004M\004M\004M\021\006\021\030\021&\021\014\021.\004M\004M\004M\004M\004M\004M\004M\004M\004M\0216\021>\004M\004M\004M\004M\004M\004M\004M\021F\021^\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\020\021\022\021N\021V\021f\004M\004M\004M\004M\021n\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\004M\r\158\021\150\004M\r\004M\004M\004M\004M\021~\004M\004M\004M\004M\004M\004M\021\134\021\142\b=\000\026\b=\b=\b=\b=\000\"\b=\000V\000&\b=\b=\b=\000\130\b=\000*\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\000.\b=\b=\000\001\002\b=\b=\b=\b=\b=\b=\0002\b=\b=\b=\b=\001\006\001\n\001\014\003\002\b=\b=\b=\000\138\000\b=\b=\b=\003\n\003\026\b=\003N\002\003R\003\003\007v\b=\007z\b=\b=\b=\b=\b=\b=\b=\b=\b=\007\b=\b=\b=\b=\007\012\007~\007\130\b=\b=\rn\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004\030\b=\b=\b=\b=\b=\b=\b=\b=\b=\007\134\b=\b=\b=\b=\rz\007\138\r~\b=\b=\b=\b=\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t90\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t=\000\018\t=\t=\t=\t=\0006\t=\0036\000Z\t=\t=\t=\003V\t=\000^\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\000\t=\t=\000\001\002\r\t=\t)\t=\t=\t=\000\t=\t=.n\t=\001\006\001\n\003\146\007\1540n\t=\t=\000\138\002\t=\t=\t=\001\026\002\t=\007\002\012~\003B\000\022\012\130\t=\003Z\t=\t=\t=\t=\t=\t=\t=\t=\t=\012\t=\t=\t=\t=\r\006\r\022\003^\003b\t=.z\r&\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\t=\004\030\t=\t=\t=\t=\t=\t=\t=\t=\t=\003f\t=\t=\t=\t=\r^\012\134\rb\t=\t=\t=\t=\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\020\020\t9\t9\t9\t90\t9\t9\t9\t9\t9\020\t9\t9\t9\t9\021\006\021\030\021&\021\014\021.\t9\t9\t9\t9\t9\t9\t9\t9\t9\0216\021>\t9\t9\t9\t9\t9\t9\t9\021F\021^\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\020\021\022\021N\021V\021f\t9\t9\t9\t9\021n\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\t9\021\150\t9\t9\t9\t9\t9\t9\021~\t9\t9\t9\t9\t9\t9\021\134\021\142\b=\000\018\b=\b=\b=\b=\0006\b=\0036\000Z\b=\b=\b=\003V\b=\000^\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\000\b=\b=\000\001\002\b=\b=\b=\b=\b=\b=\000\b=\b=\b=\b=\001\006\001\n\003\146\007\154\b=\b=\b=\000\138\002\b=\b=\b=\001\026\002\b=\007\002\012~\003B\000\022\012\130\b=\003Z\b=\b=\b=\b=\b=\b=\b=\b=\b=\012\b=\b=\b=\b=\r\006\r\022\003^\003b\b=\b=\r&\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\b=\004\030\b=\b=\b=\b=\b=\b=\b=\b=\b=\003f\b=\b=\b=\b=\r^\012\134\rb\b=\b=\b=\b=\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i1&\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\002i\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\0167\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\016\012I\012\n\1454\000B\007E\012I\t!\002\n\012I\012I\000r\005\007E\005v\012I\012I\012I\015\025\012I\012I!\012I\012I\t\130\012I\012I\0006\012I\018\154\002N\012I\012I\012I\012I\012I\012I\012I\002^\n\n\145\015\025\012I\003.\015\025\015\025\r\012I\012I\003\138\012I\002n\012I\012I\012I\012I\012I\012I\n\145\012I\002\000\014\012I\012I\012I\003B\000\022\r\000\012I\n\000\134\012I\012I\012I\012I\012I\007r\000\022\n\145+\006\012I+\022+\"+6\014\012I\012I\t!\00064\012I\r\158\n\145\012I\r\012I\012I.\005^\012I\n\"\012I\011)\019&\0192\012I\012I\012I\t%\012I\020^\012I\015\025\003\012I\012I\t!\012I\012\ta\012I\012I\012I\0032\012\011)\n&\012\012\011)\006\005i\t\006\012\012\012\015\029\012\012\t\012\012\012:\012\012\n\012\020\134\005\012\012\012\012\012\012\012\n\003\n\005i\015\029\012\002\015\029\015\029\020\142\012\012\012\012\014\012\012\012\012\012\012\000\146\012\012\002\030\012\012\012\012\012\016\b\012\ta\016\012\012\012\012\012\020^\004\003~0>\012\004\030\t!\ta\014\012\012\b\014\002\026\005u\0120F\007V\012\006\012\012\b\022\0006\018\t\012\002\146\019&&\012\012\012\t!\012\020^\012\015\029\bV\012\012\005u\012\012E\005i\012\012\0120J\012E0Z\t\012E\012E\t\bZ\007F\000F\012E\012E\012E\027\012E\012E\b\001\012E\012E\006\018\012E\012E\025V\012E&\002V\012E\012E\012E\012E\012E\012E\012E\018\001\026(20\012E\002\006-\000F\019:\012E\012E\003\138\012E\004\141\012E\012E\012E\012E\012E\012E\000J\012E\002\t%\012E\012E\012E\003B\000\022\002\014\bv\012E\006-\n.\012E\012E\012E\012E\012E\t\t&\003\t\012E\004\030\002\004\007\012E\012E\018\130\000\134\n\153\012E\bz\t\012E\000\142\012E\012E\002\t\012E(\134\012E(\150((\012E\012E\012E\t!\012E\026\022\012E\006\n\153\012E\012E\000\150\012E\012\145\003\n\012E\012E\012E\002\012\145\006\n\025\138\012\145\012\145\t\000\004\141\0006\012\145\012\145\012\145\004\030\018\018\t\012\145\012\145\000F\012\145\012\145\t\012\145\004\006m\012\145\012\012\145\012\145\012\145\012\145\012\145\025\004\141\000\154\t\012\145\003J\004\030\n\b\012\145\012\145\012\145\012\145\n\012\145\012\145\012\145\012\145\012\145\012\145\002\012\145\012\145\002\012\145\012\145\012\012\145\012\145\018\000\134\012\145\004\002\026\012\145\012\145\012\145\012\145\012\145\006\001\025'>\012\145'N'z'\142\b\005\012\145\012\145\007F\002\003F\012\145\b\b\158\012\145\003\012\145\012\145\007\r\134\018\001\012\145\t!\005\001\012\145\012\145\012\145\b\012\145\r\142\012\145\006m\006m\012\145\012\145\015\012\145\000\0261\012\145\012\145\012\145\000\"\025Z\000V\000&\r\146\b&\t!\000\130\t!\000*\000\000\t\002b\025^\003\026\bE\001\018\t\023\003\003\b*\019.\002V\000\000\000\000\000\000\000\t!\001\026\023\006\002f\0002\002\b\001\022\019:\003\150\003\154\001\014\003\002\000,\000\"\000\138\000\003\158\003\002r\003\n\003\026\023\003N\002\003R\003\003\007v\b\007z5*\rq\007\007\007\007\007\005=\005\005\007\002v\007\004\030\rm\007\012\007~\007\130\rq\023r\rn\007F\t.\n\bE\rq\023\005y\r\158\rq\rm\023&\004\030\t*\0006\003>\003\n\rm\t4\002\rm\007\134\024\022\007]\t6\021\007\138\r~\000\026\021\t\t\005y\000\"\019\002\000V\000&\t!\003\018\138\000\130\005\000*\000\000\018\142\003\018V\018\154\000M\000\n\000\134\000M\012v\030*\t\006\004\030\000\000\000\000\000\000\000\r\005\005\028\n\005=\0002\004\018\154\000\006\003\150\003\154\001\014\003\002\018\158\030.\000\"\000\138\000\003\158\003\002V\003\n\003\026\r\003N\002\003R\003\003\007v\006e\007z\006\141\rq\007\007\007\007\007\012Z\007]\007\n\007!\rm\007\012\007~\007\130\rq\028n\rn\n\003)\146\000M\rq\023\n\r\158\rq\rm\028*\004\030\006\016(j\003\n\rm\t0\n\002\rm\007\134\024\022\b\t\015v\021\007\138\r~\000\026\016\t\t\006j\000\"\006\000V\000&\006\006\018\138\000\130\011.\000*\000\000\018\142\006\0302\n\005\001\018\005%\b\005\012B\006\012\004\030\000\000\000\000\000\000\000\000F\023.\0112\b&\0002\t\025\014\001\022\n\003\150\003\154\001\014\003\002\012F\019&\0192\000\138\000\003\158\003\b*\003\n\003\026\t\025\003N\002\003R\003\003\007v\003\007z\020f\b2\007\007\007\007\007\007\"r\007\027\007\000v\027\150\007\012\007~\007\130\b6\b-\rn\006&\012\005\r\158\020\134\005\r\006\007\t\004\030\006\007\004R\003\n\005%\t\020\002\006\007\134\020\142\t1\t\005\021\007\138\r~\000\026\029\t\t\t\000\"\006\000V\000&\006\t\011\000\130(\000*\000\000\t\005m\007R\b5\007\000\002\002\b5\007\005\001\014\t\004\030\000\000\000\000\000\000\000\011\t1\015\003F\0002\015\029\000\005m\003\150\003\154\001\014\003\002\029\019&\0192\000\138\000\003\158\003\011~\003\n\003\026\007\003N\002\003R\003\003\007v\019F\007z\020f\003\007\007\007\007\007\000M\007F\007\007\007\011\130\015\007\012\007~\007\130\020z\004\006\rn\006\020j\b5\002\n\002\014\020\134\005\015\006\000M\t\004\030\000M\000M\t\129\003\n\005\001\t7\138\002\004\007\134\020\142\018\154\t\002N\021\007\138\r~\000\026\015\t\t\002^\000\"\005m\000V\000&\t\129\t>\r\000\130\015]\000*\000\000\002n\n\030V\012\002\002\n\014\015\012\030\004:\006m\b\130\015\004\030\000\000\000\000\000\000\000\001!\005\000\"\004\134\0002\000&\030Z\r\t\003\150\003\154\001\014\003\002\006m\015]\000M\000\138\000\003\158\003\004\003\n\003\026\004\030\003N\002\003R\003\003\007v\015a\007z\015]\b&\007\007\007\007\007\002\004\158\007\019n\007\023\024\007\012\007~\007\130\b*\005\rn\015]\001!\t\129\022\005\012\012\024\001\011)\t\129\004\030\001\011)\015]\015a\003\t\012\025F\0052\007\134\007\025J\t\004\030\021\007\138\r~\000\026\007\130\t\t\015a\000\"\012\000V\000&\004\018\005&\030^\000\130\002V\000*\000\000\002\006\153\t%\006\153\rj\003B\000\022\018N\015a\027\n\004\r*\000\134\000\000\000\000\000\000\000\016\000\142\015a\005\0002\004\006E\018\134\0052\003\150\003\154\001\014\003\002*:\be\011)\000\138\000\003\158\003\030\134\003\n\003\026\000\150\003N\002\003R\003\003\007v!\026\007z\006E\003F\007\007\007\007\007\011-\025V\007\b\007\002\bu\007\012\007~\007\130\006E\004\rn$\004\018v\014\014\012\012\004\001\011-\t%\004\030\001\011-\bn\011j\011\t\012\016\003\"\007\134\005\016\t\n!\021\007\138\r~\000\026\004\030\t\t!\000\"\012\000V\000&\018\154\011n\011\000\130\011\000*\000\000\002\007\006-8\146\rj\003B\000\022\014\006n\r\007a\020b\005\000\000\000\000\000\000\000\011\003\n\004!\0002\002\014\018\020\142\003\150\003\154\001\014\003\002\020^\019&\0192\000\138\000\003\158\003\030\134\003\n\003\026\027\003N\002\003R\003\003\007v\bI\007z\020\138\018\007\007\007\007\007\022\004\002\007\0022\007\004\030!\007\012\007~\007\130\n\t%\rn\003\"\020j\024\002\t\t\020\134\005\011r\011\005\022\004\0305N\t\t\003\n\024\022\t\002\002\007a\007\134\020\142\023\134\t\bE\021\007\138\r~\000\026\t\t\t\n\153\000\"\002\000V\000&\018\154\t\026\027\000\130!\138\000*\000\000\007\n\bE\bI\bU\bE\bE\002V\bU\r\002B\004\030\004\030\000\000\000\000\000\000\000\t\030\t\130\t\025\018F\00026\0026-\150\004\030\003\150\003\154\001\014\003\002\023\031\000\"\000\138\000\003\158\003\t\025\003\n\003\026\002\003N\002\003R\003\003\007v\005\007z\024\0185R\007\007\007\007\007\007\016\007\012b\007-\146\000\007\012\007~\007\130\n\153\n\153\rn\027\bE\005\014\bU-\023---\004\030\016\004\030\0066\012f\016\003\n\rZ\t\002\002\0026\007\134\024\022#\158\t\017\021\007\138\r~\000\026\r\145\t\t\007i\000\",6\000V\000&\t\025\020V\018\138\000\130\ta\000*\000\000\018\142\b\001!\138\005\r\145\r\145\002J\r\145\004\153\n\t\025\004\030\004\030\000\000\000\000\000\000\000#2\002R\ta\007\00026\018\1541.\t\153\003\150\003\154\001\014\003\002\012\007B\n\000\138\000\003\158\003\b\014\003\n\003\026\r\003N\002\003R\003\003\007v\0006\007z\b\t\007\007\007\007\007\007\r\145\007!~\007\t\002V\007\012\007~\007\130\007i\024\n\rn\r\145\r\145\b\r\145\015\b\b#J\n\130\015z\tQ\004\030\015\130\012\014*\r\145\0026\t\r\145\r\145\000\007\134'F\r\145\t\r\145\021\007\138\r~\r\145\001\026\t\t\000\006\002\000\n\tQ\r\t\153\012\018\000\"\001\002\000&\018\002\130\b2\003\018\0006\000*\005e\000Z\015\138\0246\027.\018\1386R\t\025#\014\014\018\142\018n\b6(n\000.\002\015\150\000\001\002\r\005\014\004\030\b\t\025\0002\005e\018\154\014\t~\001\006\001\n\020\022\022\003e\027\030\000\138\000\015.\134\020\003\n\003\026\r\003N\023\146\003R\003\003\023\154\016*\007z\006E\004\030\003:\016\018\007E\tI\023\015\024\026\tI\002V\024>\007E\0242\024b\007~\007\130\024\142\024\025\026\"\000i\011\025\014\003b\006E\000i\000i\000i\000i\000i\025>'J\000i-\158\000i\000i\000i\000i%\006\025B\007\134\000i\006E\000i\011\025 2\007\138 :\011\025\006\000i\005e\003e\000i\000i'\000i\000i,\000i(\142\000i\000i\000i\000i\r\n\000i\000i\000i\000i\000i\t\025&\030\000i\000i\000i\000i\000i\000i\000i\005\022\000i\000i\000i\000i\000i\000i\000i\000i\t\025\000i\000i\000i\000i\000i\000i\000i\000i\000i\t\137\028\130\005\030\000i\000i\000i\000i\000i\000i\000i$\"r\000i\000i\000i\000i\000i\000i\000i\0143\000i\t~\b\n\019\142\016.\b\001\0166\000i\000i,\130\006\007a\005\"\000i\000i\000i\000i\000i\006\002\n\001m\000i\000i\000i\001\030\001\"\001&\001*\001.\007y\0012\0016\001:\001>\001B\025F\001F\001J\001N$B\t\025*2\001R\001m\001m\016>\001m\001m\001V\005\005:(\146\007y\007y\001Z\007y\007y\004\030\t\025\002\016J\001^\001b\001f\001j\001n\001r\004\001v\001z\r\146\b\018\154\r\001~\001\130:\026\003\"*\007y\030>\003\026\016\016V\001m\005\003\003!\r\004\001\134\029B\007y\001\138\001\142\007y\005B\004\030/!\001\146\001\150\001\154\030B\016^\001\158\001\001\001\011=\001\001\001\011=\001m\002\018/\002\014\001\001\001\007\001m\007y\001\007\001\001\002V\t~\001m\007y16\025F\001\007y\001)\014\029R\007y\001m\001m\001\001\001\r\r\r\r\r\007y\014\002\014\006\014\n\014\014\014\018\023\006\014\022\014\026\014\030\005:\0272\007\014\"\001m\tA\0079\n\001m\014&\001\026\003\004\tq\002\014*\0196\0276!\005F\016\011=\014.\0142\0146\014:\014>\014B\bm\014F\014J\012\0156\007\030f\014N\014R\023\022\016\tq\007\007\002\002\030\007\001m\tA\003B\000\022\003\bm\bm\014V\004\030\bm\014Z\014^\029V\030j\005\158\007\016\014b\014f\014j\016\005\014n\014r\014v\014z\"\014~\014\130\014\134.\130\001m\tA\016\003\"\014\138\014\142\014\146\bf\001m\tA\014\150\004V\014\154\014\158\005\bm\017R\tA\bm\015\014\b\014\tA\005\011\141\001m\001m\014\014\014\011\141\011\141\006Z\011\141\011\141\007\011\141\011\141\000F\011\141\011\141\t\130\011\141\bm\006]\bm\011\141\011\141\011\141\011\141\011\141\011\141\005e\bm\007f\016'\bm\017V\0006\006]\011\141\011\141\003\138\011\141\005\"Z\002V\"n\"r\011\141\011\141\bm\017Z\002\r\"\001\026\011\141\011\141\003B\000\022\n\000\134\019:\r0\002\011\141\011\141\011\141\011\141\011\1416\007\bj\n\011\141\016\026+\006\006\002+\022+\"+6\011\025\t\006\rv\011\141\011\025\b\011\141\005\011\141\011\141;\006\n\011\141\005F\011\141\023\016\"\023\011\141\011\141\011\141,\022\011\141\016*\015=&\"r\011\141\011\141\t\129\011\t\129\t\129\011\141\011\141\011\141\011\011\001\011\011\006\014\011\011\006]\011\011\015=\011\007\015=\015=\012\011\011\011\011\011\007\r\134\016\001\025F\0006\ti\001*\134\011\011\011\011\r\142\011\025\007!\150\n\011\011\003\"\011U\011\025\";#\011\012\011\011&\002\r\146\ti\000F\024\022\011\011\011\011\011$^\t\129\003\026\025*\011\011U\023\003\003\011U\006\018,f\016\tI\011\t\129\r\011$f\011\011#\015=\018\030\138\011\030\154\n&\026\011\011\011\004\002\011&*\007\tI\006\030\011\011\tI\020\023\006=\011\011\011\007\0006\007%\142\000Z\028\n\b\006\n\006\026!\000^\000\000&:\003\b\026!\000]\006\133\nF\007\006J\tq\006&&B&Z\bJ\000\000\bN\r.\000\000\002\002\002\014\0006\t\0257v\007\002\ty\b\r2\b:\000\134\nJ&b\tq\002!\003\158\003'6\001\026\t\025\002\t\158\002\n\026\"V\n>\nN\r\014\003Z\002V\031r\007\007\007\007\007\004\030\007\015N\r\007':\002\002\t\006\003^\003b\006F\n^\019\"2\028\001\026\002\002\0006\002\003!F\003!Z\004\030\t%\000F\000]/\0065\t\000\0006\002\030\003f\000\004\018\t'\146\t\nb\011\137\t\025:f\t\t/B\011\137\011\137\007\011\137\011\137\t%\011\137\011\137\0065\011\137\011\137\004\030\011\137\t\025\031^\006\018\011\137\011\137\011\137\011\137\011\137\011\1371*\000\134\nE\005&\0065\005*\000\t\006\007\014\011\137\011\137\003\138\011\1371R\0071b1n1\130\011\137\011\137\006\130+b\002+v\003\011\137\011\137\003B\000\022\nE\002\014\000\000\006\146\011\137\011\137\011\137\011\137\011\137\031n\bu'\150\003\011\137\011=\"r\000\000\007\019\"!\004\004\011\137\028\026\003\"\011\137\018\011\137\011\137\000\002\011\1370\011\137\019\"\0065\011=\011\137\011\137\011\137\011=\011\137\007\006^\004\011>\011\137\011\137\015I\b\000\n\0065\011\137\011\137\011\137\000\"#\134\002\000&\019\"\006\158%\003\018\031*\000*\006\003\005\002\006\004\030\002\018\015I\011B\t!\015I\015I\0065&v'\0065\000.\001!\000\001\002\001\003#\027\027\018\0002\007\005#\0065\001\006\001\n\020\022$\n\000F)\000\138\000\002\007]\020\003\n\003\026\029\n\003N\011Z\003R\003\003\023\154\018f\007z\011\0065\00790^\006!\007$\022\004\024\026\0312\031:\0196!\150\0242\024b\007~\007\130$\030$6\025\026!\006\006\015I\004\030\t\018\011\029\015\015I\024\022\000\n\015\000*.\011\000\"#\134\002\000&\t!$>\007\134\003\018\031J\000*\025\158 2\007\138 :\011\029-\015I\b\011\029\015I\015I\000\022\005\0159\006Q\000.\011\n\000\001\002\b\025\138#\015\007]\006\0002\025!#\011^\001\006\001\n\020\022$,r\011^\000\138\000\018\154\007z\020\003\n\003\0261\003N\026\003R\003\003\023\154\015\006\007z\015\b\002V\r\007~\b\001$\022\015\024\026\015\029\002\000;\018\0242\024b\007~\007\130$\030$6\025\026'f\006\015\015I\006\015\015\t~\001\007\134\0159\0006\001\n1\000\027\0271:\000\004\018$>\007\134\0006\011\005\rJ 2\007\138 :\011\011(\012\0122\002\011\011/b\011\011\t!\011+:\015\020\012\011\011\011\011\011\0006\b\024n&\006\018\029\022\029\030\003\"\007\n\011\011\012\011;\031'\134\006\018\t!\002V\011\011-\002\154\002\015/f\011\rj\003B\000\022\018\154\025z\015\000\015\011\011\011\011\011\029.\n\bu\027\026\011\006\018(\r\027\1423\n\nQ\0153\018'\150\011\0076\006Q\011\002\014\011\011\007Z\000\030\134'\150\0115>\"r+\014\011\011\011\b5\011\0316\007\nQ\011\011\000667\022\000Z\011\011\01176\024\000^\007a\0143\026'\1507N\b5'\138'\b5\b5\016\005:\026\022\018\154\027>\000\0023&\000\001\002\r\003\n\0186\007^\025~\002\000\007\025\1387r\r\001\006\001\n7\13477\025~(\000\138\00232\027B\018f\001\026\002\017\134\007\002\012~\003B\000\0227\030\030\003Z\016\004\030\002\030\030v\007!\007n73:7\004\030\nY\007/\00277\003^\003b8\014.z8&6\"v\b58G\030\"\000667\022\000Z\030z\007\004\03076&\000^\011A\"r\nY+\0187N8J\003f!\00064\01828\012\1348\0159\000\0058.\000\001\002\r\019r\0186\011A\"\154&\000\011A1\1347r$\001\006\001\n7\1347786\0159\000\138\002\0159\0159\018f\001\026\002\b\002\007\002\012~\003B\000\0227\006\018\003Z\007](~\n-\"\006]%\002V7\006]7!\150\019v\r\1455277\003^\003b8\014.z8&\002\0305\030%:(\130!\150\024\022/\002\005\"\016\004\030\011\141\b\n\r\145\r\145\007]\r\145\r\145&r8J\003f\024\022\0006\006]'\1508\012\1348\011\141\011\141\b\011\141\011\141\0159\011\141\011\141&\130\011\141\011\141\"\130\011\141!\150\bb\026\"\011\141\011\141\011\141\011\141\011\141\011\141*\002V\006]\b\006]\"\146\b\b\024\022\011\141\011\141\007\146\006]\"2\006]$\006\018\b\134\011\141\011\141\018\018\003\026\b\142+\002\011\141\011\141\003\003*\006+\006]+\012\011\141\011\141\011\141\011\141\011\141-\014\tn\0026\011\141\011\141\011U\bY-&\r\145\011U\bY\r\145\r\14556(B\b\r\145\011\141\r\145\011\141\002\030*\"\r\145\011\141-\018\011\141\012\"*.\011\141\011\141\011\141\003\011\141*J\014\b\011\141\011\141\011\141\019\"\018f\t~\"\011\141\011\141\011\141\002'\n\003\003\015\025\007\r\134\b\003\003\0065\003\003*Z\003\018\t\014\027N\r\142\003\003\003\003\003*b*z/\138\0006'\014'\011U\bY%\003\003\r\146*\0006(\004\030&\011\029\003\003\0276\011\029\003\026*\130\018N\003\023\003\003\017\0065\t')\003\003\003\003\003\0026/f(\003\003\n\022\nZ)\030\t\0068V&*:)\015\025\n+.\0026\003\006\018.\026&\011v-f\023-v\003\006E\002\158\002\014\003\003\0030\0031\014\n\tY\003\003\003\015\029\bI\003'\030\003\003\003\b>\000\"\005\011\029\000&\006E\007\007\n\003\"\000*\000\000&-\bB\tY\bI\000\n\bI\bI\018N\006E\005\006^\bJ\000\000\bN\bR\000\000\018\154\003\n\006b\006\134\018N\002\006\150\b^\006\b\b\b\000&\007\0006+2\r\003\158\003-\003\n.*&\b\002\b+B\t\002\tB*:\007z\015\029)\007\007\007\007\007-5&-*\158\007\004\030\007&\005\007~\007\130\029\n\tJ1Z\007+F\011\"\bI\007,\006\006\018*\007/\tY\004\030--./.B\t\012J\0079\007\1349\001\t#\158\t\tN\029\002\b>\000\"\t\t\000&\016j/f/\016r\002V\000*\000\000/-\bB1\001\001\018-/\0010\146/\027\027\bJ\000\000\bN\bR\000\000\015=\002\002\014\023*\030\0021z1\b\011\142\b\b\b\000\029\n/\016z\002/\003\158\003\020\003\n..\004\n\b\002\b\018\154\t\002\tB\016\134\007z\029\022\029\030\007\007\007\007\0070*2:1J/f\007\r\002\002\011\154\007~\007\130\011\tJ1^\016\1462\"\001\026\002\0023\002\0033\0030.\004\0301N\029.\003\"1\142\000^\t\012*\015=0^\007\134\016\1545f\t\012&\t\tN\003\006Q1\t\t1~\003\003\b\"\012\012:\006\003\0031\146\003\003\004\030\0035j3\b.\012\003\003\003\003\0032R:\014\012.\0122\011-5\0023\011-\003\003\01212\150\003Z2f\t!5\003\00350^\002\tA5\003\rj\003B\000\02253\003^72:\003\003\003\003\0036\0026\0147J\012N\0035\004\030\tA\012R\018N\tA\tA:3\003\0121\003\003f,\0032&\ta\030\1347\003\ta6\0066\018\003\003\003\011\137\003\019*:\012\011-\003\003\r\026\018\018\005\003\003\003\005\tA\011\137\011\137\006\011\137\011\137\012\011\137\011\1372j\011\137\011\13762\011\137\n\ta0^\011\137\011\137\011\137\011\137\011\137\011\1370^\003~0>\0180^2V\024\rB\tA\011\137\011\137\007\1460^\0020F\012\tA\r\138\011\137\011\1376\0260^\003\026\ta\tA\011\137\011\137\003\0038^\tA\ta\014\ta\011\137\011\137\011\137\011\137\011\137\b\014\015\022\015V\011\137\011\137\005\ta0J6\0302.8j\ta\018\004\030\015\142\015\154\015\011\137\015\011\137\016B5V\016N\011\137\016~\011\137\016\138\018\006\005\011\137\011\137\011\137\011\011\137\016\015F8v\011\137\011\137\011\137\015^\017J\016\0060\011\137\011\137\011\137\016\018\011\011\011\011\011\011\011\011\011\017r\011\011\011\011\017\158\017\011\011\011\011\011\011\011\017\002V\025~\017\018\018\019&\0192\018.\011\011\011\011\018^\018\019\n(^\019*\011\011\011\019^\011\011\020\138\019\011\011\011\011\019\019\019\020\026\011\011\011\011\011\011\007]\020:\020n\011\011\020r&\020\154\020\020\020\134\005\023\014\023:9+V\011\011\023B\023N\003\n\023V\011\011\002\011!\150\020\142\023b\011\011\011\011\011\023z\024J\024f\011\011\011\024\150\024\158\b\024\022\011\011\011\024\011\011\011\011\011\011\011\011\011\024\011\011\011\011\0252\004\030\011\011\011\011\011\011\011\003~0>\025R\025f\025\150\019&&\025\011\011\011\011\007]0F\025\025!\011\011\011\025\011\011\020f\025\011\011\011\011\026\006\026\n\026\030\0266\011\011\011\011\011\011\026V\026z\026~\011\011\026\1420J\026\1465\026&\002V\027\006\bU9+n\011\011\027&\027J\001\026!\011\011\002\011\027b\019:\027\130\011\011\011\011\011\027\158\027\bU\011\011\011\bU\0270\011A\011\011\011\011A\011\011\011\011\011\011\011\011\011\027\011\011\011\011\027\004\030\011\011\011\011\011\011\011\027\003~0>\028\018\0286\028>\002\028J\011\011\011\011\028R\028^0F\028v\028\011\011\011\028\011\011\028\028\011\011\011\011\029F\029J\029b\029\011\011\011\011\011\011\029\029\030J\011\011\011A\004\0300J\0307>\030\030\031\002\bY9+\130\011\011\031\018\031b\020\n\031f\011\011\031~\011\031\031\031\011\011\011\011\011 \030!\bY\011\011\011\bY\"\018\0110\011\011\011\"F\011\011\011\011\011\011\011\011\011\011\011\011\011\011\"\158\"\011\011\011\011\011\011\011\"\"#\006#\"#N#Z\002#f\011\011\011\011#j#\150##$&\011\011\011$.\011\011$j\011\011\011\011\011$\150$$%\022\011\011\011\011\011\011%\030\015%2\011\011\015\004\030%:%R%Z%r%\n1\011++\142\011\011\017\011\020\n\017\011\011\011\011%%\011\011\011\011\011\011%&\014\005\011\011\011\005\011\015\011\011\011\011\011\011&2\011\011&J\011\011&R\011\011&\134\011&\017&\011\011\011\011\011\011'*'v\015\006'\158\015'(\"\017\002\011\011\011\015(J\015(f\018\018\011\011(v(\158\011((\011\011\011\011\012\017\015()\022\011\011\011\011\011\005\006]\015)>\011\006]\015)V\004\030)^2\014)v\006]\017\011+)\011\019)\011\019\012\011)\011))2\016\011\011\0114\146\011*\0223\138*R*j\011\011*r\011\006]\015\011\011\011\011\011*\011\011*\011\011*\011\011\018\011+\030\019+\011\011\011\011\011\011,\030,>\006]\017*\006]\0154\150\019,b\011\011\011\006]\015\006]\015,\142,\011\011,4\154\011,-\011\011\011\011-\019\006]\015.\018\011\011\011\011\011.:.V\005.\158\0113\005./\014/\022/&/6/N\020\002\011+/V\011\0240\014\011\0240\018\01106\0110B3\006U\011\011\011\006U\01130j0v0\134\011\0110\158\0110\002\011\011\011\011\0111B\011\0111j\011\011\027Z\011\0111\0111\0241\011\011\011\011\011\011\006U\r52\022\006U2B\0052^\0242r\011\011\0112z\004\0302\1342\15822\011\011\r5\r5\011\tA2\011\011\011\011\006U\024\006U)j\012\011\011\011\011\011\006U3\0303*3Z\0113f3\tA34\014\tA\tA4\026\025\002\011+2\0112\006U\0114\1381\0113\150\011\0123\r5\011\011\011\012I\011\019444\011\0114\003~0>4\011\011\0114\tA\012I\012I\006\012I\012I0F\012I\012I5F\012I\012I5^\012I\0185v5\012I\012I\012I\012I\012I\012I52\1306F6c6s6\135\0246\tA\012I\012I\007\146667\"0J\tA1\012I\012I\003~0>\003\026\tA\tA\012I\012I\003\0037\142\tA7\14670F\012I\012I\012I\012I\012I8\0228\0308>\012I\012I8R8r\tA8\1589\147\tA\tA09:\018:\030:*\012I:.\012I\005:V\r!\012I:\138\012I0J:\1462\138\012I\012I\012I\012\145\012I\019:\000\000\012I\012I\012I\000\000\003~0>\005\012I\012I\012I\005\tA\012\145\012\145\006-F.\0140F\012\145\012\145\000\000\012\145\012\145\000\000\012\1450\000\000\000\000-N\012\145\012\145\012\145\012\145\012\145\000\0005\000\000\000\000\000\000\000\000\024\000\000\tA\012\145\012\145\012\145\000\000\002\000\0000J\tA\r!\012\145\012\145\003~0>\012\145\tA\tA\012\145-R\012\145\012\145\000\000\tA\000\000\000\0000F\012\145\012\145\012\145\012\145\012\145\000\000\000\000\000\000\012\145\012\145\000\000\000\000\tA\000\000\000\000\tA\tA0\004\030\000\000\000\000\000\000\012\145\000\000\012\145\000\000\000\0007\030-b\000\000\012\1450J\020.5\012\145\012\145\012\145\012\012\145\019\000\000\000\000\012\145\012\145\012\145\000\000\003~0>\000\000\012\145\012\145\012\145\000\000\tA\012\012\006\012\0120F\012\012\000\000\012\012\000\000\0120\000\000\000\000-N\012\012\012\012\012\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\tA\012\012\012\000\000\000\000\000\0000J\tA7&\012\012\000\000\000\000\012\tA\tA\012-R\012\012\000\000\tA\000\000\000\000\000\000\012\012\012\012\012\000\000\000\000\000\000\012\012\000\000\000\000\tA\000\000\000\000\tA\tA0\000\000\000\000\000\000\000\000\012\000\000\012\000\000\000\000\000\000-b\000\000\012\000\000\000\000\000\000\012\012\012\012E\012\019\000\000\000\000\012\012\012\000\000\000\000\000\000\000\000\012\012\012\000\000\tA\012E\012E\006\012E\012E\000\000\012E\012E\000\000\012E\012E\000\000\012E\000\000\000\000\000\000\012E\012E\012E\012E\012E\012E\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\tA\012E\012E\007\146\000\000\000\000\000\000\000\000\tA\000\000\012E\012E\000\000\000\000\003\026\tA\tA\012E\012E\003\003\000\000\tA\000\000\000\000\000\000\012E\012E\012E\012E\012E\000\000\000\000\000\000\012E\012E\000\000\000\000\tA\000\000\000\000\tA\tA\000\000\000\000\000\000\000\000\000\000\012E\000\000\012E\000\000\000\000\005\012E\000\000\012E\005\000\000\000\000\012E\012E\012E\011\012E\019\000\000\000\000\012E\012E\012E\000\000\000\000\000\000\000\000\012E\012E\012E\000\000\tA\011\011\006\011\011\000\000\011\011\000\000\011\011\000\000\011\000\000\002\000\000-N\011\011\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\025\006\000\000\tA\011\011\011\000\000\000\000\000\000\000\000\tA\000\000\011\011\000\000\000\000\011\005\tA\011-R\011\011\000\000\tA\004\030\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\011\011\000\000\000\000\000\000\000\000\000\000\000\000)\000\000\000\000\000\000\000\000\000\000\011\000\000\011\005\017\000\000-b\017\011\000\000\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\005\011\011\011\005\000\000\011\011\000\000\007\r\134\000\000\011\011\000\000\011\011\000\000\011\000\000\000\000\017\r\142\011\011\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\017\011\011\r\146\000\000\002\000\000\000\000\000\000\000\000\011\011\000\000\000\000\003\026\000\000\000\000\011\023\003\003\000\000\000\000\017\000\000\000\000\011\011\011\011\011\000\000\006\157\000\000\011\011\006\157\000\000\004\030\000\000\000\000\000\000\000\000.~\004\030\017.\142\000\000\011\000\000\011\000\000\017\000\000\023\000\000\011\000\000\000\000\002\011\011\011%f\011\000\000\007\"r\011\011\0113F\0041\006\1573N\011\011\011\0041\0041\000\000\012\012\000\000\0041\0041.\154\0041\0041\007\0041\000\000\007\007\012\0041\0041\0041\0041\0041\000\000.\000\000\000\000\006\157\000\000\000\000\000\000\000\000\0041\0041\012\006\157\000\0003V\000\000\000\000\005\0041\0041\000\000\000\000\002\000\000.\0041\rj\003B\000\0223b\006\157\006\157\000\000\000\000\0041\0041\0041\0041\0041\000\000\005\000\000\000\000\0041\005\000\000.\000\000\000\000\000\000\000\00033n\00414\002\000\000\0041\000\000\000\000\0041\000\000\007\030\134\000\000\0041\000\000\000\000\000\000\0041\0041\0041\000\000\0041\000\0003v\000\000\000\000\0041\0041\000\000\004-\002\000\000\0041\0041\0041\004-\004-\000\000\012\012\000\000\004-\004-4\n\004-\004-\000\000\004-\000\000\000\000\000\000\012\004-\004-\004-\004-\004-\000\0004\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004-\004-\012\004\030\000\000\000\000\000\000\000\000\000\000\004-\004-\000\000\004-\002\000\0004\"\004-\rj\003B\000\022\000\000\000\000%\000\000\000\000\004-\004-\004-\004-\004-\004-\000\000\007\r\134\004-\004-\004-4*\004-\004-\000\000\004-\000\000\000\000\004-\r\142\004-\004-\004-\004-\004-\000\000\000\000\030\134\000\000\004-\000\000\000\000\000\000\004-\004-\004-\r\146\004-\000\000\000\000\000\000\000\000\004-\004-\004-\000\000\000\000\003\026\004-\004-\004-\023\003\003\000\000\000\000\000\000\000\000\000\000\004-\004-\004-\004-\004-\000\000\000\000\000\000\004-\004-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004-\000\000\000\000\000\000\000\000\000\000\023\000\000\004-\000\000\000\000\000\000\004-\004-\004-\000\000\004-\000\000\000\000\000\000\004-\004-\004-\000\000\003\129\000\000\000\000\004-\004-\004-\003\129\003\129\000\000\012\012\000\000\003\129\003\129\000\000\003\129\003\129\000\000\003\129\000\000\000\000\000\000\012\003\129\003\129\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\012\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\000\000\003\129\002\000\000\000\000\003\129\r\003B\000\022\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\003\129\000\000\007\r\134\003\129\003\129\003\129\000\000\003\129\003\129\000\000\003\129\000\000\000\000\003\129\r\142\003\129\003\129\003\129\003\129\003\129\000\000\000\000+\000\000\003\129\000\000\000\000\000\000\003\129\003\129\003\129\r\146\003\129\000\000\000\000\000\000\000\000\003\129\003\129\003\129\000\000\000\000\003\026\003\129\003\129\003\129\r\003\003\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\000\000\000\000\000\000\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\129\000\000\000\000\000\000\000\000\000\000+^\000\000\003\129\000\000\000\000\000\000\003\129\003\129\003\129\000\000\003\129\000\000\000\000\000\000\003\129\003\129\003\129\000\000\003\000\000\000\000\003\129\003\129\003\129\003\003\000\000\012\012\000\000\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\012\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\012\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\003\002\000\000\000\000\003\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\003\000\000\007\r\134\003\003\003\000\000\003\003\000\000\003\000\000\000\000\003\r\142\003\003\003\003\003\000\000\000\000\030\134\000\000\003\000\000\000\000\000\000\003\003\003\r\146\003\000\000\000\000\000\000\000\000\003\003\003\000\000\000\000\003\026\003\003\003\023\003\003\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\003\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\003\000\000\017.\000\000\000\000\0152\023\000\000\003\000\000\000\000\000\000\003\003\003\0041\003\000\000\000\000\000\000\003\003\003\000\000\000\000\000\000\0172\003\003\003\000\000\000\000\0041\0041\000\000\007\r\134\000\000\0041\0041\000\000\0041\0041\000\000\0041\0176\000\000\000\000\r\142\0041\0041\0041\0041\0041\000\000\000\000\000\000\000\000\000\000\002\017:\000\000\017f\0041\0041\r\146\000\000\000\000\000\000\000\000\000\000\000\000\0041\0041\000\000\000\000\003\026\000\000\000\000\0041\023\003\003\015f\0006\000\000\000\0007V\0041\0041\0041\0041\00417Z\000\000\017v\0041\0041\004\030\000\000\003U\000\000\000\000\000\000\000\000\015n\000\000\000\000\000\000\000\000\0041\000\000\015v\000\000\000\000\000\000\023\000\000\0041\000\000\000\000\000\000\0041\0041\0041\003\0041\n\000\134\000\000\0041\0041\0041\000\000\000\000\000\000\000\000\0041\0041\0041\000\000\000\000\003\003\000\000\007\r\1347^\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\r\142\003\003\003\003\003\000\0007b\000\000\000\000\000\000\000\000\t\000\000\003U\003\003\r\146\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\003\026\000\000\000\000\003\023\003\003\t\t\000\000\t\t\003\003\003\003\003\000\000\000\000\003\003\003\000\000\000\000\000\000\003\003\000\000\012\012\000\000\003\003\000\000\003\003\000\000\003\000\000\000\000\023\012\003\003\003\003\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\003\012\000\000\000\000\003\003\003\000\000\003\003\000\000\000\000\002\000\000\000\000\003\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\003\t\000\000\000\000\t\t\000\000\000\000\000\000\t\003\t\000\000\003\000\000\t\003\000\000\000\000\030\134\000\000\003\000\000\000\000\000\000\003\003\003\002\029\003\000\000\000\n\000\000\026j\003\003\000\"\001\002\000&\003\003\003\003\018\000\000\000*\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\000\000\002\029\000\000\000\000\026r\026\134\000\000\000.\000\000\000\000\000\001\002\000\000\000\000\014\000\000\000\000\000\000\0002\000\000\000\000\014\000\000\001\006\001\n\020\022$\000\000\000\000\000\138\000\000\000\020\020\003\n\003\026\000\000\003N\023\146\003R\003\003\023\154\000\000\007z\026\154\000\000\000\000\000\000\000\000\000\000\000\000\023\000\000\024\026\000\000\000\000\000\000\000\000\0242\024b\007~\007\130\024\142\024\025\026\000\0006\000\000\000\000\000\000\000\000\0006:J7\022\000Z\000\000\025>\02676\000\000\000^\000\000\000\000\000\000\000\000\025B\007\134\015I\000\000\000\000\000\000 2\007\138 :\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000*\"\000\000\000\000\000\000\000\000\000\000\000:b\000\000\001\006\001\n7\1347:v\000\000\000\000\000\138\002\000\000\000\000\018f\001\026\002\000\000\007\000\000\012~\003B\000\0227\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000:z\000\0007\000\000\000\000\000\000\000\00077\003^\003b:\130/f8&6\000\000\000\000\015I\000\000\000667\022\000Z\000\000\000\000\000\00076\000\000\000^\000\000\000\000\000\000\000\000\000\000:\154\003f\000\000\000\000\000\000\000\0008\012\1348\000\000\000\000\000\000\000\000\001\002\000\000\000\000\0186\000\000\000\000\000\000\000\000\000\000\0007r\000\000\001\006\001\n7\1347:\000\000\000\000\000\138\002\000\000\000\000\018f\001\026\002\000\000\007\002\012~\003B\000\0227\015\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\000\0007\000\000\000\000\000\000\000\00077\003^\003b8\014.z8&\0156\000\000\015\015\000\000\0006:J7\022\000Z\000\000\004\030\000\00076\000\000\000^\018\158\000\000\0006\000\0008J\003f\015I\000\000\000\000\000\0008\012\1348\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000*\"\000\000\000\000\015\000\000\000\000\000:b\000\000\001\006\001\n7\1347:\000\000\000\000\000\138\002\000\000\000\000\018f\001\026\002\000\007\000\000\012~\003B\000\0227\000\000\003Z4j\001\026\015\000\000\000\000\002\000\000:z\r7\015\000\000\015\000\00077\003^\003b:\130/f8&\000\000\000\000\t\153\015I\000\000\018\138\000\000\t\153\015\t\153\t\153\018\142\000\000\000\000\t\153\000\000\t\153\000\000\000\000\000\000:\154\003f\000\000\004\030\t\153\000\0008\012\1348\012\000\000\000\000\t\153\000\000\000\000\t\153\t\153\000\000\000\000\000\000\000\000\000\000\000\000\t\153\000\000\000\000\000\000\000\000\t\153\t\153\t\153\t\153\000\000\000\000\000\000\t\153\t\153\000\000\000\000\000\000\t\153\t\153\000\000\t\153\t\153\t\153\t\153\t\153\t\153\000\000\t\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\153\000\000\000\000\000\000\000\000\t\153\t\153\t\153\t\153\000\000\000\000\t\153\000\018\000\000\000\000\000\000\000\000\0006\000\000\0036\000Z\000\000\012\t\153\003V\000\000\000^\t\153\t\153\000\000\000\000\t\153\000\000\t\153\006}\000\000\000\000\000\000\t\153\t\153\t\153\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\000\000\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\r\150\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\021r\000\000\000\000\r\006\r\022\003^\003b\006]\000\000\r&\000\018\006]\000\000\000\000\000\000\0006\000\000\0036\000Z\000\000\000\000\004\030\003V\000\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\003f\t\145\000\000\014\000\000\r^\012\134\rb\000\000\000\000\000\000\000\000\001\002\000\000\000\000\t)\006]\000\000\000\000\000\000\000\000\000.n\000\000\001\006\001\n\003\146\007\1540\000\000\000\000\000\138\002\000\000\000\000\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\006]\003Z\006]\000\000\000\000\000\000\000\000\000\000\0079\000\000\006]\012\006]9Z\000\000\000\000\r\006\r\022\003^\003b\000\000.z\r&\000\018\000\000\000\000\000\000\000\000\0006\006]\0036\000Z\000\000\012\004\030\003V\000\000\000^\t\145\r\158\000\000\000\000\r\000\000\003f\006}\000\000\000\000\000\000\r^\012\134\rb\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\000\000\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\000\000\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\r\150\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\r\006\r\022\003^\003b\000\000\t%\r&\000\026\000\000\000\000\000\000\000\000\000\"\000\000\000V\000&\000\000\000\000\004\030\000\130\000\000\000*\000\000\000\000\000\000\000\000\000\000\000\000\003f\t%\000\000\003>\000\000\r^\012\134\rb\000\000\000.\000\000\000\000\000\001\002\000\000\000\000\t)\000\000\000\000\000\000\0002\000\000\000\000.n\000\000\001\006\001\n\001\014\003\002/~\000\000\000\000\000\138\000\000\000\000\000\000\000\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\022\138\000\000\005\007\012\007~\007\130\000\000.z\rn\000\018\000\000\000\000\000\000\000\000\0006\000\000\0036\000Z\ta\000\000\004\030\003V\000\000\000^\005\000\000\000\000\005\005\000\000\007\134\003\142\t%\b\000\000\rz\007\138\r~\000\000\000\000\000\ta\000\001\002\ta\ta\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\002\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\000\000\003Z\000\000\000\000\000\000\000\000\ta\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\r\006\r\022\003^\003b\005\000\000\r&\019\000\018\000\000\019\000\000\004\030\0006'R\0036\000Z\000\000\004\030\000\000\003V\ta\000^\000\000\000\000\000\000#\000\000\003f\ta\007\150\ta\003>\r^\012\134\rb\000\000\019\000\000\000\000\000\000\001\002\ta\000\000\000\000\000\000\000\000\ta\000\019\000\000\001\022\000\000\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\002\019\001\026\002\000\000\007\002\012~\003B\000\022\012\130\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\019\000\000\000\000\r\006\r\022\003^\003b\000\000\000\000\r&\003q\000\018\000\000\003q\000\000\004\030\0006'R\0036\000Z\000\000\004\030\020\002\003V\000\000\000^\000\000\000\000\000\000\020\n\000\000\003f\000\0006*\017\t%\r^\012\134\rb\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\000\000\003q\000\000\000\000\000\000\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\003q\003q\001\026\002\000\000\007\002\012~\003B\000\022\012\130\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\003q\000\000\000\000\r\006\r\022\003^\003b\000\000\000\000\r&\000\000\000!\000\000\000\000\000\000\003q\000!'R\000!\000!\000\000\004\030\003q\000!\016\000!\000\000\000\000\000\000\003q\000\000\003f\000\000\b\000\000\000\000\r^\012\134\rb\000\000\000\000\000!\000\000\000\000\000!\000!\016\016\000\000\000\000\016\000\000\000!\000\000\000\000\000\000\000\000\000!\000!\000!\000!\000\000\000\000\000\000\000!\000!\000\000\000\000\000\000\000!\000!\000\000\000!\000!\000!\000!\000!\000!\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000!\016\000\000\000\000\000\000\000!\000!\000!\000!\000\000\000\000\000!\000\029\000\000\000\000\000\000\000\000\000\029\000\000\000\029\000\029\000\000\000\000\000!\000\029\000\000\000\029\016\000\000\016\000\000\000\000\000\000\000!\b\002\026\000\000\016\000!\000!\000!\016\000\029\000\000\000\000\000\029\000\029\000\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\000\000\016\000\000\000\029\000\029\000\029\000\029\000\000\000\000\000\000\000\029\000\029\000\000\000\000\000\000\000\029\000\029\000\000\000\029\000\029\000\029\000\029\000\029\000\029\000\000\000\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\000\000\000\000\000\000\000\029\000\029\000\029\000\029\000\000\000\000\000\029\000\026\000\000\000\000\000\000\000\000\000\"\014\000V\000&\000\000\000\000\000\029\000\130\000\000\000*\000\000\000\000\000\000\000\000\000\000\000\000\000\029\b\000\000\000\000\n\000\029\000\029\000\029\000\000\000.\000\000\000\000\000\001\002\000\000\000\000\0186\000\000\000\000\000\000\0002\000\000\000\000\018B\000\000\001\006\001\n\001\014\003\002\018R\000\000\000\000\000\138\000\000\000\000\000\018f\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\000\000\000\000\000\000\000\000\000\000\000\000(\000\000\007\000\000 \000\000\000\000\007\012\007~\007\130()\002\rn\000\026\000\000\000\000\n\000\000\000\"\000\000\000V\000&\000\000\000\000\004\030\000\130\007\000*\000\000\000\000\000\000\000\000\000\000)\n\007\134\000\0002J\000\000\000\000\rz\007\138\r~\000\000\000.\000\000\000\000\000\001\002\007\007\000\000\000\000\007\000\000\0002\000\000\000\000\000\000\000\000\001\006\001\n\001\014\003\002\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\007\007\000\000\000\000\000\000\007\012\007~\007\130\000\000\000\000\rn\000\026\000\000\000\000\000\000\000\000\000\"\000\000\000V\000&\000\000\000\000\004\030\000\130!\000*\007\000\000\007\000\000\000\000\000\000\007\134\000\0002\026\000\000\007\rz\007\138\r~\007\000.\000\000\000\000\000\001\002\007\007\000\000\000\000\007\000\000\0002\000\000\000\000\"\006\000\000\001\006\001\n\001\014\003\002\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\007\007\000\000\000\000\000\000\007\012\007~\007\130\000\000\000\000\rn\015Q\000\000\000\000\000\000\000\000\015Q\000\000\015Q\015Q\000\000\000\000\004\030\015Q\016\015Q\007\000\000\007\000\000\000\000\000\000\007\134\b1\000\000\007\rz\007\138\r~\007\015Q\000\000\000\000\015Q\015Q\016\016\000\000\000\000\016\000\000\015Q\000\000\000\000\007\000\000\015Q\015Q\015Q\015Q\000\000\000\000\000\000\015Q\015Q\000\000\000\000\000\000\015Q\015Q\000\000\015Q\015Q\015Q\015Q\015Q\015Q\000\000\015Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\015Q\016\000\000\000\000\000\000\015Q\015Q\015Q\015Q\000\000\000\000\015Q\015M\000\000\000\000\000\000\000\000\015M\000\000\015M\015M\000\000\000\000\015Q\015M\000\000\015M\016\000\000\016\000\000\000\000\000\000\015Q\b\002\026\000\000\016\015Q\015Q\015Q\016\015M\000\000\000\000\015M\015M\000\000\000\000\000\000\000\000\000\000\000\000\015M\000\000\000\000\016\000\000\015M\015M\015M\015M\000\000\000\000\000\000\015M\015M\000\000\000\000\000\000\015M\015M\000\000\015M\015M\015M\015M\015M\015M\000\000\015M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015M\000\000\000\000\000\000\000\000\015M\015M\015M\015M\000\000\000\000\015M\000\026\000\000\000\000\000\000\000\000\000\"\000\000\000V\000&\000\000\000\000\015M\000\130\000\000\000*\000\000\000\000\000\000\000\000\000\000\000\000\015M\000\000\000\000\000\000\000\000\015M\015M\015M\000\000\000.\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\001\006\001\n\001\014\003\002\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\011\000\000\000\000\000\000\000\000\000\000\002\158\002\014\007\000\000\000\000\000\000\000\000\007\012\007~\007\130\000\000\000\000\rn\000\000\003\000\018\000\000\000\000\000\000\000\000\0006\005\0036\000Z\004\030\000\000\000\000\003V\000\000\000^\000\000\000\000\000\000\000\000\007\134\000\000.\"\t%\000\000\rz\007\138\r~\012z\005\006^\000\000\000\000\000\000\001\002\000\000\000\000\000\000\003\n\006b\006\134\000\002\006\150\000\000\006\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\000\000\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\002\014\012\000\000\000\000\004\030\000\000\r\006\r\022\003^\003b\000\000\000\000\r&\000\000\003\000\018\000\000\000\000\000\000\000\000\0006\025\0036\000Z\004\030\000\000\000\000\003V\000\000\000^\000\000\000\000\000\000\000\000\003f\000\000\000\000\000\000\000\000\r^\012\134\rb\r\018\005\006^\000\000\000\000\000\000\001\002\000\000\000\000\000\000\003\n\006b\006\134\000\002\006\150\006]\006\001\006\001\n\003\146\007\154\000\000\000\000\000\000\000\138\002\000\000\000\000\000\000\001\026\002\000\000\007\002\012~\003B\000\022\012\130\006]\003Z\tA\006]\006]\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\004\030\000\000\r\006\r\022\003^\003b\000\000\000\000\r&\000\000\000\000\tA\000\000\002\006\tA\tA\003\000\000\000\000\000\000\004\030\000\000\003\003\000\000\000\000\000\000\006]\003\003\003f\003\003\000\000\003\r^\012\134\rb\002\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tA\003\003\006\006]\000\000\006]\000\000\000\000\000\000\003\003\0079\000\000\006]\000\000\006]\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\003\003\003\003\tA\000\000\006]\t\003\000\000\0079\000\000\tA\000\000\tA\000\000\000\000\000\000\003\000\000\tA\003\000\000\000\000\003\000\000\tA\t\t\003\t\tA\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\003\003\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\006]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\t\000\000\003\003\000\000\000\000\000\000\000\000\006]\003\000\000\006]\006]\t\t\000\000\t\000\000\020\003\003\003\003\000\000\000\000\000\000\000\000\003\t\000\000\000\000\n\t\000\000\000\000\019J\t\003\t\000\000\003\000\000\t\003\000\000\000\000\000\000\000\000\003\006]\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\003\003\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\006]\000\000\006]\003\003\003\003\003\000\000\001\006]\000\000\006]\000\000\001\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\006]\tA\000\000\001\003\tA\000\000\001\000\000\000\000\001\001\000\000\020\003\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\001\000\000\000\000\tA\003\001\003\000\000\003\003\003\000\000\003\001\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\tA\000\000\000\000\003\003\003\021\014\003\tA\000M\001\000\000\001\000\000\000\000\000\000\tA\003\003\000\000\000\000\000\000\tA\000\000\000\000\000\000\003\003\025\142\000\000\000\000\000\000\000M\003\000\000\000M\000M\000\000\000\000\000\000\000\000\000\000\020\021\022\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\002\000\000\000\000\003\003\003\000\000\003\t\004\001\000\000\000\000\003\003\000\000\004\001\004\001\000\000\003\003\003\004\001\004\001\000\000\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000M\004\001\004\001\004\001\004\001\004\001\000\000\000\000\004\030\000\000\019V\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\t\t3\006\000\000\004\001\004\001\000\000\019n\000\000\000\000\t\004\001\000\000\000\000\t\000\000\000\000\t\000\000\000\000\020\004\001\004\001\004\001\004\001\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\004\001\000\000\t\004\001\000\000\000\000\004\001\000\000\000\000\000\000\000\000\004\001\000\000\000\000\t\004\001\004\001\004\001\000\000\004\001\0006\003\000\000\t\004\001\004\001\000\000\003\003\007F\004\001\004\001\004\001\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\027\000:\000\000\000\000\003\003\000\000\000\000\000\000\000\000\003\n\003\000\000\000\000\002\000\000\000\000\027\000\000\000\000\020\003\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\018\138\000\000\000\000\000\000\003\000\000\018\142\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\004\030\003\003\003\000\000\003\000\000\003\000\000\028\158\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\021\014\003\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\005\003\000\000\005\005\000\000\000\000\005\000\000\000\000\020\021\022\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\005\000\000\003\005\005\003\000\000\000\000\000\000\000\000\003\002\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\002\005\003\003\003\021\014\003\000\000\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\026\000\000\000\000\005\003\000\000\000\000\000\000\000\000\000\000\005\004\030\000\000\020\021\022\003\003\003\000\000\005\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \018\000\000\003\005\000\000\003\005\005\003\000\000\000\000\000\000\005\003\000\000\005\005\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\002\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\005\003\000\000\000\000\000\000\000\000\000\000\000\000\004\030\005\020\021\022\021N\021V\021f\000\000\000\000\004\030\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000#V\000\000\003\000\000\000\000\003\000\000\000\000\003$\138\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\021~\003\000\000\020\020\000\000\003\021\134\021\142\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\004\005\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\004\005\004\005\000\000\004\005\004\005\000\000\004\005\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\004\005\000\000\000\000\000\000\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\000\000\000\000\004\005\000\000\000\000\004\005\000\000\000\000\000\000\000\000\004\005\000\000\000\000\000\000\004\005\004\005\004\005\000\000\004\005\000\000\003\000\000\000\000\004\005\004\005\000\000\020\020\000\000\004\005\004\005\004\005\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\004\t\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\004\t\004\t\000\000\004\t\004\t\000\000\004\t\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\004\t\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\004\t\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\004\t\000\000\000\000\004\t\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\004\t\004\t\004\t\000\000\004\t\000\000\003\000\000\000\000\004\t\004\t\000\000\020\020\000\000\004\t\004\t\004\t\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\021~\003\000\000\020\020\000\000\003\021\134\021\142\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\021\134\021\142\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\003\003\000\000\020\020\000\000\003\021\134\021\142\003\003\000\000\003\003\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\021\150\000\000\003\000\000\0045\000\000\000\000\021~\003\000\000\020\020\000\000\003\021\134\021\142\0045\0045\000\000\0045\0045\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\0045\000\000\000\000\0045\000\000\000\000\000\000\003\0045\000\000\000\000\000\000\0045\0045\021\150\000\000\0045\000\000\000\000\000\000\000\000\021~\0045\000\000\003\003\000\000\0045\021\134\021\142\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\bm\bm\000\000\007y\007y\000\000\000\000\021\003\003\003\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\bm\bm\000\000\bm\bm\000\000\003\007y\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\007y\003\000\000\007y\000\000\003\003\003\000\000\003\003\000\000\003\003\003\003\003\000\000\003\003\bm\003\000\000\000\000\000\000\000\000\003\003\003\003\003\007y\000\000\000\000\000\000\000\000\000\000\003\"\000\000\007y\003\003\000\000\007y\000\000\000\000\000\000\007y\000\000\003\003\bm\000\000\000\000\000\000\000\000\003\000\000\007y\bm\000\000\019V\000\000\bm\000\000\021\003\003\003\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\bm\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\003\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\016\016\000\000\000\000\000\000\000\000\000\000\021\003\003\003\003\000\000\000\000\000\000\003\003\000\000\017.\000\000\000\000\0152\000\000\016\016\000\000\016\016\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\0045\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\0045\0045\0176\0045\0045\016\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\002\017:\000\000\017>\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\016\000\000\000\000\000\000\015f\0045\000\000\000\000\016\000\000\019V\000\000\016\000\000\021\022.\022f\022n\022~\004\030\000\000\000\000\0045\022\134\000\000\000\000\015n\016\000\000\000\000\000\000\000\000\000\000\015v\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\003\0045\000\000\000\000\000\000\0045\0045\022\000\000\0045\000\000\000\000\000\000\0045\022\150\0045\000\000\021\022\006\000\000\0045\022\158\022\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\016\016\000\000\007\145\007\145\000\000\000\000\021\022.\003\003\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\016\016\000\000\016\016\000\000\003\018\154\000\000\000\000\000\000\000\000\000\000\004\001\003\000\000\000\000\000\000\003\003\003\007\145\003\000\000\r\000\000\003\003\003\000\000\004\001\004\001\000\000\003\003\003\004\001\004\001\000\000\004\001\004\001\016\004\001\000\000\000\000\000\000\000\000\004\001\004\001\004\001\004\001\004\001\007\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\145\004\001\004\001\000\000\007\145\000\000\000\000\000\000\007\145\000\000\004\001\004\001\016\000\000\000\000\000\000\000\000\004\001\"\007\145\016\000\000\000\000\000\000\016\000\000\021\004\001\004\001\004\001\004\001\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\003\004\001\000\000\000\000\000\000\004\001\004\001\004\001\000\000\004\001\000\000\000\000\000\000\004\001\004\001\004\001\000\000\003\003\000\000\004\001\004\001\004\001\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\016\016\000\000\000\000\000\000\000\000\000\000\021\003\003\003\003\000\000\000\000\000\000\003\003\000\0004n\000\000\000\0002\000\000\016\016\000\000\016\016\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\0034v\003\003\016\003\000\000\000\000\000\000\000\000\003\003\003\022&\003\0024z\000\0004~\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\016\000\000\000\000\000\0002\003\"\000\000\016\000\000\000\000\000\000\016\000\000\021\022.\003\003\003\004\030\000\000\000\000\003\003\000\000\000\0002\016\000\000\000\000\000\000\024\000\0003\006\024\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\024\000\000\000\000\003\003\003\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\002\024\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\rU\rU\000\000\024\000\000\000\000\000\000\021\022.\003\003\003\000\000\000\000\000\000\003\003\000\000\004\030\000\000\000\000\000\000\000\000\rU\rU\025\002\rU\rU\000\000\003\000\000\000\000#\158\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\000\000\003\003\rU\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\004\157\022^\022v\rU\000\000\000\000\000\000\000\000\003\000\000\000\000\rU\000\000\000\000\000\000\rU\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\022\134\000\000.~\000\000\rU.\142\000\0004n\000\000\000\0002\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\0004r\000\000\003\022\150\003\000\000\021\022\006\000\000\003\022\158\022\003\003.\154\003\003\000\000\0034v\000\000\000\000\000\000\003\003\003\022&\003\002.\000\000\000\000\000\000\0024z\000\0004\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000.\003\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\021\022.\003\003\003\004\030\000\0004\003\003\004\030\000\000.\000\000\000\000\000\000\000\0002\000\0006\000\000\000\000\003\000\0003\006\000\000\000\000\tA\000\000\003\003\tA\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\0156\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\022&\003\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000.\146\000\000\tA\000\000\000\000\021\022.\003\003\003\tA\000\000\tA\003\003\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\003\000\000\tA\000\000\000\000\000\000\000\000\004\005\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\004\005\004\005\000\000\004\005\004\005\000\000\004\005\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\004\005\000\000\007\007\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\004\005\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\000\000\007\007\000\000\007\007\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\003\004\005\000\000\000\000\000\000\004\005\004\005\004\005\000\000\004\005\000\000\000\000\000\000\004\005\004\005\004\005\000\000\021\022\006\000\000\004\005\004\005\004\005\003\003\000\000\003\003\007\003\000\000\000\000\000\000\000\000\003\003\003\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\007\000\000\000\000\000\000\000\000\003\000\000\000\000\007\000\000\000\000\000\000\007\000\000\021\022.\003\003\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\007\"r\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\007\007\000\000\007\007\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\000\000\003\003\007\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\003\007\000\000\000\000\000\000\000\000\003\000\000\000\000\007\000\000\000\000\000\000\007\000\000\021\022.\022f\022n\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\tA\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\0156\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000.\000\000\tA\000\000\000\000\021\022.\022f\022n\003\tA\000\000\000\000\003\003\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\tA\000\000\004\t\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\004\t\004\t\0156\004\t\004\t\000\000\004\t\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\004\t\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\004\t\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000.\000\000\tA\000\000\000\000\021\022.\022f\022n\004\t\tA\000\000\000\000\004\t\004\t\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\004\t\000\000\000\000\000\000\000\000\tA\000\000\003\004\t\000\000\000\000\000\000\004\t\004\t\004\t\000\000\004\t\000\000\000\000\000\000\004\t\004\t\004\t\000\000\021\022\006\000\000\004\t\004\t\004\t\003\003\0156\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000.\000\000\tA\000\000\000\000\021\022.\022f\022n\003\tA\000\000\000\000\003\003\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\tA\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\003\003\003\003\0156\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000.\000\000\tA\000\000\000\000\021\022.\022f\022n\022~\tA\000\000\000\000\003\022\134\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\022\150\003\000\000\021\022\006\000\000\003\022\158\022\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\022\158\022\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\021\022\006\000\000\003\022\158\022\003\003\000\000\003\003\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\022\016\r\003\000\000\000\000\000\000\003\022\150\003\000\000\000\000\000\000\000\000\003\022\158\022\000\000\000\000\016\r\016\r\006U\007\r\134\000\000\016\r\000\000\000\000\016\r\016\r\000\000\016\r\000\000\000\000\000\000\r\142\016\r\016\r\016\r\016\r\016\r\000\000\000\000\000\000\006U\006U\000\000\006U\006U\000\000\016\r\016\r\r\146\000\000\000\000\000\000\000\000\000\000\000\000\016\r\016\r\000\000\000\000\003\026\000\000\000\000\000\000\023\003\003\000\000\026.\000\000\000\000\000\000\016\r\016\r\016\r\016\r\016\r\000\000\000\000\000\000\000\000\016\r\006U\000\000\000\000\000\000\000\000\002\158\002\000\000\000\0002\000\000\000\000\016\r\000\000\024&\000\000\000\000\000\000\023\007\021\003\000\000\000\000\000\000\000\000\000\000\016\r\005\000\000\000\0002\006U\000\000\016\r\000\000\000\000\021\022\006\000\000\006U\016\r\016\r\007\021\007\021\000\000\007\021\007\021\000\000\022\0142\006^\000\000\000\000\022\030\0226\022>\022&\022F\006U\003\n\006b\006\134\000\000\0022\000\000\006\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\007\021\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\0004Z\007\021\022\134\004\030\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\007\021\000\0003\006\000\000\000\000\000\000\000\000\000\000\007\021\000\000\000\000\000\000\007\021\007\021\022\011\007\021\000\000\000\000\000\000\007\021\022\150\007\021\000\000\000\000\000\000\000\000\007\021\022\158\022\000\000\000\000\011\011\000\000\011\011\000\000\011\000\000\000\000\011\011\000\000\011\000\000\000\000\000\000\011\011\011\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\011\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!:\000\000\011\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\011\000\000\011\011\000\000\011\000\000\000\000\011\011\000\000\011\000\000\000\000\000\000\011\011\011\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\011\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!R\000\000\011\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\011\000\000\011\011\000\000\011\000\000\000\000\011\011\000\000\011\000\000\000\000\000\000\011\011\011\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\011\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!f\000\000\011\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\011\011\006\157\011\011\000\000\011\000\000\000\000\011\011\000\000\011\000\000\000\000\000\000\011\011\011\011\011\011\000\000\000\000\000\000\006\157\006\157\000\000\006\157\006\157\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\000\000\011\011\000\000\000\000\011\004\029\000\000\000\000\011\011\011\000\000\003\000\000\000\000\000\000\011\011\011\011\011\000\000\021\022\006\000\000\011\006\157\000\000\004\029\004\029\000\000\004\029\004\029\000\000\022\014\000\000!r\000\000\011\022\030\0226\022>\022&\022F\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\022N\022V\000\000\000\000\006\157\000\000\011\000\000\000\000\022^\022v\000\000\006\157\011\011\000\000\004\029\000\000\000\000\000\000\006\157\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\006\157\006\157\000\000\004\029\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\000\000\000\000\000\000\000\000\000\000\000\000\004!\004\029\000\000\000\000\000\000\004\029\004\029\022\000\000\004\029\000\000\000\000\000\000\004\029\022\150\004\029\000\000\021\022\006\000\000\004\029\022\158\022\004!\004!\000\000\004!\004!\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\004!\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\004%\004!\000\000\000\000\000\000\004!\004!\022\000\000\004!\000\000\000\000\000\000\004!\022\150\004!\000\000\021\022\006\000\000\004!\022\158\022\004%\004%\000\000\004%\004%\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\004%\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004%\000\000\000\000\000\000\004%\004%\022\000\000\004%\000\000\000\000\000\000\004%\022\150\004%\000\000\021\022\006\000\000\004%\022\158\022\004\025\004\025\000\000\004\025\004\025\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\004\025\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\004\025\004\025\022\000\000\004\025\000\000\004\029\000\000\004\025\022\150\004\025\000\000\020\020\000\000\004\025\022\158\022\004\029\004\029\000\000\004\029\004\029\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\004\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\000\000\000\000\004\029\000\000\000\000\004\029\000\000\000\000\000\000\000\000\004\029\000\000\000\000\000\000\004\029\004\029\021\150\000\000\004\029\000\000\004!\000\000\000\000\021~\004\029\000\000\020\020\000\000\004\029\021\134\021\142\004!\004!\000\000\004!\004!\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\004!\000\000\000\000\004!\000\000\000\000\000\000\000\000\004!\000\000\000\000\000\000\004!\004!\021\150\000\000\004!\000\000\004%\000\000\000\000\021~\004!\000\000\020\020\000\000\004!\021\134\021\142\004%\004%\000\000\004%\004%\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\004%\004%\021\150\000\000\004%\000\000\004\025\000\000\000\000\021~\004%\000\000\020\020\000\000\004%\021\134\021\142\004\025\004\025\000\000\004\025\004\025\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\004\025\000\000\000\000\004\025\000\000\000\000\000\000\003\137\004\025\000\000\000\000\000\000\004\025\004\025\021\150\000\000\004\025\000\000\000\000\000\000\000\000\021~\004\025\000\000\021\022\006\000\000\004\025\021\134\021\142\003\137\003\137\000\000\003\137\003\137\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\137\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\137\000\000\000\000\000\000\003\137\003\137\022\000\000\003\137\000\000\000\000\000\000\003\137\022\150\003\137\000\000\021\022\006\000\000\003\137\022\158\022\003\141\003\141\000\000\003\141\003\141\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\141\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\000\003\141\003\141\022\000\000\003\141\000\000\003\137\000\000\003\141\022\150\003\141\000\000\020\020\000\000\003\141\022\158\022\003\137\003\137\000\000\003\137\003\137\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\003\137\000\000\000\000\003\137\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\003\137\003\137\021\150\000\000\003\137\000\000\003\141\000\000\000\000\021~\003\137\000\000\020\020\000\000\003\137\021\134\021\142\003\141\003\141\000\000\003\141\003\141\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\000\003\141\003\141\021\150\000\000\003\141\000\000\003\021\000\000\000\000\021~\003\141\000\000\020\020\000\000\003\141\021\134\021\142\003\021\003\021\000\000\003\021\003\021\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\021\000\000\000\000\003\021\000\000\000\000\003\021\000\000\000\000\000\000\000\000\003\021\000\000\000\000\000\000\003\021\003\021\021\150\000\000\003\021\000\000\007\021\000\000\000\000\021~\003\021\000\000\020\020\000\000\003\021\021\134\021\142\007\021\007\021\000\000\007\021\007\021\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\007\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\021\000\000\000\000\007\021\000\000\000\000\007\021\000\000\000\000\000\000\000\000\007\021\000\000\000\000\000\000\007\021\007\021\021\150\000\000\007\021\000\000\003\145\000\000\000\000\021~\007\021\000\000\003\145\003\145\000\000\007\021\021\134\021\142\003\145\003\145\000\000\003\145\003\145\000\000\003\145\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\000\000\000\000\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\000\000\003\145\000\000\000\000\003\145\000\000\000\000\000\000\000\000\003\145\000\000\000\000\000\000\003\145\003\145\003\145\000\000\003\145\000\000\003\000\000\000\000\003\145,\130\000\000\020\020\000\000\003\145\003\145\003\145\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\003\021\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\000\000\021~\003\000\000\021\022\006\000\000\003\021\134\021\142\003\021\003\021\000\000\003\021\003\021\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\003\021\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\021\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\021\000\000\000\000\000\000\003\021\003\021\022\000\000\003\021\000\000\000\000\000\000\003\021\022\150\003\021\000\000\003\145\003\145\000\000\003\021\022\158\022\003\145\003\145\000\000\003\145\003\145\000\000\003\145\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\000\026\003\145\003\145\000\000\000\000\000\"\000\000\000V\000&\000\000\000\000\000\000\000\130\000\000\000*\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\000\000\000\000\003\145\003\145\003\145\000.\003\145\000\000\000\001\002\003\145\003\145\0246\000\000\000\000\000\000\0002\003\145\003\145\003\145\000\000\001\006\001\n\001\014\003\002\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\003\n\003\026\000\000\003N\002\003R\003\003\007v\000\000\007z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\004\004\000\000\007\012\007~\007\130\000\000\000\000\rn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\004\030\000\000\004\004\000\000\004\004\000\000\000\000\000\000\007\134\000\000-\026\021\022\006\rz\007\138\r~\000\000\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\002\018\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\004\000\000\000\000\003\022\134\000\000\0079\000\000\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\004\000\000\003\003\003\000\000\003\000\000\004)\000\000\003\022\150\003\000\000\020\020\000\000\003\022\158\022\004)\004)\000\000\004)\004)\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\004)\000\000\000\000\004)\000\000\000\000\000\000\004)\004)\000\000\000\000\000\000\004)\004)\021\150\000\000\004)\000\000\000\000\000\000\000\000\021~\004)\000\000\021\022\006\000\000\004)\021\134\021\142\004)\004)\000\000\004)\004)\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\004)\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\004)\004)\022\016\157\004)\000\000\000\000\000\000\004)\022\150\004)\000\000\000\000\000\000\000\000\004)\022\158\022\000\000\000\000\016\157\016\157\007\145\007\r\134\000\000\016\157\000\000\000\000\016\157\016\157\000\000\016\157\000\000\000\000\000\000\r\142\016\157\016\157\016\157\016\157\016\157\000\000\000\000\000\000\007\145\007\145\000\000\007\145\007\145\000\000\016\157\016\157\r\146\000\000\000\000\000\000\000\000\000\000\000\000\016\157\016\157\000\000\000\000\003\026\000\000\000\000\000\000\023\003\003\000\000!\150\016\025\000\000\000\000\016\157\016\157\016\157\016\157\016\157\000\000\000\000\000\000\000\000\016\157\007\145\000\000\000\000\024\022\016\025\016\025\000\000\007\r\134\000\000\016\025\000\000\016\157\016\025\016\025\000\000\016\025\000\000\023\000\000\r\142\016\025\016\025\016\025\016\025\016\025\016\157\000\000\000\000\000\000\000\000\007\145\000\000\016\157\000\000\016\025\016\025\r\146\000\000\007\145\016\157\016\157\000\000\007\145\016\025\016\025\000\000\007\145\003\026\000\000\000\000\000\000\023\003\003\000\000\000\000\016\153\007\145\000\000\016\025\016\025\016\025\016\025\016\025\000\000\000\000\000\000\000\000\016\025\000\000\000\000\000\000\000\000\016\153\016\153\000\000\007\r\134\000\000\016\153\000\000\016\025\016\153\016\153\000\000\016\153\000\000\023\000\000\r\142\016\153\016\153\016\153\016\153\016\153\016\025\000\000\000\000\000\000\000\000\000\000\000\000\016\025\000\000\016\153\016\153\r\146\000\000\000\000\016\025\016\025\000\000\000\000\016\153\016\153\000\000\000\000\003\026\000\000\000\000\000\000\023\003\003\000\000\000\000\015\000\000\000\000\016\153\016\153\016\153\016\153\016\153\000\000\000\000\000\000\000\000\016\153\000\000\000\000\000\000\000\000\015\015\000\000\007\r\134\000\000\015\000\000\016\153\015\015\000\000\015\000\000\023\000\000\r\142\015\015\015\015\015\016\153\000\000\000\000\000\000\000\000\000\000\000\000\016\153\000\000\015\015\r\146\000\000\000\000\016\153\016\153\000\000\000\000\015\015\000\000\000\000\003\026\004\000\000\000\000!.\003\003\000\000\002a\000\000\000\000\000\000\015\015\015\015\015\000\000\000\000\000\000\000\000\015\000\000\004\004\002a\002a\004\002a\002a\000\000\002a\000\000\000\000\015\002a\000\000\002a\000\000\000\000!B\002a\002a\002a\002a\002a\002a\000\000\015\000\000\002\018\000\000\000\000\000\000\000\000\015\002a\002a\002a\000\000\000\000\000\000\015\015\004\002a\002a\004\000\000\002a\000\000\000\000\000\000\002a\002a\002a\000\000\000\000\0079\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\004\004\000\000\004\000\000\000\000\000\000\000\000\0079\0079\000\000\004\0079\000\000\000\000\004\004\002a\000\000\000\000\000\000\000\000\000\000\tY\016\021\002a\000\000.b\000\000\000\000\004\000\000\002a\000\000\000\000\002\018\000\000\000\000\000\000\002a\002a\016\021\016\021\000\000\007\r\134\000\000\016\021\000\000\0079\016\021\016\021\0079\016\021\000\000\000\000\000\000\r\142\016\021\016\021\016\021\016\021\016\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\021\016\021\r\146\000\000\000\000\000\000\0079\000\000\0079\016\021\016\021\000\000\000\000\003\026\0079\000\000\0079\023\003\003\0079\000\000\000\000\000\000\000\000\016\021\016\021\016\021\016\021\016\021\000\000\000\000\000\000\000\000\016\021\0079\000\000\000\000\016\r\016\r\000\000\012\012\000\000\016\r\000\000\000\000\016\021\000\000\000\000\016\r\000\000\000\000\023\012\016\r\016\r\016\r\016\r\016\r\000\000\016\021\000\000\000\000\000\000\000\000\000\000\000\000\016\021\016\r\016\r\012\000\000\000\000\000\000\016\021\016\021\000\000\016\r\016\r\000\000\000\000\002\000\000\000\000\000\000\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\016\r\016\r\016\r\016\r\016\r\000\000\000\000\000\000\000\000\016\r\000\000\000\000\000\000\011\011\000\000\011\011\000\000\011\000\000\000\000\016\r\000\0007\011\000\000\000\000\030\134\011\011\011\011\011\011\000\000\016\r\000\000\000\000\000\000\000\000\000\000\000\000\016\r\011\011\011\000\000\000\000\000\000\016\r\016\r\000\000\011\011\000\000\000\000\011\000\000\000\000\000\000\011\011\011\000\000\000\000\000\000\000\000\000\000\011\011\011\011\011\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\016\021\016\021\000\000\012\012\000\000\016\0219\000\000\011\000\000\000\000\016\021\000\000\000\000\011\012\016\021\016\021\016\021\016\021\016\021\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\011\016\021\016\021\012\000\000\000\000\000\000\011\011\000\000\016\021\016\021\000\000\000\000\002\000\000\000\000\000\000\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\016\021\016\021\016\021\016\021\016\021\000\000\000\000\000\000\000\000\016\021\000\000\000\000\000\000\016\157\016\157\000\000\012\012\000\000\016\157\000\000\000\000\016\021\000\000\000\000\016\157\000\000\000\000\030\134\012\016\157\016\157\016\157\016\157\016\157\000\000\016\021\000\000\000\000\000\000\000\000\000\000\000\000\016\021\016\157\016\157\012\000\000\000\000\000\000\016\021\016\021\000\000\016\157\016\157\000\000\000\000\002\000\000\000\000\000\000\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\016\157\016\157\016\157\016\157\016\157\000\000\000\000\000\000\000\000\016\157\000\000\000\000\000\000\016\025\016\025\000\000\012\012\000\000\016\025\000\000\000\000\016\157\000\000\000\000\016\025\000\000\000\000\030\134\012\016\025\016\025\016\025\016\025\016\025\000\000\016\157\000\000\000\000\000\000\000\000\000\000\000\000\016\157\016\025\016\025\012\000\000\000\000\000\000\016\157\016\157\000\000\016\025\016\025\000\000\000\000\002\000\000\000\000\000\000\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\016\025\016\025\016\025\016\025\016\025\000\000\000\000\000\000\000\000\016\025\000\000\000\000\000\000\016\153\016\153\000\000\012\012\000\000\016\153\000\000\000\000\016\025\000\000\000\000\016\153\000\000\000\000\030\134\012\016\153\016\153\016\153\016\153\016\153\000\000\016\025\000\000\000\000\000\000\000\000\000\000\000\000\016\025\016\153\016\153\012\000\000\000\000\000\000\016\025\016\025\000\000\016\153\016\153\000\000\000\000\002\000\000\000\000\000\000\rj\003B\000\022\000\000\000\000\000\000\000\000\000\000\016\153\016\153\016\153\016\153\016\153\000\000\000\000\000\000\000\000\016\153\000\000\000\000\000\000\015\015\000\000\012\012\000\000\015\002\015\016\153\000\000\015\015\000\000\000\000\030\134\012\015\015\015\015\015\002\016\153\000\000\000\000\000\000\000\000\000\000\002\016\153\015\015\012\000\000\000\000\000\000\016\153\016\153\000\000\015\015\000\000\000\000\002\000\000\000\000\000\0009\003B\000\022\016\002\002\000\000\000\000\000\000\015\015\015\015\015\001\026\002\002\000\000\015\016\014\r\157\003\000\000\007\0006\000\000\000\000\000Z\000\000\000\000\000\000\015\000\000\000^\002\002\014\028.9\b\026\000\000\r\157\r\157\016\026\r\157\000\000\015\000\000\007\000\000\002\000\000\000\000\015\b\"\000\000\000\000\004\n\000\000\000\000\015\015\000\000\000\000\000\000\016\"\000\000\b.\nR\000\134\000\000\007\016*\000\000\007\007\000\000\000\000\001\026\002\002\t\158\000\000\n\026\000\000\n>\000\000\000\000\003Z\001\026\002\002\000\000\002\003\000\000\003\r\157!\150\000\000\000\000\000\000\000\000\000\000\000\000\003^\003b\000\000\000\000\000\000\r\157\r\157\007\r\157\000\000\024\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\r\000\000\r\157\000\000\000\000\r\157\r\157\000\000\003f\004\030\r\157\000\000\r\157\000\000\nj\000\000\r\157\021\022\006\000\000\007\000\000\000\000\003\r\000\000\000\000\003\r\003\r\007\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\r\153\000\000\000\000\000\000\007\022N\022V\000\"\000\000\000\000\000&\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\000\000\000\000\003\r\000\000\r\153\r\153\000\000\r\153\r\153\000\000\000\000\021\022.\022f\022n\022~\r\157\000\000\000\000\000\000\022\134\000\000\b>\000\"\000\000\000\000\000&\000\000\000\000\000\000\000\000\t\154\000*\003\r\000\000\000\000\000\000\bB\000\000\r\157\r\157\003\r\r\157\r\157\011\146\000\000\011\158\022\011\000\000\000\000\000\000\b\000\000\022\150\002\002\014\000\000\000\000\000\000\003\r\022\158\022\000\000\000\000\b\tF\000\000\000\007\130\002\000\000\000\000\000\000\000\000\006u\003\n\002\000\000\b\000\000\b\000\000\t\002\000\000\000\000\007z\000\000\r\153\000\000\000\000\r\153\r\153\000\000\000\000\000\000\r\153\000\000\r\153\002\002\000\000\r\153\007~\007\130\000\000\000\000\000\000\000\000\001\026\002\002\000\000\002\003\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\r\157\020\020\r\157\r\157\000\000\007\134\003\r\r\157\000\000\r\157\003\r\tV\020\r\157\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\004\030\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021F\021^\005&\000\000\005*\015\000\000\003\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\015\015\000\000\021n\000\000\000\000\015\000\000\000\000\015\015\000\000\015\t\141\000\000\000\000\003\r\015\015\015\015\015\000\000\000\000\003\r\000\000\000\000\000\000\021\000\000\021\150\015\015\000\000\000\000\000\000\000\000\021~\003\r\000\000\015\015\000\000\003\r\021\134\021\142\016\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\015\015\015\015\000\000\000\000\021\022\006\015\000\000\000\000\000\000\016\149\000\000\000\000\016\149\016\149\000\000\022\014\000\000\000\000\015\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\022N\022V\000\000\000\000\000\000\015\0246\000\000\000\000\022^\022v\000\000\015\015\016\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016\017\000\000\000\000\016\017\016\017\000\000\016\017\000\000\000\000\000\000\016\149\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022N\022V\000\000\000\000\000\000\000\000\022\150\000\000\000\000\022^\022v\000\000\000\000\022\158\022\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\015\000\000\000\000\015\015\000\000\022\014\000\000\000\000\016\017\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\017\000\000\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\015\000\000\000\000\015\015\000\000\022\014\000\000\000\000\000\000\015\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022N\022V\000\000\000\000\000\000\000\000\022\150\000\000\000\000\022^\022v\000\000\000\000\022\158\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\000\000\000\000\022\134\007\0006\007\000\000\000Z\000\000\b\006\000\000\000\000\000\000\000^\000\000\015\000\000\000\000\b\026\000\000\000\000\006\133\000\000\000\000\000\000\015\000\000\000\000\000\000\022\000\000\000\000\000\000\027\014\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\000\000\027\018\b:\000\134\000\000\000\000\000\000\000\000\000\000\014\000\000\000\000\001\026\000\000\000\000\t\158\002\n\026\000\000\n>\nN\r\014\003Z\000\000\000\000\000\000 F N\000\000\000\000\000\000\000\000\014\000\000\000\000\014\014\000\000 V\003^\003b\000\000\n^ f n v ~ \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\030\000\000 \142 \150\000\000\000\000\000\000\000\000\000\000\000\000\003f \158 \000\000\000\000\000\000\nb\016I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016I\016I \000\000\000\000\000\000\016I\000\000\000\000\016I\016I\000\000\016I\000\000\000\000\014\000\000\016I\016I\016I\016I\016I\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016I\016I\000\000\000\000\000\000 \000\000\000\000\000\000\016I\016I\000\000 \0161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\016I\016I\016I\016I\000\000\0161\0161\000\000\016I\000\000\000\000\0161\000\000\000\000\0161\0161\000\000\0161\000\000\000\000\000\000\016I\0161\0161\0161\0161\0161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016I\0161\0161\000\000\000\000\000\000\000\000\016I\000\000\000\000\0161\0161\000\000\000\000\016I\016I\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\0161\0161\0161\0161\000\000\000\000\021\022\006\0161\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\022\014\000\000\000\000\0161\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0161\000\000\022N\022V\000\000\000\000\000\000\0161\000\000\000\000\000\000\022^\022v\000\000\0161\0161\016i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016i\000\000\000\000\016i\016i\000\000\016i\000\000\000\000\000\000\016\016i\016i\016i\022&\016i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\016i\016i\000\000\000\000\000\000\000\000\022\150\000\000\000\000\016i\016i\000\000\000\000\022\158\022\016=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\016i\016i\016i\000\000\000\000\021\022\006\016i\000\000\000\000\000\000\016=\000\000\000\000\016=\016=\000\000\016=\000\000\000\000\016i\000\000\016=\016=\016=\022&\016=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016i\000\000\016=\016=\000\000\000\000\000\000\016i\000\000\000\000\000\000\016=\016=\000\000\016i\016i\0169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\016=\016=\016=\000\000\021\022\006\000\000\016=\000\000\000\000\0169\000\000\000\000\0169\0169\000\000\0169\000\000\000\000\000\000\016=\0169\0169\0169\022&\0169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016=\0169\0169\000\000\000\000\000\000\000\000\016=\000\000\000\000\0169\0169\000\000\000\000\016=\016=\016m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\0169\0169\0169\000\000\000\000\016m\016m\0169\000\000\000\000\000\000\016m\000\000\000\000\016m\016m\000\000\016m\000\000\000\000\0169\000\000\016m\016m\016m\016m\016m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0169\000\000\016m\016m\000\000\000\000\000\000\0169\000\000\000\000\000\000\016m\016m\000\000\0169\0169\016U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\016m\016m\016m\016m\000\000\021\022\006\000\000\016m\000\000\000\000\016U\000\000\000\000\016U\016U\000\000\016U\000\000\000\000\000\000\016m\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016m\022N\022V\000\000\000\000\000\000\000\000\016m\000\000\000\000\022^\022v\000\000\000\000\016m\016m\016E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016E\000\000\000\000\016E\016E\000\000\016E\000\000\000\000\016U\000\000\016E\016E\016E\022&\016E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016U\000\000\016E\016E\000\000\000\000\000\000\022\150\000\000\000\000\000\000\016E\016E\000\000\022\158\022\016A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\016E\016E\016E\000\000\021\022\006\000\000\016E\000\000\000\000\016A\000\000\000\000\016A\016A\000\000\016A\000\000\000\000\000\000\016E\016A\016A\016A\022&\016A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016E\016A\016A\000\000\000\000\000\000\000\000\016E\000\000\000\000\016A\016A\000\000\000\000\016E\016E\016q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\016A\016A\016A\000\000\000\000\021\022\006\016A\000\000\000\000\000\000\016q\000\000\000\000\016q\016q\000\000\016q\000\000\000\000\016A\000\000\022\030\0226\022>\022&\016q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016A\000\000\022N\022V\000\000\000\000\000\000\016A\000\000\000\000\000\000\016q\016q\000\000\016A\016A\016M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016q\000\000\021\022\006\000\000\016q\000\000\000\000\016M\000\000\000\000\016M\016M\000\000\016M\000\000\000\000\000\000\016q\022\030\0226\022>\022&\016M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016q\022N\022V\000\000\000\000\000\000\000\000\016q\000\000\000\000\022^\016M\000\000\000\000\016q\016q\0165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016M\000\000\000\000\0165\0165\016M\000\000\000\000\000\000\0165\000\000\000\000\0165\0165\000\000\0165\000\000\000\000\016M\000\000\0165\0165\0165\0165\0165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016M\000\000\0165\0165\000\000\000\000\000\000\016M\000\000\000\000\000\000\0165\0165\000\000\016M\016M\016-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\0165\0165\0165\0165\000\000\016-\016-\000\000\0165\000\000\000\000\016-\000\000\000\000\016-\016-\000\000\016-\000\000\000\000\000\000\0165\016-\016-\016-\016-\016-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0165\016-\016-\000\000\000\000\000\000\000\000\0165\000\000\000\000\016-\016-\000\000\000\000\0165\0165\016)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\016-\016-\016-\016-\000\000\000\000\021\022\006\016-\000\000\000\000\000\000\016)\000\000\000\000\016)\016)\000\000\016)\000\000\000\000\016-\000\000\016)\016)\016)\022&\016)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016-\000\000\016)\016)\000\000\000\000\000\000\016-\000\000\000\000\000\000\016)\016)\000\000\016-\016-\016%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\016)\016)\016)\000\000\021\022\006\000\000\016)\000\000\000\000\016%\000\000\000\000\016%\016%\000\000\016%\000\000\000\000\000\000\016)\022\030\0226\022>\022&\016%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016)\022N\022V\000\000\000\000\000\000\000\000\016)\000\000\000\000\016%\016%\000\000\000\000\016)\016)\016!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016%\000\000\000\000\021\022\006\016%\000\000\000\000\000\000\016!\000\000\000\000\016!\016!\000\000\016!\000\000\000\000\016%\000\000\022\030\0226\022>\022&\016!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016%\000\000\022N\022V\000\000\000\000\000\000\016%\000\000\000\000\000\000\022^\016!\000\000\016%\016%\016u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016!\000\000\021\022\006\000\000\016!\000\000\000\000\016u\000\000\000\000\016u\016u\000\000\016u\000\000\000\000\000\000\016!\022\030\0226\022>\022&\016u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016!\022N\022V\000\000\000\000\000\000\000\000\016!\000\000\000\000\022^\016u\000\000\000\000\016!\016!\016Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016u\000\000\000\000\021\022\006\016u\000\000\000\000\000\000\016Q\000\000\000\000\016Q\016Q\000\000\016Q\000\000\000\000\016u\000\000\022\030\0226\022>\022&\016Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016u\000\000\022N\022V\000\000\000\000\000\000\016u\000\000\000\000\000\000\022^\016Q\000\000\016u\016u\016e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\016Q\000\000\021\022\006\000\000\016Q\000\000\000\000\016e\000\000\000\000\016e\016e\000\000\022\014\000\000\000\000\000\000\016Q\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016Q\022N\022V\000\000\000\000\000\000\000\000\016Q\000\000\000\000\022^\022v\000\000\000\000\016Q\016Q\016Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016Y\000\000\000\000\016Y\016Y\000\000\016Y\000\000\000\000\016e\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\016]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016]\000\000\000\000\016]\016]\000\000\016]\000\000\000\000\000\000\016Y\022\030\0226\022>\022&\016]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016Y\022N\022V\000\000\000\000\000\000\000\000\022\150\000\000\000\000\022^\022v\000\000\000\000\022\158\022\016a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016a\000\000\000\000\016a\016a\000\000\016a\000\000\000\000\016]\000\000\022\030\0226\022>\022&\016a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016]\000\000\022N\022V\000\000\000\000\000\000\016]\000\000\000\000\000\000\022^\022v\000\000\022\158\022\016\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016\137\000\000\000\000\016\137\016\137\000\000\022\014\000\000\000\000\000\000\016a\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016a\022N\022V\000\000\000\000\000\000\000\000\016a\000\000\000\000\022^\022v\000\000\000\000\022\158\022\016\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016\141\000\000\000\000\016\141\016\141\000\000\022\014\000\000\000\000\016\137\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\016\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016\145\000\000\000\000\016\145\016\145\000\000\022\014\000\000\000\000\000\000\016\141\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022N\022V\000\000\000\000\000\000\000\000\022\150\000\000\000\000\022^\022v\000\000\000\000\022\158\022\016\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016\133\000\000\000\000\016\133\016\133\000\000\022\014\000\000\000\000\016\145\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000 F N\000\000\022\134\000\000\000\000\014\000\000\000\000\014\014\000\000 V\000\000\000\000\000\000\016\133 f n v ~ \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022 \142 \150\000\000\000\000\000\000\000\000\022\150\000\000\000\000 \158 \000\000\000\000\022\158\022\000\000\000\000\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\0006\007\000\000\000Z\000\000\b\006\000\000\000\000\000\000\000^\000\000\014\000\000\000\000\b\026\000\000\000\000\006\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\b\"\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000 \000\000\b.\b:\000\134\000\000\000\000\000\000\000\000\000\000\023\000\000\000\000\001\026\000\000\000\000\t\158\002\n\026\000\000\n>\nN\r\014\003Z\000\000\000\000\000\000\021\022\006\000\000\000\000\000\000\000\000\000\000\007e\002\002\014\029Z\000\000\022\014\003^\003b\000\000\n^\022\030\0226\022>\022&\022F\000\000\002\000\000\000\000\000\000\000\000\000\000\004\030\004\n\022N\022V\000\000\000\000\000\000\000\000\000\000\000\000\003f\022^\022v\000\000\000\000\000\000\nb\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\021\022.\022f\022n\022~\000\000\001\026\002\002\022\134\002\003\000\000\003\000\000\000\000\0006\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\018\018\000\000\000\000\000\000\000\000\023\022\000\000\023\000\000\000\000\000\012\022\150\000\000\000\000\000\000\000\000\000\000\004\030\022\158\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\006\005\006\005\000\138\002\000\000\000\000\000\000\001\026\002\000\000\002\000\000(\n\003B\000\022\024v\000\000\003Z\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\016\007e\000\000\n%\016\000\000\020\003^\003b\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000\000\000\000\000\003f\021F\021^\000\000\000\000\000\000\003\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n5\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\014\031v\000\0006\151\000\000\000\000\024z\000\000\021\022\006\000\000\000\000\000\000\000\000\002\007e(R\021\150\000\000(V\022\014\004\n\000\000\000\000\021~\022\030\0226\022>\022&\022F\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\002\002\000\000\000\000\000\000\022^\022v\000\000\000\000\000\000\001\026\002\002\000\000\002\003\000\000\003\000\000\000\000\000\000\021\022.\022f\022n\022~\t%\000\000\000\000\000\000\022\134\000\000\b>\000\"\000\000\000\000\000&\000\000\000\000\000\000\000\000\000\000\000*\000\000\000\000\000\000\000\000\bB\000\000\000\000\000\000\000\000\t%\004\030\000\000\000\0005\026\022\006]5\"\000\000\000\000\b\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\000\000\000\000\b\b\000\000\000\000\000\000\000\006]\000\000\005a\006]\006]\003\n\000\000\000\000\b\002\b\006]\t\002\tB\000\000\007z\000\000\000\000\000\000\021\022\006\000\000\000\000\000\000\000\000\000\000\000\000\019J\000\000\005a\000\000\022\014\007~\007\130\000\000\tJ\022\030\0226\022>\022&\022F\006]\000\000\000\000\n2\000\000\000\000\000\000\004\030\000\000\022N\022V\000\000\000\000\000\000\000\000\nI\000\000\007\134\022^\022v\000\000\000\000\000\000\tN\000\000\000\000\000\000\000\000\000\000\006]\000\000\006]\021\022\006\021\022.\022f\022n\022~\006]\000\000\006]\nI\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\006]\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\005a\000\000\022\000\000\022^\022v\000\000\000\000\000\000\022\150\016\000\000\000\000\000\000\000\000\000\000\022\158\022\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\016\000\000\000\000\000\000\016\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\005a\000\000\022\000\000\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\021\022\006\000\000\022\134\000\000\000\000\016\000\000\000\000\000\000\016\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022N\022V\000\000\000\000\000\000\000\000\022\150\000\000\000\000\022^\022v\000\000\000\000\022\158\022\nU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nU\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\002\002\014\000\000\000\000\000\000\022\002\022N\022V\000\000\000\000\000\000\022\150\000\000\000\000\002\022^\022v\015F\022\158\022\000\000\002\000\000\000\000\000\000\007\n=\n=\000\000\000\000\n=\021\022.\022f\022n\022~\n=\000\000\000\000\015N\022\134\n=\000\000\002\002\022\000\000\000\000\007\007\000\000\007\007\001\026\002\002\n=\002\003\t-\003\000\000\000\000\000\000\000\000\t]\018V\022\000\000\n=\n=\n=\000\000\000\000\022\150!\150\000\000\t]\000\000\000\000\n=\022\158\022\n=\n=\n=\000\000\n=\n=\007\n=\000\000\024\022\000\000\021\022\006\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t]\000\000\022\014\n=\n=\000\000\n=\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\007\000\000\000\000\n=\000\000\022N\022V\000\000\007\000\000\000\000\004\137\007\n=\022^\022v\007\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\021\022\006\021\022.\022f\022n\022~\000\000\000\000\000\000\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\t]\000\000\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\000\000\000\000\021\022.\022f\022n\022~\000\000\015\015\004\137\022\134\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\015\015\015\015\015\000\000\000\000\000\000\000\000\000\000\000\000\004\137\000\000\022\015\015\000\000\000\000\000\000\000\000\022\150\000\000\000\000\015\015\000\000\000\000\022\158\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\015\015\015\015\000\000\000\000\000\000\000\000\015\000\000\000\000\bJ\000\000\bN\t\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\b\t\000\000\000\000\000\000\000\000\000\000\000\000\015\003\158\003\000\000\000\000\000\000\023\015,\130\000\000\000\000\000\000\000\000\000\000\015\015\000\000\007\007\007\007\007\000\000\021\022\006\000\000\007\000\000\000\000\000\000\000\000\000\000\023\000\000\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\022N\022V\000\000\000\000\000\000\000\000\t\000\000\t\022^\022v\000\000\000\000\t\t\023\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\000\000\021\022\006\022\134\000\000\000\000\000\000\004\004\000\000\023\004\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\022N\022V\002\"\000\000\000\000\022\150\000\000\000\000\000\000\022^\022v\000\000\022\158\022\000\000\000\000\004\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\020\020\000\000\022\134\000\000\000\000\016\005I\000\000\000\000\016\000\000\020\004\004\000\000\004\021\006\021\030\021&\021\014\021.\007=\000\000\004\000\000\000\000\000\000\004\004\022\0216\021>\000\000\000\000\000\000\000\000\022\150\000\000\000\000\021F\021^\000\000\004\022\158\022\030\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\021\022\006\021n\000\000\000\000\000\000\000\000\000\000\000\000\030\150\000\000\000\000\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\005I\000\000\021\150\000\000\022N\022V\000\000\000\000\000\000\021~\023\000\000\000\000\022^\022v\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022\006\021\022.\022f\022n\022~\000\000\000\000!6\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\023\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000!N\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000(\018\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000(\022\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000(*\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000(.\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\023\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000+R\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\023\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000+j\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000+\158\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000+\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\030\146\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000+\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000+\158\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\000,*\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\020\020\021\022.\022f\022n\022~\005A\000\000\000\000\023\022\134\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\021>\000\000\000\000\000\000\000\000-Z\022\000\000\021F\021^\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\020\021\022\021N\021V\021f\000\000\000\000-^\000\000\021n\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\005A-n\021\150\000\000\022^\022v\000\000\000\000\000\000\021~\000\000\000\000\000\000\000\000\000\000\000\000\021\134\021\142\021\022\006\021\022.\022f\022n\022~\000\000\000\000-r\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\0000R\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\0000V\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\0001\006\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\021\022\006\021\022.\022f\022n\022~\000\000\000\0001\n\000\000\022\134\022\014\000\000\000\000\000\000\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\022V\000\000\000\000\000\000\000\000\000\000\022\000\000\022^\022v\000\000\000\000\000\000\022\150\000\000\000\000\000\000\000\000\000\000\000\000\022\158\022\000\000\000\000\021\022.\022f\022n\022~\000\000\020\020\000\000\022\134\000\000\000\000\016\149\021\000\000\000\000\030\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\0216\021>\000\000\000\000\000\000\000\000\022\150\000\000\000\000\021F\021^\000\000\000\000\022\158\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016\017\000\000\000\000\000\000\000\000\000\000\016\017\000\000\000\000\000\000\016\149\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\0000\026\000\000\021\150\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\015\024\134\000\000\000\000!b\000\000\020\000\000\000\000\000\000\016\017\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\017\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\015,R\000\000\000\000(:\000\000\020\000\000\000\000\000\000\015\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\0005\006\000\000\021\150\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\00088\000\000\021n\000\000\000\000\014\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000\000\01588889\006\000\000\000\000\000\000\000\000\000\000\000\0007\154\000\000\021\1509\0149\022\000\000\000\000\000\000\000\000\021~\000\000\000\0009\0309&\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009.969>9F9N\000\000\016I\016I\000\0009V\000\000\000\000\016I\000\000\000\000\000\000\000\000\000\000\016I\000\000\000\000\000\000\014\016I\016I\016I\016I\016I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009f\016I\016I\000\000\000\000\000\000\000\0009n\000\000\000\000\016I\016I\000\000\000\0009v9~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\016I\016I\016I\016I\000\000\0161\0161\000\000\016I\000\000\000\000\0161\000\000\000\000\000\000\000\000\000\000\0161\000\000\000\000\000\000\016I\0161\0161\0161\0161\0161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016I\0161\0161\000\000\000\000\000\000\000\000\016I\000\000\000\000\0161\0161\000\000\000\000\016I\016I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\0161\0161\0161\0161\000\000\020\020\000\000\0161\000\000\000\000\016,\000\000\000\000+~\000\000\020\000\000\000\000\000\000\0161\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0161\0216\021>\000\000\000\000\000\000\000\000\0161\000\000\000\000\021F\021^\000\000\000\000\0161\0161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016i\000\000\000\000\000\000\000\000\000\000\016i\000\000\000\000\000\000\016\016i\016i\016i\021\014\016i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\150\016i\016i\000\000\000\000\000\000\000\000\021~\000\000\000\000\016i\016i\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\016i\016i\016i\000\000\020\020\000\000\016i\000\000\000\000\016=\000\000\000\000\000\000\000\000\000\000\016=\000\000\000\000\000\000\016i\016=\016=\016=\021\014\016=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016i\016=\016=\000\000\000\000\000\000\000\000\016i\000\000\000\000\016=\016=\000\000\000\000\016i\016i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\016=\016=\016=\000\000\020\020\000\000\016=\000\000\000\000\0169\000\000\000\000\000\000\000\000\000\000\0169\000\000\000\000\000\000\016=\0169\0169\0169\021\014\0169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016=\0169\0169\000\000\000\000\000\000\000\000\016=\000\000\000\000\0169\0169\000\000\000\000\016=\016=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\0169\0169\0169\000\000\016m\016m\000\000\0169\000\000\000\000\016m\000\000\000\000\000\000\000\000\000\000\016m\000\000\000\000\000\000\0169\016m\016m\016m\016m\016m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0169\016m\016m\000\000\000\000\000\000\000\000\0169\000\000\000\000\016m\016m\000\000\000\000\0169\0169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\016m\016m\016m\016m\000\000\020\020\000\000\016m\000\000\000\000\016U\000\000\000\000\000\000\000\000\000\000\016U\000\000\000\000\000\000\016m\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016m\0216\021>\000\000\000\000\000\000\000\000\016m\000\000\000\000\021F\021^\000\000\000\000\016m\016m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016E\000\000\000\000\000\000\000\000\000\000\016E\000\000\000\000\000\000\016U\016E\016E\016E\021\014\016E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016U\016E\016E\000\000\000\000\000\000\000\000\021~\000\000\000\000\016E\016E\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\016E\016E\016E\000\000\020\020\000\000\016E\000\000\000\000\016A\000\000\000\000\000\000\000\000\000\000\016A\000\000\000\000\000\000\016E\016A\016A\016A\021\014\016A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016E\016A\016A\000\000\000\000\000\000\000\000\016E\000\000\000\000\016A\016A\000\000\000\000\016E\016E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\016A\016A\016A\000\000\020\020\000\000\016A\000\000\000\000\016q\000\000\000\000\000\000\000\000\000\000\016q\000\000\000\000\000\000\016A\021\006\021\030\021&\021\014\016q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016A\0216\021>\000\000\000\000\000\000\000\000\016A\000\000\000\000\016q\016q\000\000\000\000\016A\016A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016q\000\000\020\020\000\000\016q\000\000\000\000\016M\000\000\000\000\000\000\000\000\000\000\016M\000\000\000\000\000\000\016q\021\006\021\030\021&\021\014\016M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016q\0216\021>\000\000\000\000\000\000\000\000\016q\000\000\000\000\021F\016M\000\000\000\000\016q\016q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016M\000\000\0165\0165\000\000\016M\000\000\000\000\0165\000\000\000\000\000\000\000\000\000\000\0165\000\000\000\000\000\000\016M\0165\0165\0165\0165\0165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016M\0165\0165\000\000\000\000\000\000\000\000\016M\000\000\000\000\0165\0165\000\000\000\000\016M\016M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\0165\0165\0165\0165\000\000\016-\016-\000\000\0165\000\000\000\000\016-\000\000\000\000\000\000\000\000\000\000\016-\000\000\000\000\000\000\0165\016-\016-\016-\016-\016-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0165\016-\016-\000\000\000\000\000\000\000\000\0165\000\000\000\000\016-\016-\000\000\000\000\0165\0165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\016-\016-\016-\016-\000\000\020\020\000\000\016-\000\000\000\000\016)\000\000\000\000\000\000\000\000\000\000\016)\000\000\000\000\000\000\016-\016)\016)\016)\021\014\016)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016-\016)\016)\000\000\000\000\000\000\000\000\016-\000\000\000\000\016)\016)\000\000\000\000\016-\016-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\016)\016)\016)\000\000\020\020\000\000\016)\000\000\000\000\016%\000\000\000\000\000\000\000\000\000\000\016%\000\000\000\000\000\000\016)\021\006\021\030\021&\021\014\016%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016)\0216\021>\000\000\000\000\000\000\000\000\016)\000\000\000\000\016%\016%\000\000\000\000\016)\016)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016%\000\000\020\020\000\000\016%\000\000\000\000\016!\000\000\000\000\000\000\000\000\000\000\016!\000\000\000\000\000\000\016%\021\006\021\030\021&\021\014\016!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016%\0216\021>\000\000\000\000\000\000\000\000\016%\000\000\000\000\021F\016!\000\000\000\000\016%\016%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016!\000\000\020\020\000\000\016!\000\000\000\000\016u\000\000\000\000\000\000\000\000\000\000\016u\000\000\000\000\000\000\016!\021\006\021\030\021&\021\014\016u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016!\0216\021>\000\000\000\000\000\000\000\000\016!\000\000\000\000\021F\016u\000\000\000\000\016!\016!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016u\000\000\020\020\000\000\016u\000\000\000\000\016Q\000\000\000\000\000\000\000\000\000\000\016Q\000\000\000\000\000\000\016u\021\006\021\030\021&\021\014\016Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016u\0216\021>\000\000\000\000\000\000\000\000\016u\000\000\000\000\021F\016Q\000\000\000\000\016u\016u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\016Q\000\000\020\020\000\000\016Q\000\000\000\000\016e0\"\000\000\000\000+\000\000\020\000\000\000\000\000\000\016Q\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016Q\0216\021>\000\000\000\000\000\000\000\000\016Q\000\000\000\000\021F\021^\000\000\000\000\016Q\016Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016Y\000\000\000\000\000\000\000\000\000\000\016Y\000\000\000\000\000\000\016e\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\150\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016]\000\000\000\000\000\000\000\000\000\000\016]\000\000\000\000\000\000\016Y\021\006\021\030\021&\021\014\016]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016Y\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016a\000\000\000\000\000\000\000\000\000\000\016a\000\000\000\000\000\000\016]\021\006\021\030\021&\021\014\016a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016]\0216\021>\000\000\000\000\000\000\000\000\016]\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142+\158\007=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\021\022\006\021n\000\000\000\000\000\000\007=\007=\000\0009\007=\000\000\022\014\000\000\000\000\016a\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016a\000\000\022N\022V\002\"\000\000\000\000\016a\000\000\000\000\000\000\022^\022v\000\000\021\134\021\142\000\000\000\000\007=\000\000\000\000\007=\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\020\020\000\000\022\134\000\000\000\000\016\1375\014\000\000\000\000-~\000\000\020\000\000\007=\000\000\007=\021\006\021\030\021&\021\014\021.\007=\000\000\007=\000\000\000\000\000\000\007=\000\000\022\0216\021>\000\000\000\000\000\000\000\000\022\150\000\000\000\000\021F\021^\000\000\007=\022\158\022\030\146\007A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\021\022\006\021n\000\000\000\000\000\000\007A\007A\000\0009\007A\000\000\022\014\000\000\000\000\016\137\000\000\022\030\0226\022>\022&\022F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\150\000\000\022N\022V\002*\000\000\000\000\021~\000\000\000\000\000\000\022^\022v\000\000\021\134\021\142\000\000\000\000\007A\000\000\000\000\007A\000\000\000\000\000\000\000\000\000\000\021\022.\022f\022n\022~\000\000\020\020\000\000\022\134\000\000\000\000\016\1417\000\000\000\0001\022\000\000\020\000\000\007A\000\000\007A\021\006\021\030\021&\021\014\021.\007A\000\000\007A\000\000\000\000\000\000\007A\000\000\022\0216\021>\000\000\000\000\000\000\000\000\022\150\000\000\000\000\021F\021^\000\000\007A\022\158\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016\1458\006\000\000\000\0009\000\000\020\000\000\000\000\000\000\016\141\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\150\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\020\020\000\000\021n\000\000\000\000\016\133\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\016\145\021\006\021\030\021&\021\014\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\150\0216\021>\000\000\000\000\000\000\000\000\021~\000\000\000\000\021F\021^\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\00088\000\000\021n\000\000\000\000\014\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000\000\016\13388889\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\1509\0149\022\000\000\000\000\000\000\000\000\021~\000\000\000\0009\0309&\000\000\000\000\021\134\021\142\000\000\000\000\000\000\000\000\000\000\b>\000\"\000\000\000\000\000&9.969>9F9N\000*\000\000\000\000\000\0009V\bB\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\014\000\000\000\000\b\002\002\014\000\000\000\000\000\000\000\000\002\000\000\000\000\000\0009f\000\000\b\b\000\002\000\0009n\016\006\000\000\015^\000\000\002\003\n9v9~\b\002\b\000\000\t\002\tB\000\000\007z\000\000\000\000\n\000\000\000\000\000\000\015N\000\000\007\0006\002\002\000Z\000\000\000\000\000\000\007~\007\130\000^\tJ\001\026\002\002\b\026\002\003\001\018\003\000\000\000\000\000\000\000\000\004\030\000\000\000\000\000\000\000\000\000\000\b\"\003q\003q\000\000\007\134\000\000\006\149\000\000\000\000\000\000\tN\000\000\000\000\b.\b:\000\134\003q\000\000\000\000\000\000\000\000\000\000\000\000\003q\001\026\004\030\017\t\158\002\n\026\000\000\n>\nN\000\000\003Z\000\000\000\000\t\000\000\005&\000\000\005*\000\000\b>\000\"\003q\003q\000&\000\000\000\000\000\000\003^\003b\000*\n^\003q\003q\003q\bB\003q\003q\000\000\003q\003>\000\000\000\000\000\000\004\030\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\003f\000\000\006\149\000\000\000\000\000\000\nb\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\n\003q\000\000\b\002\b\000\000\t\002\tB\000\000\007z\007\0006\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\b\026\007~\007\130\000\tJ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rU\b\"\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\134\b.\b:\000\134\000\000\000\000\tN\000\000\000\000\rU\rU\000\000\001\026\rU\000\000\t\158\002\n\026\000\000\n>\nN\000\000\003Z\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\020\003^\003b\000\000\n^\021\006\021\030\021&\021\014\021.\000\000\000\000\rU\000\000\000\000\rU\000\000\004\030\000\000\0216\021>\016\016\000\000\000\000\016\000\000\003f\021F\021^\000\000\000\000\000\000\nb\000\000\000\000\000\000\000\000\000\000\000\000\004\157\rU\000\000\rU\020\021\022\021N\021V\021f\000\000\000\000\rU\000\000\021n\000\000\rU\000\000\020\020\000\000\000\000\000\000\016\000\000\000\000\016\000\000\000\000\000\000\020\rU\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\021\150\000\000\021\158\000\000\000\000\000\000\000\000\021~\0216\021>\000\000\016\000\000\016\021\134\021\142\000\000\021F\021^\000\000\000\000\016\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\016\000\000\021n\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\021\150\000\000\022\022\000\000\000\000\000\000\000\000\021~\0216\021>\000\000\000\000\000\000\000\000\021\134\021\142\000\000\021F\021^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\021\006\021\030\021&\021\014\021.\000\000\021\150\000\000 ^\000\000\000\000\000\000\000\000\021~\0216\021>\000\000\000\000\000\000\000\000\021\134\021\142\000\000\021F\021^\0006\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\020\021\022\021N\021V\021f\000\000\000\000\000\000\000\000\021n\000\000\000\000\000\000\000\000\000\000\000\0006\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\134\000\000\006\005\006\005\000\138\002\021\150\000\0008\001\026\002\000\002\021~\003:\003B\000\022\000\000\000\000\003Z\021\134\021\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\006\005\000\000\000\138\002\003^\003b\000\000\001\026\002\000\000\002\000\000\003:\003B\000\022\0006\018\003Z\000Z\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000\003f\000\000\000\000\000\000\003^\003b\003\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\018\000\000\000Z\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\134\003f\006\005\000\000\000\138\002\000\000\003\130\000\158\001\026\002\000\002\000\000\003:\003B\000\022\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\138\002\003^\003b\000\000\001\026\002\000\000\007\000\000\012~\003B\000\022\000\"2\006\003Z\000&\000\000\000\000\000\000\000\000\000\000\000*\000\000\000\000\000\000\000\000\000\000\003f\000\000\b\000\000\003^\003b\003\130\000\000\000\000\000\000\000.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\003f\002\015\n\000\138\000\0152\012\134\000\000\003\n\003\026\000\000\003N\000\000\003R\003\003\002\r\153\007z\000\000\000\000\0006\000\000\002\000Z\000\000\015>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007~\007\130\r\153\r\153\000\000\r\153\000\000\000\000\000\000\000\000\015B\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\002\002\000\000\002\015Z\007\134\003\000\000\n\000\000\000\000\007\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\002\000\000\011&\000\000\0116\000\000\015f\000\000\004\000\000\012\012\000\000\000\000\000\000\000\000\r\153\0006\017\026\000\142\000Z\004\030\000\000\012\000\000\003b\000^\000\000\015n\r\153\r\153\000\000\r\153\000\000\000\000\015v\000\000\000\000\000\000\000\000\012\000\150\000b\000\000\r\153\000\000\000\000\r\153\r\153\000\000\000\000\002\r\153\000f\r\153\rj\003B\000\022\r\153\000\"\000~\000\134\000&\000\000\000\000\000\138\002\000\000\000*\000\000\001\026\002\004\003\022\000\000\003:\003B\000\022\000\000\000\000\003Z\000\000\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\030\134\000\000\000\000\000\000\007\000\000\003^\003b\000\000\000\000\000\000\007\000\000\000\000\000\000\138\000\000\000\000\000\000\003\n\003\026\000\000-\022\000\000\024\003\003\000\000\000\000\007z\003f\000\000\000\000\000\000\000\000\003j\000\000\000\000\000\000\000\000\000\000\000\000\000\007~\007\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\001\005\002\000\000\001\005\001\005\000\000\000\000\000\000\007\134\000\000\000\000\000\000\000\000\000-*\000\000\000\000\000\000\000\000\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\005\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\003\000\000\000\000\000\000\000\b\029\000\000\000\001\005\000\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\005\b\029\b\029\000\000\b\029\b\029\000\000\000\000\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\005\000\000\001\005\000\000\000\000\000\000\001\005\000\000\001\005\000\000\001\005\001\005\001\005\000\000\001\005\001\005\b\029\b\029\000\000\000\000\001\005\000\000\001\005\000\000\001\005\001\005\000\000\b\029\001\005\001\005\b\029\000\000\000\000\000\000\000\000\000\000\000\000\b!\b!\b\029\b\029\000\000\b\029\b\029\000\000\000\000\000\000\000\000\000\000\000\000\b!\000\000\000\000\000\000\000\000\004b\b\029\000\000\b\029\000\000\b!\b!\000\000\b!\b!\000\000\b\029\000\000\b\029\000\000\b\029\b\029\b!\b!\000\000\b!\b!\000\000\000\000\000\000\b\029\000\000\000\000\000\000\b\029\b\029\000\000\000\000\000\000\000\000\000\000\002\153\002\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b!\000\000\000\000\000\000\000\000\000\000\000\000\007\026\b\029\000\000\b\029\000\000\b!\002\153\002\153\b!\002\153\002\153\b\029\000\000\b\029\000\000\b\029\b\029\002\153\000\000\000\000\000\000\007&\b!\b\029\b!\b\029\000\000\000\000\000\000\b\029\b\029\000\000\b!\004v\b!\000\000\b!\b!\000\000\002\153\002\153\000\000\002\153\002\153\b!\000\000\b!\002\153\b!\b!\b!\b!\000\000\000\000\000\000\000\000\000\000\000\000\b!\000\000\000\000\000\000\b!\b!\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\153\000\000\002\153\000\000\002\153\000\000\000\000\002\153\000\000\000\000\002\153\000\000\002\153\000\000\002\153\002\153\000\000\000\000\000\000\002\002\014\000\000\002\153\000\000\002\153\002\000\000\000\000\0072\002\153\000\000\000\000\000\000\002\153\002\002\153\000\0002\000\000\016\018\000\000\002\000\000\002\153\000\000\002\153\000\000\002\153\002\153\000\000\002\002\014\000\000\000\000\000\000\000\000\002\002\153\000\000\005\000\000\004\130\002\153\002\002\002\000\000\000\0003\150\000\0002\000\000\002\001\026\002\002\000\000\002\003\000\000\003\002\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\002\002\002\000\000\000\000\000\000\000\0003\000\000\002\001\026\002\002\000\000\002\003\000\000\003\000\000\000\000\000\000\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\004\004\000\000\005&\000\000\005*\000\000\000\000\001\026\002\002\000\000\002\003\000\000\003\000\000\002\1583\130\000\000\004\0303\138\000\000\004\004\000\000\004\004\000\000\000\000\000\000\000\000\003\000\000\005&\000\000\005*\000\000\000\000\005\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019>\002\"\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\00793\146\006^\000\000\004\005&\000\000\005*\n\000\000\000\000\003\n\006b\006\134\000\000\000\0003\158\000\000\006\000\000\014\000\000\0079\0079\000\000\0079\0079\020R\007=\007=\000\000\000\000\000\000\020\146\000\000\004\000\000\000\000\000\0003\020\007=\000\000\004\000\000\023\146\tA\004\000\000\"\000\000\007=\007=\000\000\007=\007=\000\000\000\000\000\000%\"\000\0003\004\0079\007A\007A\000\000\000\0003\tA%*%B\tA\tA\000\000\000\000\tA\000\000\"\000\000\tA\000\000\000\000\000\000\025>\000\000\000\000\007A\007A\000\000\007A\007A\007=%J\0079\000\000\019\000\000\000\000\000\000\0079\000\000\0079\015\014\000\000\000\000\0079\000\000\000\000\000\000\tA\000\000\000\000\006\"\000\000\000\000\tA\000\000\000\000\003\0079\000\000\007=\000\000\000\000\000\000\000\000\007A\007=\000\000\007=\000\000\000\000\000\000\007=\000\000\000\000\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\000\000\tA\tA\007=\tA\000\000\000\000\0079\000\000\tA\tA\tA\007A\000\000\000\000\000\000\tA\tA\007A\000\000\007A\tA\000\000\tA\007A\000\000\000\000\000\000\tA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007A")) + ((32, "\000\000U\130\000\000U\130\000\000L0\000\000WV\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V6\000\000WV\000\000\000\000\000\000\000\000\000\000Jh\000\000zz\000\000L0\000\000Jh\000\000\000\000\000\000L0\000\000Jh\000\001\015\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\018h\000\000\000\000\000\000\000\000\000\000J@\000\000Id\000\000\000\000\000\000\000\000\000\000\000\000\000\000M\024\000\001\014\000\001\016\000\000\000\000\000\000\000\000\000\001\016\000\00002\000\000\000\000\000\000J\000\000KN\000\000\000\000\000\000\000\000\000\000N\006\000\001\014\000\001\016\000\000\000\000\000\000J\000\000KT\000\000J\000\000J\000\000\000\000\000\001\015:\000\001\015:\000\001\015:\000\00002\000\000\000\000\000\000N\006\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\001\r \000\001\r \000\00002\000\000\000\000\000\000N\006\000\000\000\000\000\000\000\000\000\000\128\000\000\129\140\000\000\000\000\000\000\000\000\000\000U\004\000\000Mv\000\000 \014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000M\024\000\000\000\000\000\000U\004\000\000XJ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Vf\000\000XJ\000\000\000\000\000\000Y\016\000\000%\000\000\000\000\000\000K\000\000\135\144\000\000R@\000\000\000\000\000\000\000\000'\000\000L\000\000L.\000\001\021@\000\000'\000\001\021J\000\000'\000\000L\000\000\000\000\000\000'\000\000N\000\000P\006\000\000\000\000\000\000Qr\000\000\000\000\000\000V.\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\000\000\000\000\000\000V.\000\000\000\000\000\000NJ\000\000\000\000\000\000V.\000\000\000\000\000\000M\016\000\000\000\000\000\000\000\000\000\000M\000\000I\000\000\000\000\000\000\000\000\000\000\000\000\000\000_x\000\000@\000\000\000\000\000\000\135\000\000'\000\000\000\000\000\00002\000\001\017\142\000\000'\000\000V.\000\000\000\000\000\000w:\000\000L\004\000\000b\000\000M\000\000\000\000\000\000L\b\000\000Ot\000\000I\000\000\000\000\000\000O\n\000\000X\028\000\000\000\000\000\000O\158\000\000'\000\000\000\000\000\000a\\\000\000\000\000XJ\000\000Y\016\000\001\014\000\001\016\000\001\r \000\000O\004\000\000J\000\000\000\000\000\001\r \000\000\130@\000\000\000\000\000 \014\000\000XJ\000\000Y\016\000\001\014\000\001\016\000\000\130\000\000O\004\000\000`\000\000Id\000\000\000\000\000\000J6\000\000\000\000\000\000}J\000\001\014\000\001\016\000\000P\000\000\000\000\000\000I\014\000\000J\000\000 \014\000\000\131\000\000~\000\000\001\014\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V.\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\150\000\001\r \000\000V.\000\000Ib\000\000zz\000\000\000\000\000\000N\006\000\000\132\\\000\000\133\016\000\000\000\000\000\000\000\000\000\000I\024\000\000\000\000\000\000N8\000\000SJ\000\000\000\000\000\000N\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000J\000\000I\020\000\000\000\000\000\000P\000\000P\000\000\134T\000\000\018h\000\001\017\134\000\000'\000\000a\\\000\000^(\000\000\000\000\000\000[\024\000\000QJ\000\000b\000\000V.\000\000\\V\000\000V.\000\000M\006\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\000\000'\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\000\000R0\000\000X.\000\000\000\000\000\000\000\000\000\001\018f\000\000'\000\000\000\000\000\000&\000\000\000\000\000\001\019\018\000\000'\000\000\000\000\000\001\019\000\000S(\000\000V.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\002\000\000S\n\000\000b\000\000\000\000\000\000S\136\000\000Ll\000\000b\000\000\000\000\000\000S\000\000O\000\000b\000\000\000\000\000\000J@\000\000J\030\000\000\000\000\000\000J\002\000\000T<\000\000\000\000\000\000N\000\000I4\000\000I\020\000\000\000\000\000\000\000\000\000\000T\000\000\000\000\000\000\000\000\000\000[\024\000\000J@\000\000U\030\000\000\000\000\000\000Vt\000\000\000\000\000\000N\000\000V\000\000\000\000\000\000Z\000\000V.\000\000P\000\000\000\000\000\000R\132\000\000w:\000\000\000\000\000\000x\000\000W\000\000X\002\000\000'\000\000M\132\000\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000wX\000\000x\000\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000\000S\132\000\000R\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000SN\000\000V.\000\000Q&\000\000R\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000Y\000\000\000\000\000\000P\000\000SN\000\000Z\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000SN\000\000P\000\000\000\000\000\000T\000\000x\000\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y:\000\000\000\000\000\000\000\000\000\000\000\000\000\000wH\000\000L\004\000\000Z\000\000\000\000\000\000Z\130\000\000Y\000\001\015\000\000\000\000\000\000\000\000\000\000T\000\000[H\000\000\000\000\000\000\000\000\000\000a\\\000\000K\000\000L*\000\000V.\000\000L*\000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000a\\\000\000\\\016\000\000\000\000\000\000a\000\000\000\000\000\000[\024\000\000J@\000\000\\\000\000\000\000\000\000]\158\000\000\000\000\000\000[\024\000\000J@\000\000]\000\000\000\000\000\000^\152\000\000\000\000\000\000N\000\000_\014\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\134T\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000Z\000\000\000\000\000\000\000\000\000\001\018\000\000\134T\000\000\000\000\000\001\018\000\000\134T\000\000\000\000\000\001\019f\000\000_l\000\000Y:\000\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\"\000\000X\000\000`\000\000`H\000\000\134T\000\000\\\000\000\000\000\000\000`\000\000Nt\000\000 \014\000\001\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y:\000\000_\000\000{.\000\000\000\000\000\000(\000\000<\000\000\133\000\000L0\000\000Jh\000\001\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\150\000\001\017\030\000\001\017\030\000\000\018h\000\000\000\000\000\000M\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L4\000\000\000\000\000\000L\130\000\000U\000\000\144\000\000\000\000\000\000`\000\000\000\000\000\000aD\000\000Ip\000\000'\000\000\000\000\000\000\144\000\000'\000\000\000\000\000\000M\146\000\000\000\000\000\000\000\000\000\000P\152\000\000\000\000\000\000\000\000\000\000a\132\000\000\000\000\000\000\\\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000Kl\000\000\000\000\000\000\000\000\000\000bF\000\000M\134\000\000\000\000\000\000L\000\000\020\000\000Kv\000\000\000\000\000\000\000\000\000\000Q\000\000bJ\000\000I\000\000bV\000\000\134T\000\000\000\000\000\000\000\000\000\000P\012\000\000bJ\000\000\000\000\000\000\000\000\000\000bL\000\000\\V\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\000\000\000\000\000\000\000\000\000\000bj\000\000cb\000\000Q~\000\000\000\000\000\000L\000\000Q\000\000\000\000\000\000\000\000\000\001\b\140\000\000Kl\000\000L\000\001\b\140\000\000\000\000\000\000J\000\000\000\000\000\000b\000\000\\\000\000\000\000\000\000S<\000\000\000\000\000\000\000\000\000\000Jl\000\000M\000\000OH\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\n\000\000(\000\000\134\000\000bj\000\000(\000\000Y:\000\000\134\000\000Y:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\000\000N\000\000\000\000\000\000\000\000\000\000\002\000\000I\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\001\t\030\000\001\b\140\000\000\003\000\001\t\000\000\000\000\000\000]~\000\000(\000\000\000\000\000\000P\148\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000c\132\000\000\000\000\000\000\000\000\000\000O\000\000(\000\000\000\000\000\000\004\000\000\000\000\000\001\t\000\000R\150\000\000c\000\000\000\000\000\000\000\000\000\000c*\000\000\000\000\000\001\t\000\000U\000\000\000\000\000\000\000\000\000\000O\\\000\000(\000\000(\000\000JB\000\000\000\000\000\000\000\000\000\000J\000\000U\000\000\000\000\000\000\000\000\000\000\024\000\000a\132\000\000\000\000\000\000K\000\000\000\000\000\000\134T\000\000\000\000\000\000R*\000\000\000\000\000\000c\000\000\000\000\000\000Z\154\000\000\000\000\144\000\000V.\000\000\024\000\000V.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\136\000\000h\014\000\000\000\000\000\000\000\000\000\000)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\0168\000\001\nB\000\000*\000\000\144\000\000\000\000\000\000\136\128\000\000\144\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000\000Jz\000\000'\000\000\000\000\000\000\144\000\000\000\000\000\000Z\154\000\000d\000\000\000\000\000\000\000\144\000\000H\150\000\000I\026\000\0004\000\000Q\000\000cP\000\000\000\000\000\001\t\000\000W\142\000\000\000\000\000\000\000\000\000\000J\000\000VX\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000dB\000\000\000\000\000\000\000\000\000\000Z\154\000\000dL\000\000\000\000\000\000\144\000\000c\000\000\000\000\000\001\b\140\000\000Y(\000\000\000\000\000\000\000\000\000\000J\000\000Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000\000\000\000\000\135\012\000\000\000\000\000\000T\016\000\000\000\000\000\000Z\154\000\000d\000\000\000\000\000\000\000\000\000\000LH\000\000Mn\000\000\000\000\000\000[\b\000\000\000\000\000\000\000\000\000\000\004\000\000d\000\000\000\000\000\000d\030\000\000\000\000\000\000d\000\000d\000\000\144\000\000M\000\000(\000\000K\000\000\000\000\000\000\000\000\000\000e\026\000\000d\000\000\144\000\000Rr\000\000(\000\000N.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\134|\000\000\000\000\000\000~\000\001\015:\000\000V.\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\024\000\001\r \000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000 \014\000\000L0\000\000d\000\000\144\000\000H\000\000<\000\000L0\000\000Jh\000\001\015:\000\000cD\000\000d\000\000\000\000\000\000\000\000\000\000w8\000\000xZ\000\000\000\000\000\000\000\000\000\000zz\000\000\000\000\000\000TL\000\000N\000\000\000\000\000\000y\018\000\000{.\000\000\000\000\000\000L\130\000\000WT\000\000\"\000\000T\000\000'\000\000\000\000\000\000'\000\000Q\000\000<\000\000L0\000\000d\000\000\144\000\000O\000\000<\000\000V\144\000\000Y\000\000\000\000\000\000P<\000\000P\000\000\1354\000\000\000\000\000\000<\000\001\015:\000\000p\000\000 \014\000\000V\144\000\000\000\000\000\000N\000\000 \014\000\000 \014\000\001\015\000\000qh\000\000d\000\000\000\000\000\000\000\000\000\000wF\000\000y\000\000\000\000\000\000e6\000\000\000\000\000\000[\n\000\000w\000\000zz\000\000y\018\000\000{\000\000\000\000\000\000'\000\000\000\000\000\000'\000\000W\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\000\000<\000\000r@\000\000 \014\000\000 \014\000\000r\000\000 \014\000\000\005\000\000I\134\000\000P\000\000U\004\000\000U\130\000\000U:\000\000\000\000\000\000_\b\000\000SZ\000\000I\000\000\000\000\000\000Y:\000\000\006\000\000}J\000\000%\000\000\\\000\000\137\000\000\000R@\000\000e:\000\000\000\000\000\000h\000\000*\000\001\021^\000\000'\000\000Td\000\000T\000\000\000\000\000\000eB\000\000\000\000\000\000v\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000*\000\000w:\000\000\000\000\000\000\000\001\020:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000UD\000\000\000\000\000\000\000\000\000\000\000\000\000\000eJ\000\000\000\000\000\000\000\000eP\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P&\000\000\000\000\000\000\000\000\000\000\000\000\000\000eX\000\000\000\000\000\000\000\000eh\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\154\000\001\021^\000\000\000\000\000\000\000\000\000\000\000\000x2\000\000\000\000\000\000\000\001\020x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000W\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000ev\000\000\000\000\000\000\000\000e|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000br\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\130\000\000\000\000\000\000\000\000e\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\006\000\000'\000\000e\004\000\000'\000\000\000\000\000\001\011\000\000\000\000\000\000]^\000\000\139d\000\000I\000\000\139d\000\000h\000\000N\006\000\000N\006\000\000I>\000\000]^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\006\000\000\000\000\000\000I>\000\000\000\000\000\000N\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\006\000\000\000\000\000\000i\000\000t\000\000\000\000\156j\000\000e\146\000\000e\156\000\000I4\000\000N\000\000e\000\000\000\000\000\000[\158\000\000\000\000e\000\000e\000\000N\006\000\000\000\000\000\000I4\000\000N\000\000e\000\000\000\000\000\000\000\000\000\000N\006\000\000\000\000\000\000\000\000\000\000\000\000h\000\000UX\000\000\000\000\000\000\000\000\000\000e\000\000\127`\000\000\000\000\000\000\128\022\000\000<\000\000\000\000\000\000<\000\000\000\000\000\000e\000\000<\000\000\000\000\000\000e\000\000<\000\000\000\000\000\000<\000\000\000\000\000\000<\000\000\000\000\000\000\\N\000\000\\N\000\000N\000\000\000\000\000\000e*\000\000\\N\000\000\\N\000\000O\000\000\000\000\000\000S\154\000\000\000\000\000\000^D\000\000\000\000\000\000\000\000\000\000c\020\000\000\\N\000\000\\N\000\000c\020\000\000e@\000\000\\N\000\000\\N\000\000c\020\000\000\000\000\000\000c\020\000\000\000\000\000\000\000\000\000\000c\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000eb\000\000^f\000\000\000\000\000\000U:\000\000\018h\000\000W\000\000S\000\000V.\000\000Kd\000\000}J\000\000S\142\000\000\000\000\000\000eP\000\000'\000\000\000\000\000\000XJ\000\000Y\016\000\000\144\000\000O\000\000<\000\000+\000\000J\158\000\000Q\000\000U\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\146\000\000\138\000\000<\000\000L\132\000\000\000\000\000\001\r \000\001\r \000\000X\132\000\001\r \000\000JP\000\000Qv\000\000 \014\000\000XT\000\000\000\000\000\001\rt\000\001\r \000\000d\n\000\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000,x\000\000Kb\000\000R\000\000U\004\000\000S$\000\000L\004\000\000\000\000\000\000f\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\154\148\000\000\000\000\000\000_Z\000\000f$\000\000ef\000\000L\004\000\000Nd\000\000Y\000\000L\004\000\001\005|\000\000%\000\000K\000\000H\000\000I\000\000_x\000\000\127\130\000\000'\000\000e\148\000\000\134T\000\000\000\000\000\000\154\000\000\000\000\000\000^\000\000\1400\000\000\1400\000\000_x\000\000\000\000\000\000\000\000\000\000P~\000\000_.\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000f\018\000\000\127`\000\000r\000\000c\000\000'\000\000f0\000\000\000\000\000\000}`\000\000\134T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000c\000\000\000\000\000\000f2\000\000c\000\000\000\000\000\000f0\000\000c\000\000\000\000\000\000c\000\000\000\000\000\000c\000\000\000\000\000\000]&\000\000]&\000\000c\132\000\000\000\000\000\000e|\000\000]&\000\000]&\000\000gj\000\000\000\000\000\000k\000\000\000\000\000\000l\148\000\000\000\000\000\000\000\000\000\000mp\000\000]&\000\000]&\000\000mp\000\000e\138\000\000]&\000\000]&\000\000mp\000\000\000\000\000\000mp\000\000\000\000\000\000\000\000\000\000mp\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000Y:\000\000Tj\000\000L\000\000OR\000\000\000\000\000\000ff\000\000f(\000\000U\004\000\000S$\000\000\000\000\000\000U\004\000\000an\000\000P@\000\000PT\000\001\005|\000\000S\142\000\000e\000\000\134T\000\000\000\000\000\000XJ\000\000Y\016\000\000N\000\000f\\\000\000f*\000\000<\000\000\000\000\000\000\000\000\000\000<\000\000<\000\000\135\000\000<\000\000\136\000\000\\\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000<\000\000\000\000\000\000<\000\000\000\000\000\000<\000\000\137|\000\000<\000\000\014\000\000<\000\000\138H\000\000<\000\000\139\020\000\000<\000\000\139\000\000<\000\000\140\000\000<\000\000\141x\000\000<\000\000\142D\000\000<\000\000\143\016\000\000<\000\000\143\000\000<\000\000\144\000\000<\000\000\145t\000\000<\000\000\146@\000\000<\000\000\147\012\000\000<\000\000\147\000\000zz\000\000<\000\000\148\000\000\149p\000\000<\000\000\150<\000\000<\000\000\151\b\000\000<\000\000\151\000\000<\000\000\152\000\000<\000\000\153l\000\000<\000\000\014\000\000\000\000\000\000\130@\000\000\000\000\000\000\000\000\000\000\000\000\000\000d \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \014\000\000\000\000\000\000 \014\000\000\000\000\000\000M6\000\000|\150\000\000\000\000\000\000\007\000\000 \014\000\000\1548\000\000 \014\000\000\155\004\000\000 \014\000\000\155\000\000<\000\001\n\000\000 \014\000\000\156\156\000\000 \014\000\000\157h\000\000 \014\000\000\1584\000\000 \014\000\000\159\000\000\000 \014\000\000\159\000\000 \014\000\000\152\000\000 \014\000\000d\000\000 \014\000\0000\000\000 \014\000\000\000\000 \014\000\000\000\000 \014\000\000\148\000\000 \014\000\000`\000\000 \014\000\000,\000\000 \014\000\000\000\000|\150\000\000 \014\000\000\000\000\144\000\000 \014\000\000\\\000\000 \014\000\000(\000\000 \014\000\000\000\000 \014\000\000\000\000\134T\000\000\000\000\000\000\134T\000\000P\000\000\134T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\000\000\000\000\000\000\000\000\000\b\000\000 \014\000\000\148\000\000\b\000\001\011N\000\000\000\000\000\000\144\000\000M\006\000\000.\000\000W>\000\000\\P\000\000 \014\000\000\000\000\000\000\000\000\000\000\000\000:\000\000W>\000\000\\P\000\000\000\000\000\000\000\000\000\000\\\022\000\000\000\000\000\000\000\000fh\000\000W>\000\000\\P\000\000\000\000\000\000\000\000\000\000\\\022\000\000fj\000\000W>\000\000\\P\000\000\000\000\000\000b\000\000K\142\000\000K\142\000\000\000\000\000\000e\000\000'\000\000e\000\000 \014\000\000\t\000\000e\000\000'\000\000e\000\000 \014\000\000\n\000\000f\000\000\000 \014\000\000\011\000\000\000\000\000\000K\020\000\000'\000\000f\002\000\000 \014\000\000\012\000\000Tv\000\000 \014\000\000\r\000\000\000\000\000\000\000\000\000\000XJ\000\000Y\016\000\001\015\000\000ª\000\000 \014\000\000$\000\000\000\000\000\000\000\000\000\000Q\140\000\000 \014\000\000\000\000\000\000\000\000\000\000\000\000<\000\000\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Mv\000\000S\n\000\000 \014\000\000.\000\000\000\000\000\000UN\000\000\000\000\000\000\000\000\000\000Xv\000\000\000\000\000\000Sv\000\000L\004\000\000\000\000\000\000\000\000\000\000U\130\000\000L0\000\000Jh\000\001\015\000\000\156\000\000 \014\000\000Р\000\000\000\000\000\000\000\000\000\000L\130\000\000U\000\000\144\000\000M\002\000\000<\000\000<\000\000f\012\000\000 \014\000\000h\000\000\000\000\000\000̸\000\000\000\000\000\000\000\000\000\000L0\000\000fb\000\000\144\000\000VR\000\000<\000\000\014\000\000\000\000\000\000\000\000\000\000<\000\000\140\000\001\015\000\0006\000\000P\000\000e\000\000'\000\000f\024\000\000L\016\000\000L\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000c\030\000\000c\000\000J\000\000M\024\000\000f\000\000\000\000\000\000j\148\000\000J\000\000\000\000\000\000f\000\000kp\000\000J\000\000\000\000\000\000f\000\000lL\000\000J\000\000\000\000\000\000m(\000\000J\000\000\000\000\000\000n\004\000\000J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V\144\000\000U\000\000 \014\000\000\030\000\000'\000\000fP\000\000 \014\000\000\154\000\000\000\000\000\000O\000\000\000\000\000\000O\000\000f\000\000X\028\000\000RB\000\000\000\000\000\000\000\000\000\000f\000\000V.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\v\000\000RB\000\000\000\000\000\000f\000\000\000\000\000\000\\\000\000\137\000\000\140\000\000'\000\000f\000\000\000\000\000\000f\000\000\000\000\000\000-p\000\000U4\000\000I\020\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000f\000\000fL\000\000'\000\000\000\000\000\000\000\000\000\000O\000\000f\000\000f^\000\000b\000\000\000\000\000\000O\000\000f\000\000fb\000\000b\000\000\000\000\000\000R\132\000\000\000\000\000\000\138\152\000\000\140\000\000g\012\000\000\000\000\000\000'\000\000g\"\000\000\000\000\000\000Zl\000\000\000\000\000\000\000\000\000\000\014\000\000U4\000\000\000\000\000\000f\000\000fv\000\000\134T\000\000\000\000\000\000O\000\000f\000\000f~\000\000\000\000Y:\000\000\\V\000\000\000\000\000\000f\150\000\000\134T\000\000\000\000\000\000\000\000\000\000O\000\000g\002\000\000f\150\000\000\000\000\000\000\000\000R\000\000\000\000\000\000f\000\000_\014\000\000\000\000\000\000\000\000\000\000\133\000\000'\000\000T\000\000\000\000\000\000gJ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\000\000\000\000\000'\000\000f\000\000\134T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144,\000\000U4\000\000\000\000\000\000O\000\000g\"\000\000f\000\000\000\000\000\000\000\000O\000\000g0\000\000f\000\000\000\000\000\000\000\000R\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\015z\000\000\016t\000\000\000\000\000\000\000\000\000\000\017n\000\000\000\000\000\000\000\000\000\000\000\000\000\000f\000\000_,\000\000\000\000\000\000\000\000\000\000N\000\000'\000\000g\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\132\000\000\000\000\000\000'\000\000g$\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000U4\000\000\000\000\000\000O\000\000gz\000\000g\004\000\000b\000\000\000\000\000\000O\000\000g~\000\000g\b\000\000b\000\000\000\000\000\000R\132\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000.B\000\000/:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\140\000\000\000\000\000\000\000\000\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000Z\028\000\000O\000\000\000\000\000\000f\000\000O\000\000\000\000\000\000\000\000\000\000Z\028\000\000\000\000\000\000g\134\000\000J\030\000\000R\000\000J\030\000\000R\132\000\000\000\000\000\000\000\000\000\000g>\000\000R\132\000\000\000\000\000\000^$\000\00002\000\000O\148\000\000I\020\000\000g\146\000\000g\028\000\000'\000\000Q@\000\000\000\000\000\000\000\000\000\000Z8\000\000\\\000\000g\150\000\000g \000\000'\000\000Tp\000\000\000\000\000\000g\000\000S\136\000\000<\000\000\000\000gR\000\000<\000\000\154\000\000\000\000\000\000\000\000\000\000S\000\000S\000\000\018h\000\000\b\000\001\011N\000\000\144\000\000M\000\0004\000\000W>\000\000Z\000\000<\000\000<\000\000\000\000\000\000\000\000\000\000\000\000W>\000\000Z\000\000\000\000\000\000\\\022\000\000g\000\000W>\000\000Z\000\000\000\000\000\000\\\022\000\000g\000\000W>\000\000Z\000\000\000\000\000\000.\000\000K\142\000\000gR\000\000'\000\000gd\000\000<\000\0001*\000\000gb\000\000'\000\000gv\000\000<\000\0002\"\000\000g|\000\000<\000\0003\026\000\000\000\000\000\000L\000\000'\000\000g\128\000\000<\000\0004\018\000\000Z\000\000<\000\0005\n\000\000\000\000\000\001\015\000\000L\000\000\142J\000\000S\000\000\018h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000g\000\000\000\000g\134\000\000S\000\000WP\000\000\000\000\000\000\000\000\000\000\000\000\000\000S\000\000\000\000\000\000J\000\000g\136\000\000S\000\000\000\000\000\000\\\022\000\000h\018\000\000g\140\000\000S\000\000\000\000\000\000\\\022\000\000h \000\000g\000\000S\000\000\000\000\000\000X\138\000\000g\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\000\000bj\000\000J\000\000\000\000\000\000\b\000\001\011N\000\000\144\000\000\000\000\000\001\015\000\000[\000\000\142J\000\000S\000\000X\138\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000W&\000\000]j\000\000h\012\000\000g\158\000\000\000\000\000\000\000\000WV\000\000H\000\000K\142\000\000g\000\000'\000\000\\P\000\000\000\000\000\000\000\000\000\000\\P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\\\000\000\020V\000\000bj\000\000\000\000\000\000W&\000\000\000\000\000\000\000\000\000\000\000\000\000\000g\156\000\000\144\000\000]\000\000\021P\000\000\000\000\000\000\019\\\000\000\000\000\000\000\000\000\000\000hf\000\000\018h\000\000c\000\000\144\000\000c\000\000g\000\000\144\000\000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022J\000\000^\000\000\000\000\000\000\000\000\000\000X\000\000\000\000\000\000\000\000\000\000X\006\000\000\000\000\000\000^\144\000\000\000\000\000\000\000\000\000\000g\000\000X\006\000\000\000\000\000\000X\000\000\000\000\000\000\000\000\000\000X\006\000\000^\000\000\000\000\000\000\000\000\000\000\018h\000\000^\000\000\000\000\000\000\000\000\000\001\015:\000\000Qj\000\000RR\000\000 \014\000\000\022\000\000\000\000\000\000\000\000\000\000<\000\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\142J\000\00002\000\00002\000\000Y\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000hV\000\000X\000\000h\n\000\00002\000\000XD\000\000\000\000\000\000\000\000\000\000\000\000\000\00002\000\000\000\000\000\000\000\000h\012\000\00002\000\000\000\000\000\000\\\022\000\000h\150\000\000h\022\000\00002\000\000\000\000\000\000\\\022\000\000h\000\000h\030\000\00002\000\000\000\000\000\000U\000\000hr\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\000\000O\148\000\000\000\000\000\001\015:\000\000RX\000\000\142J\000\00002\000\000U\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000W&\000\000]|\000\000hx\000\000h\002\000\000b\000\000\000\000\000\000]^\000\000\000\000K\142\000\000h\026\000\000'\000\000Z\000\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\002\000\0006\000\000~\000\000\000\000\000\000W&\000\000\000\000\000\000\000\000\000\000\000\000\000\000g\000\000\144\000\000_&\000\0007\000\000\000\000\000\0006\002\000\000\000\000\000\000\000\000\000\000h\000\00002\000\000\000\000\000\000\000\000\000\0008\000\000h\000\000\000\000\000\000S\000\000\000\000\000\000\000\000\000\000\000\000\000\000U\158\000\000XV\000\000N\000\000J\030\000\000\000\000\000\000\\\022\000\000h\000\000J\030\000\000\000\000\000\000\\v\000\000h\000\000]\132\000\000\000\000J\030\000\000\000\000\000\000\000\000J\030\000\000\000\000\000\000\\\022\000\000h\000\000J\030\000\000\000\000\000\000\\\022\000\000h\000\000J\030\000\000\000\000\000\000\000\000\000\000\\\022\000\000h\000\000J\030\000\000\000\000\000\000\000\000\000\000xN\000\000O\000\000\000\000\000\000h\"\000\000O\000\000\000\000\000\000\000\000\000\000xN\000\000\000\000\000\000 \014\000\000\000\000\000\001\015\000\000\000\000\023D\000\000 \014\000\000\\\000\000 \014\000\000\000\000<\000\001\011\000\000 \014\000\000V\000\000 \014\000\000\000\000 \014\000\000P\000\000 \014\000\000\000\000 \014\000\000J\000\000 \014\000\000\000\000 \014\000\000D\000\000 \014\000\000\000\000 \014\000\000>\000\000 \014\000\000ټ\000\000 \014\000\0008\000\000 \014\000\000ڶ\000\000 \014\000\0002\000\000 \014\000\000۰\000\000 \014\000\000,\000\000\130@\000\000 \014\000\000ܪ\000\000&\000\000 \014\000\000ݤ\000\000 \014\000\000 \000\000 \014\000\000\158\000\000 \014\000\000\026\000\000\000\000\000\000 \014\000\000\000\000\000\000LR\000\000U\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000 \014\000\000\148\000\000D\000\000 \014\000\000\152\000\000TT\000\000 \014\000\000\000\000\000\028\000\000 \014\000\000\020\000\000<\000\000\140\000\000\000\000 \014\000\000\146\000\000\000\000 \014\000\000\014\000\000Y2\000\000_Z\000\000\000\000\000\000Y\000\000Mv\000\000\000\000\000\000T\000\000\138\000\000\000\000\000\000]0\000\000\000\000\000\000L\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000U\000\000W\000\000I\000\000WJ\000\000X\000\000\128\000\000'\000\001\021\134\000\000\000\000\000\000'\000\000\000\000\000\000i\n\000\000R\000\000'\000\000{J\000\000^\000\000'\000\000{\000\000\000\000\000\000Y\000\000W\000\000\000\000\000\000hb\000\000L\004\000\000\128\000\000\000\000\000\000L\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000Wb\000\000\\|\000\000\141P\000\000M\000\000\000\000\000\000\000\000\000\000\000\000\000\000_Z\000\000Z\000\000R\024\000\000J(\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y2\000\000\000\000\000\000[\000\000I\000\000WJ\000\000^\000\000\128\000\000\134T\000\000\156T\000\000\000\000\000\000\134T\000\000\000\000\000\000i\022\000\000VD\000\000i \000\000\000\000'\000\000^\000\000\000\000\000\000\157\000\000i&\000\001\0222\000\000'\000\000^\000\000\000\000\000\001\021\000\000'\000\000_J\000\000\000\000\000\000_\000\000i \000\000\159\132\000\000\000\000\000\000\128\000\000[\000\000\000\000\000\000i\b\000\000\000\000\000\000h\130\000\000L\000\000\024\000\000\000\000\000\000L\000\000\000\000\000\000\000\000\000\000h\156\000\000Mv\000\000\000\000Mv\000\000\146\000\000L\004\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i^\000\000_Z\000\000\142\022\000\000id\000\000_Z\000\000\000\000\000\000h\132\000\000in\000\000_Z\000\000\000\000\000\000\000\000\000\000\142\022\000\000\000\000\000\000\000\000\000\000\024>\000\000%\000\000K\000\000\000\000\000\000i<\000\000\127`\000\000\000\000c\030\000\000c\030\000\000S\150\000\000\000\000\000\000h\000\000c\030\000\000c\030\000\000a\132\000\000\000\000\000\000n\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\144x\000\000c\030\000\000c\030\000\000\144x\000\000h\000\000c\030\000\000c\030\000\000\144x\000\000\000\000\000\000\144x\000\000\000\000\000\000\000\000\000\000\144x\000\000\000\000\000\000\000\000\000\000\000\000\000\000U:\000\000\000\000\000\000_(\000\000Wj\000\000I\000\000Y:\000\000\0258\000\000\000\000\000\000\000\000\000\000\b\000\001\011N\000\000\144\000\000\000\000\000\000Mv\000\000\0262\000\000P\000\000h\000\000'\000\000h\000\000L\016\000\000\000\000\000\000c\030\000\000\000\000\000\000P\012\000\000O\000\000Z\028\000\000\000\000\000\000xN\000\000\000\000\000\000\027,\000\000\\\000\000_Z\000\000\000\000\000\000i\156\000\000_Z\000\000\142\022\000\000\000\000\000\000\000\000\000\000 \014\000\000\000\000\000\000\000\000\000\000\145\000\000\144\000\000\145\000\000h\000\000\144\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000U\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000U\130\000\000\000\000\000\000iz\000\000\000\000\000\000Z\000\000\000\000\000\000L\000\000X\000\000\000\000\000\000i\140\000\000\000\000\000\000\028&\000\001\012^\000\000L\004\000\000W\n\000\000P\000\000h\000\000'\000\000i\014\000\000\\:\000\000\\:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\N\000\000\000\000\000\000Wf\000\000O\000\000id\000\000X\028\000\000_\158\000\000R\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\138\000\000O\000\000\000\000\000\000h\000\000O\000\000\000\000\000\000\000\000\000\000h\138\000\000\000\000\000\000iv\000\000Y\000\000i\000\000\000R\132\000\000\000\000\000\000o\000\000O\000\000\000\000\000\000h\000\000O\000\000\000\000\000\000\000\000\000\000o\000\000\000\000\000\000\000\000\000\000Z\024\000\000\130@\000\000\000\000\000\000\000\000\000\000\000\000\000\000^&\000\000_\000\000\018h\000\000]b\000\000\000\000\000\000_f\000\000L\004\000\000\131\016\000\000\000\000\000\000\000\000\000\000i\000\000_f\000\000q8\000\000i\000\000_f\000\000\000\000\000\000h\000\000i\000\000_f\000\000\000\000\000\000\000\000\000\000q8\000\000\000\000\000\000\000\000\000\000`2\000\000%\000\000\\\000\000\000\000\000\000i\000\000\127`\000\000\128\022\000\000\000\000\000\000U:\000\000\018h\000\000]\000\000YZ\000\000V.\000\000_N\000\000L\004\000\000hr\000\000\000\000\000\000\000\000\000\000S\142\000\000i\024\000\000'\000\000\000\000\000\000L\004\000\000kN\000\000P\000\000i\030\000\000'\000\000iH\000\000\\:\000\000\000\000\000\000\\N\000\000\000\000\000\000X\000\000O\000\000h\138\000\000\000\000\000\000o\000\000\000\000\000\000^\000\000`\156\000\000\018h\000\000`\000\000\000\000\000\000i\000\000_f\000\000q8\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\004\000\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000i\000\000\000\000\000\000L\000\000W\b\000\000P\000\000i>\000\000'\000\000if\000\000L\016\000\000\000\000\000\000]&\000\000\000\000\000\000O\000\000i\000\000Y\000\000iF\000\000X\006\000\000\000\000\000\000_\000\000O\000\000\000\000\000\000i2\000\000O\000\000\000\000\000\000\000\000\000\000_\000\000\000\000\000\000\000\000\000\000Rf\000\001\005|\000\000\000\000\000\000\000\000\000\000\000\000\000\000_4\000\000`\000\000\000\000\000\000\\\138\000\000\000\000\000\000_\144\000\000L\000\000VZ\000\000\000\000\000\000\000\000\000\000j\030\000\000_\144\000\000`~\000\000j\"\000\000_\144\000\000\000\000\000\000iJ\000\000j6\000\000_\144\000\000\000\000\000\000\000\000\000\000`~\000\000\000\000\000\000\000\000\000\000n\000\000%\000\000K\000\000j\006\000\000\127`\000\000r\000\000\000\000\000\000Z\000\000Y:\000\000n\022\000\000\000\000\000\000S\142\000\000ir\000\000\134T\000\000\000\000\000\000L\000\000Y\000\000P\000\000iv\000\000'\000\000i\000\000L\016\000\000\000\000\000\000]&\000\000\000\000\000\000P\012\000\000_\000\000\000\000\000\000_~\000\000b\128\000\000\000\000\000\000`\000\000\000\000\000\000j\\\000\000_\144\000\000`~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000_H\000\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\000_\000\000\028\000\000g\000\000\000N\000\000\000\000\000\000eH\000\000j^\000\000j&\000\000U\004\000\000Yr\000\000\000\000\000\000`\\\000\001\022T\000\000W\n\000\000\000\000\000\000`\134\000\000h\000\000\000\000\000\000jN\000\000\000\000\000\000U\022\000\000\000\000\000\000`\134\000\000\000\000\000\000\000\000\000\000] \000\000^6\000\000a\004\000\000\000\000\000\000Z\000\000i\000\000U\004\000\000\157\000\000`Z\000\000\000\000\000\000\000\000\000\000 \014\000\000V\022\000\000\000\000\000\000\000\000\000\000}J\000\000<\000\000`N\000\000\000\000\000\0009\000\000\000\000\000\000`\000\000\127l\000\000\000\000\000\000\000\000\000\000jR\000\000\000\000\000\000I\014\000\000N8\000\000aJ\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000<\000\000i\000\000J\000\000Vl\000\000 \014\000\000\154\000\000VT\000\000N`\000\000`p\000\000 \014\000\000\006\000\000\000\000\000\000VT\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\\\000\000J\000\000c\000\000 \014\000\000\154\000\000VT\000\000\000\000\000\000VT\000\000\000\000\000\000 \014\000\000r\000\000N`\000\000d\000\000 \014\000\000\154\000\000VT\000\000\000\000\000\000VT\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000K>\000\000\000\000\000\000b\000\000|\150\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\000\000j,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000<\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000j6\000\000\000\000\000\000\000\000L\004\000\000L\004\000\000eh\000\000\000\000\000\000jt\000\000\000\000\000\000YR\000\000\000\000\000\000j\132\000\000\000\000\000\000a\000\000\000\000\000\000\000\000\000\000 \014\000\000X\000\000\000\000\000\000\000\000\000\000}J\000\000j\130\000\000\000\000\000\000I\014\000\000N8\000\000a\130\000\000\000\000\000\000\000\000\000\000L\000\000\000\000\000\000b\018\000\000\000\000\000\000\000\000\000\000\000\000j\132\000\000\000\000\000\000`\134\000\000\000\000\000\000_H\000\000\000\000\000\000j\132\000\000\000\000\000\000Y\000\000\\\000\000\000\000\000\000j\142\000\000\000\000\000\000b&\000\000\000\000\000\000\000\000\000\000 \014\000\000`t\000\000\000\000\000\000\000\000\000\000}J\000\000j\144\000\000\000\000\000\000I\014\000\000N8\000\000a\000\000\000\000\000\000\000\000\000\000U\152\000\000\000\000\000\000b\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000d\000\000 \014\000\000H\000\000X\000\000 \014\000\000\000\000e\000\000 \014\000\000\020\000\000<\000\000\000\000\000f\000\000 \014\000\000\000\000g\144\000\000 \014\000\000\000\000\000\000\000\000\028\000\000\000\000\000\000hh\000\000<\000\000x\000\000ZF\000\000 \014\000\000\136\000\000i@\000\000<\000\000D\000\000<\000\000t\000\000j\024\000\000<\000\000\016\000\000g\142\000\000<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000j\150\000\000\000\000\000\000\000\000'\000\000j\020\000\000 \014\000\000t\000\000\000\000\000\000\000\000\000\000\000\000\154\000\000n\000\000\000\000\000\000\\\022\000\000j\000\000\000\000\000\000\\\022\000\000j\000\000\000\000\000\000].\000\000<\000\000@\000\000'\000\000j\"\000\000<\000\000\012\000\000\014\000\000<\000\000\132\000\001\015:\000\000s\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000Q\000\000\000\000\000\000\\\022\000\000j\000\000T\000\000Q\000\000\000\000\000\000\\\022\000\000j\000\000T\000\000Q\000\000\000\000\000\000\144\000\000M\002\000\000j2\000\000<\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000[\000\000\000\000\000\000j\000\000\000\000\000\000[\n\000\000j\000\000\000\000\000\000<\000\000<\000\000\014\000\000<\000\000\000\000\001\015\000\000t\b\000\000j\000\000\000\000\000\000`\000\000T\000\000N\000\000 \014\000\000\b\000\000\000\000\000\000\000\000\000\000r\000\000T\000\000N\000\000\000\000\000\000\\\022\000\000j\000\000T\000\000N\000\000\000\000\000\000\\\022\000\000j\000\000T\000\000N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\000\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000a<\000\000\000\000\000\000\000\000\000\000Y:\000\000j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000k\000\001\017\030\000\000l\000\000\000\000\000\000 \014\000\000\000\000\000\000\000\000\000\000\000\000[\000\000 \014\000\0008\000\000\000\000\000\000\000\000\000\000<\000\001\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029 \000\000Z\000\000S\154\000\000U\004\000\000Zj\000\000^\004\000\000\000\000\000\000j\000\000\000\000\000\000b\000\000\000\000\000\000\000\000\000\000 \014\000\000a\000\000\000\000\000\000\000\000\000\000}J\000\000j\000\000\000\000\000\000I\014\000\000N8\000\000a\000\000\000\000\000\000\000\000\000\000bZ\000\000\000\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000m\136\000\000\000\000\000\000j\000\000\000\000\000\000nd\000\000 \014\000\0006\000\000\000\000\000\000b6\000\000\000\000\000\000\000\000\000\000\002\000\000a2\000\000{\000\000\000\000\000\000k\002\000\000\000\000\000\000\000\000\000\000t\000\000\000\000jz\000\000 \014\000\000l\000\000\000\000\000\000\000\000 \014\000\000\000\000Ih\000\000\000\000\000\000\000\000\000\000\030\026\000\000\b\000\000o\000\000\000\000Q\020\000\000N\006\000\000\000\000\000\000\000\000Q\020\000\000\000\000\000\000k\018\000\000\146\000\000Q\020\000\000\000\000\000\000k\016\000\000^\000\000Q\020\000\000\000\000\000\000*\000\000Q\020\000\000\000\000\000\000\000\000Q\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000<\000\000O&\000\000J\000\000e\000\000 \014\000\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\000\000T6\000\000\000\000\000\000\000\000\000\000k\016\000\000\000\000\000\000J\000\000\000\000\000\000k\026\000\000 \014\000\000\000\000\000\000\000\000\000\000j\000\000U:\000\000\018h\000\000_\154\000\000 \014\000\000\000\000\000\000k>\000\000_Z\000\000k,\000\000 \014\000\000\000\000\000\000_B\000\000\b\000\000o\000\000\000\000\000\000\031\020\000\000 \014\000\000\000\000\000\000 \014\000\000\000\000\000\000!\b\000\000 \014\000\000\000\000\000\000\"\002\000\000 \014\000\000\000\000\000\000:\000\000\000\000\000\000\000\000\000\000]@\000\000U\004\000\000UZ\000\000L\004\000\000]Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000c\b\000\000\000\000\000\000\000\000\000\000c@\000\000\000\000\000\000\000\000\000\000cd\000\000\000\000\000\000\000\000\000\000c\150\000\000\000\000\000\000\000\000\000\000\154\000\000\"\000\000[\030\000\000#\000\000$\000\000k,\000\000j\000\000<\000\000\140\000\000<\000\000t\000\000\000\000\000\000c$\000\000\000\000\000\000\000\000\000\000a2\000\000k:\000\000\000\000\000\000Y\000\000k\006\000\000\000\000\000\000\000\000\000\000 \014\000\000\000\000\000\000\000\000\000\000\000\000NZ\000\000\144\000\000M\002\000\000j\000\000<\000\000\b\000\000kb\000\000<\000\000\000\000\000\000\000\000\000\000kD\000\000U:\000\000\018h\000\000`\000\000<\000\000\000\000\000\000k\134\000\000_Z\000\000kl\000\000<\000\000\000\000\000\000`\138\000\000;\000\000<\000\000\000\000\000\000<\000\000\000\000\000\000=\000\000<\000\000\000\000\000\000>\000\000<\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000NZ\000\000\000\000\000\000\000\000\000\000]\000\000 \014\000\000\016\000\000\000\000\000\000\000\000\000\000<\000\001\006\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000[\000\000T\136\000\000U\004\000\000^N\000\000`\156\000\000\000\000\000\000kl\000\000\000\000\000\000cP\000\000\000\000\000\000\000\000\000\000 \014\000\000bP\000\000\000\000\000\000\000\000\000\000}J\000\000kl\000\000\000\000\000\000I\014\000\000N8\000\000b\000\000\000\000\000\000\000\000\000\000c\000\000\000\000\000\000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000kn\000\000\000\000\000\000\000\000\000\000c\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N8\000\000c\012\000\000\000\000\000\000\000\000\000\000_\140\000\000k\000\000\000\000\000\000NZ\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000kx\000\000\000\000\000\000ct\000\000\000\000\000\001\014d\000\001\r \000\000i$\000\000\000\000\000\000kD\000\000\000\000\000\000\000\000\000\000c\000\000\000\000\000\000\000\000\000\000^D\000\000NZ\000\000\000\000\000\000a\000\000\000\000\000\000k|\000\000\000\000\000\000\000\000\000\000\000\000c\000\000\000\000\000\000\000\000\000\000kH\000\000\000\000\000\000ch\000\000\000\000\000\000\128\"\000\000\000\000\000\000k\134\000\000\000\000\000\000kP\000\000\000\000\000\000dn\000\000k\000\000\000\000\000\000NZ\000\000\000\000\000\000cv\000\000\000\000\000\000k\144\000\000\000\000\000\000k\146\000\000\000\000\000\000K\000\000k\148\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\n\000\000Ot\000\000\000\000\000\000\000\000\000\000T\000\000k\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\000\000\000\000\000\000@\000\000\000\000b\000\000\000\000\000\001\020\156\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000i\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000p\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000\130\000\000\135\000\000\000\000\000\000b\000\000\000\000\000\001\b\000\000b\000\000\000\000\000\001\020\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000o\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000r\014\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000k\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000b\000\000\000\000\000\000\127\130\000\000P~\000\000\000\000\000\000_.\000\000\000\000\000\000\127\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\130\000\000\000\000\000\000\143`\000\000\b\000\000b\000\000\159\154\000\000k\000\000k\000\000I4\000\000N\000\000k\000\000\000\000\000\000\\\134\000\000b\000\000k\000\000k\000\000\127\130\000\000\000\000\000\000I4\000\000N\000\000k\000\000\000\000\000\000\000\000\000\000\127\130\000\000\000\000\000\000\000\000\000\000k\000\000\127`\000\000\000\000\000\000\000\000k\000\000\000\000\000\000O\000\000\000\000\000\000aP\000\000\000\000\000\000l\006\000\000\000\000\000\000l\n\000\000k\000\000<\000\000\132\000\000<\000\001\003\000\000\000\000\000\000z\000\000\000\000\000\000a\000\000\000\000\000\000b0\000\000\000\000\000\000\000\000\000\000[\128\000\000\000\000\000\000L\000\000Z0\000\000\000\000\000\000l\016\000\000\000\000\000\000Q\134\000\000\000\000\000\000c\000\000\000\000\000\000l\022\000\000\000\000\000\000c\000\000\000\000\000\000\000\000\000\000L,\000\000k\000\000\000\000\000\000o@\000\000]X\000\001\016\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000NZ\000\000\000\000\000\000c\140\000\000\000\000\000\000d\144\000\000\000\000\000\000\000\000\000\000i\142\000\000jf\000\000lX\000\000\000\000\000\000NZ\000\000\000\000\000\000c\000\000\000\000\000\000u\000\000<\000\000O&\000\000l&\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\000\001\015:\000\000vJ\000\000l.\000\000\000\000\000\000a2\000\000\000\000\000\000l0\000\000\000\000\000\001\015\000\000Ű\000\000U\130\000\000\000\000\000\000\000\000\000\000k\000\000\000\000\000\000\000\000\000\000}J\000\000k\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000k\000\000\000\000\000\000<\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000Y\n\000\000\000\000\000\000\000\000\000\000^6\000\000L0\000\000Jh\000\001\015:\000\000N\000\000%\000\000\\\000\000l2\000\000\127`\000\000\150\000\000o\000\000o\000\000M\024\000\000\000\000\000\000k\142\000\000o\000\000o\000\000R\000\000\000\000\000\000R\000\000\000\000\000\000S\000\000\000\000\000\000\000\000\000\000V\000\000o\000\000o\000\000V\000\000k\146\000\000o\000\000o\000\000V\000\000\000\000\000\000V\000\000\000\000\000\000\000\000\000\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\000\001\016\000\000j\000\000l~\000\000\000\000\000\000NZ\000\000\000\000\000\000d\000\000\000\000\000\001\014\000\001\016\000\000f\000\000NZ\000\000\000\000\000\000d\000\000\000\000\000\000V.\000\000u`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000\000\000\000\000[^\000\000I\000\000V.\000\000A\000\000\000\000\000\000O\000\000lT\000\000l$\000\000<\000\000\000\000\000<\000\001\006\030\000\000\000\000\000\000B\154\000\000<\000\000\140\000\000\b\000\001\015:\000\000\000\000U\004\000\000C\146\000\000L0\000\000Jh\000\001\015:\000\000:\000\000<\000\000\b\000\000L\130\000\000WT\000\000\000\000\000\000>\000\000\000\000\000\000L0\000\000l&\000\000\144\000\000`V\000\000<\000\000\014\000\000<\000\001\007\024\000\001\015:\000\000b\000\000P\000\000k\000\000'\000\000k\000\000\\:\000\000\000\000\000\000V\144\000\000a\000\000<\000\000\132\000\000'\000\000k\000\000<\000\000\000\000\000\000\000\000\000Wf\000\000l2\000\000d\"\000\000\000\000J\030\000\000d\148\000\00002\000\000lf\000\000\000\000\000\00002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000J\030\000\000\000\000\000\000\\\022\000\000lp\000\000J\030\000\000\000\000\000\000\\v\000\000lt\000\000d\000\000\000\000J\030\000\000\000\000\000\000\150\000\000J\030\000\000\000\000\000\000\\\022\000\000l\130\000\000J\030\000\000\000\000\000\000\\\022\000\000l\132\000\000J\030\000\000\000\000\000\000\000\000\000\000\\\022\000\000l\140\000\000J\030\000\000\000\000\000\000\000\000\000\000NN\000\000O\000\000\000\000\000\000k\000\000O\000\000\000\000\000\000\000\000\000\000NN\000\000\000\000\000\000<\000\000\000\000\000\001\015:\000\000\000\000D\138\000\000<\000\000|\000\000<\000\000\000\000<\000\001\012\000\000<\000\000t\000\000<\000\000\000\000<\000\000l\000\000<\000\000\000\000<\000\000d\000\000<\000\000\000\000<\000\000\\\000\000<\000\000\000\000<\000\000T\000\000<\000\000\000\000<\000\001\000L\000\000<\000\001\000\000\000<\000\001\001D\000\000<\000\001\001\000\000<\000\001\002<\000\000{.\000\000<\000\001\002\000\001\0034\000\000<\000\001\003\000\000<\000\001\004,\000\000<\000\001\004\000\000<\000\001\005$\000\000\000\000\000\000\000\000\000\000l\146\000\000\000\000\000\000<\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\000\000 \014\000\001\005\000\000d\000\000<\000\001\006\030\000\000_\000\000 \014\000\001\006\156\000\000e\000\000<\000\001\007\024\000\000<\000\001\007\024\000\000f\000\000<\000\001\007\148\000\000\000\000<\000\001\b\016\000\000b2\000\000_Z\000\000\000\000\000\000l\000\000_Z\000\000Y\000\000l\000\000_Z\000\000\000\000\000\000k\000\000l\000\000_Z\000\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000\000E\130\000\000%\000\000\\\000\000l\000\000\127`\000\000\150\000\000\000\000\000\000\\\000\000I\000\000V.\000\000Fz\000\000\000\000\000\000\b\000\000U\004\000\000Gr\000\000P\000\000l\028\000\000'\000\000lB\000\000\\:\000\000\000\000\000\000X\000\000NN\000\000\000\000\000\000Hj\000\000c\000\000_Z\000\000\000\000\000\000l\000\000_Z\000\000Y\000\000\000\000\000\000\000\000\000\000<\000\000\000\000\000\000\000\000\000\000^6\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000T\000\000^\000\000\000\000\000\000d.\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"), (16, "\t\t\000\t\t\005\002\t\001\n\t\001>\001\014\t\t\t\001n\t2:\t\t\t\t\t\t\011.\t\t\t\t\t\t\029\029\001\022\t\t\001\001\000\014\t\t\t\t\t\001\026\t\t2R\t\001\001\002\0022V2Z\t\t\001z\001\t\t\021r\0042\004F\t\004~\024\004\130\004\004\b\158\t\b\030\030\t\t\t\t\t\t\t\b\t\t\t\t\t\030\r\b\b\t2^\014\154\t\t\t\t\t\t\t9\t\t\t\026f\t\031^\t\t\t\t\t\t\t\b\t\t\t\t\014\b\014\006\t\t\t\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\004.\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\t\t\000\t\t\005\002\t\001\n\t\001>\001\014\t\t\t\001n\t2:\t\t\t\t\t\t\011.\t\t\t\t\t\t\029\029\001\022\t\t\001\001\000\014\t\t\t\t\t\001\026\t\t2R\t\001\001\002\0022V2Z\t\t\001z\001\t\t\021r\0042\004F\t\004~\024\004\130\004\004\b\158\t\b\030\030\t\t\t\t\t\t\t\b\t\t\t\t\t\030\r\b\b\t2^\014\154\t\t\t\t\t\t\t2\t\t\t\026f\t\031^\t\t\t\t\t\t\t\b\t\t\t\t\014\b\014\006\t\t\t\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\n\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n\n}\n}\n}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\011.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\0112\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\015*\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015Z\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\021.\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\022\022\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\022\004\145\004\145\004\145\004\145\022\023\006\023\014\022\023\022\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\023\030\023&\004\145\004\145\004\145\004\145\004\145\004\145\004\145\023.\023F\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\022\022\0236\023>\023N\004\145\004\145\004\145\004\145\023V\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\023\134\023~\004\145\023\142\004\145\004\145\004\145\004\145\023f\004\145\004\145\004\145\004\145\004\145\004\145\023n\023v\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\023\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022\022\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022\006\t\006\t\006\t\006\t\022\023\006\023\014\022\023\022\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\023\030\023&\006\t\006\t\006\t\006\t\006\t\006\t\006\t\023.\023F\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022\022\0236\023>\023N\006\t\006\t\006\t\006\t\023V\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\023~\006\t\006\t\006\t\006\t\006\t\006\t\023f\006\t\006\t\006\t\006\t\006\t\006\t\023n\023v\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022\022\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022\006\005\006\005\006\005\006\005\022\023\006\023\014\022\023\022\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\023\030\023&\006\005\006\005\006\005\006\005\006\005\006\005\006\005\023.\023F\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022\022\0236\023>\023N\006\005\006\005\006\005\006\005\023V\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\023~\006\005\006\005\006\005\006\005\006\005\006\005\023f\006\005\006\005\006\005\006\005\006\005\006\005\023n\023v\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022\022\005\005\005\005\005\005\005\005\005\005\022\005\005\005\005\022\023\006\023\014\022\023\022\005\005\005\005\005\005\005\005\005\023\030\023&\005\005\005\005\005\005\005\023.\023F\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022\022\0236\023>\023N\005\005\005\005\023V\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\023~\005\005\005\005\005\005\023f\005\005\005\005\005\005\023n\023v\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022\022\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022\006\017\006\017\006\017\006\017\022\023\006\023\014\022\023\022\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\023\030\023&\006\017\006\017\006\017\006\017\006\017\006\017\006\017\023.\023F\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022\022\0236\023>\023N\006\017\006\017\006\017\006\017\023V\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\023~\006\017\006\017\006\017\006\017\006\017\006\017\023f\006\017\006\017\006\017\006\017\006\017\006\017\023n\023v\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022\022\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022\006\r\006\r\006\r\006\r\022\023\006\023\014\022\023\022\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\023\030\023&\006\r\006\r\006\r\006\r\006\r\006\r\006\r\023.\023F\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022\022\0236\023>\023N\006\r\006\r\006\r\006\r\023V\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\023~\006\r\006\r\006\r\006\r\006\r\006\r\023f\006\r\006\r\006\r\006\r\006\r\006\r\023n\023v\t\t\t\t\t\027^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\011.\t\t\t\t\t\t\027v\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021r\t\t\t\t\024\t\t\t\t\t\t\t\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026f\t\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\028^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\027^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\027v\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021r\t\t\t\t\024\t\t\t\t\t\t\t\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026f\t\027\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\024\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\026f\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\t\t\t\t\t\005\002\t\001\030\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\011.\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\001\"\030\002\t\t\t\t\t\t\021r\0042\t\t\t\024\t\t\029\t\t\t\030\030\t\t\t\t\t\t\t\t\t\t\t\t\019*\t\t\t\t\t\019.\t\t\t\t\t\t\t\t\t\t\t\026f\t\031^\t\t\t\t\t\t\030\t\t\t\t\t\t\t\t\006\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\031\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005\002\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021r\t\t\t\t\024\t\t\t\t\t\t\030\030\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026f\t\031^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005\002\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\011.\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021r\t\t\t\t\024\t\t\t\t\t\t\030\030\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026f\t\031^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\001\030\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\029\001\"\b\b\b\b\b\b\b\b\0042\b\b\b\024\b\b\029\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\019*\b\b\b\b\b\019.\b\b\b\b\b\b\b\b\b\b\b\026f\b\b\b\b\b\b\b\b\030\b\b\b\b\b\b\b\b\b\b\b\b\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}#:#B\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}#J\015}\015}\015}\015}#Z#b#j#r#z\015}\015}\015}\015}\015}\015}\015}\015}\015}#\130#\138\015}\015}\015}\015}\015}\015}\015}#\146#\154\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}#####\015}\015}\015}\015}#\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}#\015}\015}\015}\015}\015}\015}#\015}\015}\015}\015}\015}\015}##\015\015\000\n\015\015\015\015\001\n&~\004\n\001\014\015\015\015\004:\015\001\018\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\001\022\015\015\001\001\015\015'\014\015\015\015\001\026\015\015'\026\015\001\001\021z\023'2\015\015\001z\001\015\015\021r\0042\004F\015\004~\015\004\130\004\004\024\015\b\015\015\015\015\015\015\015'B\015\0256\015\015\015\015\025V\025\138\b\b'J'b\026F\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015'j\b\015\015\015\015#&\b#.\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015Z\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\021.\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015$\134\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\0252\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129#:#B\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129#J\015\129\015\129\015\129\015\129#Z#b#j#r#z\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129#\130#\138\015\129\015\129\015\129\015\129\015\129\015\129\015\129#\146#\154\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129#####\015\129\015\129\015\129\015\129#\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129#\015\129\015\129\015\129\015\129\015\129\015\129#\015\129\015\129\015\129\015\129\015\129\015\129##\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015$\134\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\0252\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\1571f\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\004.\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\005u\017E\017E\017E\005u\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t3V\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\000\t\t\t\t\001\n\t\001>\001\014\t\t\t\001n\t\001\018\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\001\022\t\t\001\001\000\014\t\t\t\t\t\001\026\t\t2R\t\001\001\002\002\004*2Z\t\t\001z\001\t\t\t\0042\004F\t\004~\004\002\004\130\004\004\b\158\t\b\t\t\t\t\t\t\t\t\t\b\t\t\t\t\t\030\r\b\b\t2^\014\154\t\t\t\t\t\t\t\t\t\t\t\005R\t\t\t\t\t\t\t\t\t\b\t\t\t\t\014\b\014\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022\022\t\t\t\t3j\t\t\t\t\t\022\t\t\t\t\022\023\006\023\014\022\023\022\t\t\t\t\t\t\t\t\t\023\030\023&\t\t\t\t\t\t\t\023.\023F\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022\022\0236\023>\023N\t\t\t\t\023V\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\023~\t\t\t\t\t\t\023f\t\t\t\t\t\t\023n\023v\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022\022\t\t\t\t3v\t\t\t\t\t\022\t\t\t\t\022\023\006\023\014\022\023\022\t\t\t\t\t\t\t\t\t\023\030\023&\t\t\t\t\t\t\t\023.\023F\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022\022\0236\023>\023N\t\t\t\t\023V\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\023~\t\t\t\t\t\t\023f\t\t\t\t\t\t\023n\023v\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\1573\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\005y\017E\017E\017E\005y\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\b\b\000\b\b\b\b\001\n\b\001>\001\014\b\b\b\001n\b\001\018\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\001\022\b\b\001\001\b\b\b\b\b\b\001\026\b\b\b\b\001\001\002\002\004*\b\b\b\001z\001\b\b\b\0042\004F\b\004~\024\004\130\004\004\b\158\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\t\030\r\b\b\b\b\014\154\b\b\b\b\b\b\b\b\b\b\b\026f\b\b\b\b\b\b\b\b\b\b\b\b\b\b\014\b\014\b\b\b\b\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\002\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\t!\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\004\002\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\005R\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\003\003\002\b\b\b\b\b\b\b\b\b\b\b\b\b\003\b\b\b\b\b\b\003\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\003\003\b\b\b\b\b\b\b\b\002\014\003\003\b\004\002\005&\b\005*\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\005R\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\b\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\004N\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\012\n\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\012\030\n}\n}\n}\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\019\030\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\019\142\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\t\t\t\t\026\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026\t\t\t\t\t\t\027\002\027\022\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\019\006\t\t\t\t\004\002\t\t\t\t\t\t\t\027*\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005R\t\028\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\018\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\027\002\027\022\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\019\006\t\t\t\t\004\002\t\t\t\t\t\t\t\027*\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005R\t\028\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\150\t\001\030\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\001V\030\002\t\t\t\t\t\t\019\006\002\014\t\t\t\004\002\t\t \t\t\t !\006\t\t\t\t\t\t\t\t\t\t\t\t\019*\t\t\t\t\t\019.\t\t\t\t\t\t\t\t\t\t\t\005R\t!\146\t\t\t\t\t\t!\014\t\t\t\t\t\t\t\t\006\t\t\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\021\150\021\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\021\006\t\006\t\006\t\006\t\021\021\021\021\021\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022\006\022\014\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022\022\022.\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\021\158\021\022\030\022&\0226\006\t\006\t\006\t\006\t\022>\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\006\t\022f\006\t\006\t\006\t\006\t\006\t\006\t\022N\006\t\006\t\006\t\006\t\006\t\006\t\022V\022^\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\021\150\021\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\021\006\005\006\005\006\005\006\005\021\021\021\021\021\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022\006\022\014\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022\022\022.\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\021\158\021\022\030\022&\0226\006\005\006\005\006\005\006\005\022>\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\022f\006\005\006\005\006\005\006\005\006\005\006\005\022N\006\005\006\005\006\005\006\005\006\005\006\005\022V\022^\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\150\021\005\005\005\005\005\005\005\005\005\005\021\005\005\005\005\021\021\021\021\021\005\005\005\005\005\005\005\005\005\022\006\022\014\005\005\005\005\005\005\005\022\022\022.\005\005\005\005\005\005\005\005\005\005\005\005\005\005\021\158\021\022\030\022&\0226\005\005\005\005\022>\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\022f\005\005\005\005\005\005\022N\005\005\005\005\005\005\022V\022^\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\021\150\021\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\021\006\017\006\017\006\017\006\017\021\021\021\021\021\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022\006\022\014\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022\022\022.\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\021\158\021\022\030\022&\0226\006\017\006\017\006\017\006\017\022>\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\006\017\022f\006\017\006\017\006\017\006\017\006\017\006\017\022N\006\017\006\017\006\017\006\017\006\017\006\017\022V\022^\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\021\150\021\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\021\006\r\006\r\006\r\006\r\021\021\021\021\021\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022\006\022\014\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022\022\022.\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\021\158\021\022\030\022&\0226\006\r\006\r\006\r\006\r\022>\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\006\r\022f\006\r\006\r\006\r\006\r\006\r\006\r\022N\006\r\006\r\006\r\006\r\006\r\006\r\022V\022^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\026\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\150\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\019\006\t\t\t\t\004\002\t\t\t\t\t\t !\006\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005R\t!\146\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\029\150\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\026\t\t\t\t\t\t\029\029\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\019\006\t\t\t\t\004\002\t\t\t\t\t\t !\006\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\005R\t!\146\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\b\b\b\b\b\b\001\030\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\029\001V\b\b\b\b\b\b\b\b\002\014\b\b\b\004\002\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\019*\b\b\b\b\b\019.\b\b\b\b\b\b\b\b\b\b\b\005R\b\b\b\b\b\b\b\b!\014\b\b\b\b\b\b\b\b\b\b\b\b\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\021\150\021\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\021\004\145\004\145\004\145\004\145\021\021\021\021\021\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\022\006\022\014\004\145\004\145\004\145\004\145\004\145\004\145\004\145\022\022\022.\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\021\158\021\022\030\022&\0226\004\145\004\145\004\145\004\145\022>\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\014\022f\004\145\014\004\145\004\145\004\145\004\145\022N\004\145\004\145\004\145\004\145\004\145\004\145\022V\022^\b\000\b\b\b\b\001\n\b\001>\001\014\b\b\b\001n\b\001\018\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\001\022\b\b\001\001\b\b\b\b\b\b\001\026\b\b\b\b\001\001\002\002\004*\b\b\b\001z\001\b\b\b\0042\004F\b\004~\004\002\004\130\004\004\b\158\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\t\030\r\b\b\b\b\014\154\b\b\b\b\b\b\b\b\b\b\b\005R\b\b\b\b\b\b\b\b\b\b\b\b\b\b\014\b\014\b\b\b\b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t4\158\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\000\t\t\t\t\001\030\t\004b\001F\t\t\t\004\134\t\001J\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\001\150\t\t\001\001\000\014\t\t\t\t\t\001\154\t\t2R\t\001\001\004\b4V\t\t\001z\004\018\t\t\t\002\014\004\022\t\b\004\002\r\146\004r\000\r\150\t\004\142\t\t\t\t\t\t\t\t\t\r\t\t\t\t\0146\014Z\004\146\004\150\t2^\014n\t\t\t\t\t\t\t\t\t\t\t\005R\t\t\t\t\t\t\t\t\t\004\154\t\t\t\t\014\138\r\154\014\142\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021\150\021\t\t\t\t4\t\t\t\t\t\021\t\t\t\t\021\021\021\021\021\t\t\t\t\t\t\t\t\t\022\006\022\014\t\t\t\t\t\t\t\022\022\022.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021\158\021\022\030\022&\0226\t\t\t\t\022>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022f\t\t\t\t\t\t\022N\t\t\t\t\t\t\022V\022^\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021\150\021\t\t\t\t4\t\t\t\t\t\021\t\t\t\t\021\021\021\021\021\t\t\t\t\t\t\t\t\t\022\006\022\014\t\t\t\t\t\t\t\022\022\022.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\021\158\021\022\030\022&\0226\t\t\t\t\022>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\022f\t\t\t\t\t\t\022N\t\t\t\t\t\t\022V\022^\b\000\b\b\b\b\001\030\b\004b\001F\b\b\b\004\134\b\001J\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\001\150\b\b\001\001\b\b\b\b\b\b\001\154\b\b\b\b\001\001\004\b\b\b\b\001z\004\018\b\b\b\002\014\004\022\b\b\004\002\r\146\004r\000\r\150\b\004\142\b\b\b\b\b\b\b\b\b\r\b\b\b\b\0146\014Z\004\146\004\150\b\b\014n\b\b\b\b\b\b\b\b\b\b\b\005R\b\b\b\b\b\b\b\b\b\004\154\b\b\b\b\014\138\r\154\014\142\b\b\b\b\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\1575\018\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\018\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015)~\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E;\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\017E\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\019:\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\0156\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}=r=z\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}=\130\015}\015}\015}\015}=\146=\154===\015}\015}\015}\015}\015}\015}\015}\015}\015}==\015}\015}\015}\015}\015}\015}\015}==\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}=====\015}\015}\015}\015}>\002\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}\015}>\018\015}\015}\015}\015}\015}\015}>\026\015}\015}\015}\015}\015}\015}>\">*\015:\015\015\015\015\001\030>;F\001F\015\015\015;j\015\001J\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\001\150\015\015\001\001\015\015)f\015\015\015\001\154\015\015?\n\015\001\001;;?\030\015\015\001z\004\018\015\015\019\006\002\014\004\022\015\b\015\r\146\004r\000;\015\004\142\015\015\015\015\015\015\015?\"\015;\015\015\015\015<\022<*\004\146\004\150?*3J\002\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129\015\129>\018\015\129\015\129\015\129\015\129\015\129\015\129>\026\015\129\015\129\015\129\015\129\015\129\015\129>\">*\012\r\t\t\007A\005\n\012\001.\004v\012\012\b\129\007A\004v\012:\012\012\012\015U\012\012\005\n\012\012\n\012\012\b\129\012\t\n\021\012\012\012\012\012\012\0125\012:\004\002\001\030\012\004\t\0044&\012\012\004\012\0012\012\012\012\012\012\0124.\012\004\022,\012\012\012\004r\000\015.\001\012\012Z\002\012\012\012\012\012\015N\t\005R.b\012.r.~.\146\003\012\012\t\t42\0124B\003B\012\005\012\012\016\154\n\021\012\003R\012\017N\019\019\012\012\012\0056\012\t\012\n\021\003b\012\012\t>\012\r=\t\012\012\012\005\n\r=4\tF\r=\r=\b\129\004Z\005,\r=\r=\r=\t\r=\r=\bz\r=\r=\029n\r=\r=\b\129\r=\021V\007N\r=\r\r=\r=\r=\r=\r=\004\002\0042\005\n\005\r=\004\002\n\149\001.\021^\r=\r=\r=\r=\004\r=\r=\r=\r=\r=\r=\003V\r=\r=\000\r=\r=\r\r=\r=\n\005\001\n\r=\001\030\001\014\r=\r=\r=\r=\r=\005R\0002\003Z\r=\005R\005\006\0051\029v\r=\r=\019\"\001v\t\r=\001*\004^\r=\001~\r=\r=\006\002\n^\019^-\r=--.\n\r=\r=\r=\011\"\r=\025\r=\n\149\n6\r=\r=\001\134\r=\012\nV\r=\r=\r=\nU\012\025\n\149\012\012\nU\0122\004\001.\012\012\012\012:\012\012\001\138\012\012\001.\012\012\t\012\0051\b\012\012\012\012\012\012\012\001^\004\001\142\011\012\004z\011\011\t}\012\012\004\012\t\012\012\012\012\012\012\001b\012\004\022\001\130\012\012\012\004r\000\019\146\001v\012\002\014\t\012\012\012\012\012\006\bn\011\150,V\012,f,\150,\018\012\012\014\t\024\138\024F\012\t\134\rV\012\014\t\012\012\019\014\t\012\003\012\n\149\b\003\012\012\012\t\138\012)~\012\011\019\012\012\rZ\012\r)\025\012\012\012\006\r)\003\018\b\r)\r)\b\b\005\007\146\r)\r)\r)$\n\019V\019z\b\r)\r)\t\t\r)\r)\t\149\r)\019\003J\r)\r\r)\r)\r)\r)\r)\000\014\002\014\005'\r)\004\002\015q\015q\019\r)\r)\r)\r)\nM\r)\r)\r)\r)\r)\r)\005i\r)\r)\019F\r)\r)\r\r)\r)\n\149\nM\r)\001\030\011\154\r)\r)\r)\r)\r)\011\"\001\000\014\b\r)\005R\t\133\n\t\026\r)\r)\006\006.\014\r)\nM\007!\r)\n\r)\r)\b\014\019^\001\r)\003&\t\158\001\r)\r)\r)\025f\r)\014\r)\015q\003\r)\r)\007\150\r)\000\005\r)\r)\r)\001\n\019J\001>\001\014\014\t\011\"\001n\t\001\018\001\001\005F\003v\005i\004F\b\002\006\005\024\004\004\t\0212\007N\001\001\001\001\001\001\001\t\0042\023\nM\001\026\004\002,\002\n\021^\004\004\002\002\004*\001\003\014\001\n\001z\001\004\004\007!\0042\004F\024\004~\004\002\004\130\004\004\b\158\003*\b9.\014\t\t\002\t\006\t\n\t\014\t\018\000]\t\150\b\n=\t\022\005R\014\005\t\030\r\b\b\014\t\030\014\154\t\025\n\001\b\014\t\024\005\014\014\t\014\005\024>\005R\nZ\001\030\012:\0042\014\005\n8\004\002\014\005\b\0252\007\011\002:\022\130\b\014\000\022\011\n\011\014\005\001\n\004\001>\001\014\t\tV\019*\001n\003\001\018\001\001\019.\rv\005\019:\000M\001\t\000M\000M\006\138\tZ\n6\005R\001\001\001\001\001\001\001\0156\003f\030\018\000]\001\026\rz\t\001\t\154\004\004\002\002\004*\001\030\019\019\001z\001\004\004\006\025\0042\004F\003j\004~\004\002\004\130\004\004\b\1584\b\0216\t\t\002\t\006\t\n\t\014\t\018\rN\007\b\012\n\t\022$\150\014\005\t\030\r\b\b\004\r\138\014\154\012\030+\003\130\000M\n6\021V\007N\014\004\002\014\005\030f\005R\005\017\022\t\0042\014\005\n3\004\002\014\005\b\021^\005\t\011\002\015\022\130\b\014\000\017.\011\n\011\014\007%\001\n\001\018\001>\001\014\n\006\025\004\001n\001\030\001\018\001\001\005\t\005R\t\n\b\002\006\005\145\b\b\n\"\b\154\014&\005R\001\001\001\001\001\001\001=>4F\n&\t\001\026\014\003\006\002\n\014\004\004\002\002\004*\t\019\019\001z\001\004\004\004\026\0042\004F\b\004~\004\002\004\130\004\004\b\158\t\b\0216\003\t\002\t\006\t\n\t\014\t\018\t\b\b\014\t\022\003\014\029\154\t\030\r\b\b\007%\004\"\014\1540\142\021:\014*\b\007\021V\007N\019\022/b\006\026\005\t\005R\007A\b\019\0042\005\145\n\021~\004\002\003\b\021^8\011\002\018R\022\130\b\014\000\n\011\n\011\014\nU\001\n\007A\001>\001\014\007A\nU2\001n\026n\001\018\001\001\026r\005\011=\019:\b\001\026n\b\b\005e'n\n^\005R\001\001\001\001\001\001\001\0156\011b\016&\0036\001\026\016.\011=\001\005\004\004\002\002\004*\014j\019\019\001z\001\004\004\003\0042\004F\017q\004~\004\002\004\130\004\004\b\158\t}\b\021Z\017q\t\002\t\006\t\n\t\014\t\018\000M\bn\b\bA\t\0228\0166\t\030\r\b\b\n\012:\014\154\007A\021:\012:\b\012\"\021V\007N\016B\007A\000M\011\"\005R\000M\000M\n5\0042\005e\n;\004\002\005\b\021^\tV\011\002\018R\022\130\b\014\000\016N\011\n\011\014\003*\001\n\005\001>\001\014\n5\nn\tZ\001n\015\001\018\001\001\004n\n\001\r\022\004\002\t\016V\t\133\012&\001v\005\018\004\005R\001\001\001\001\001\001\001\001!\006u\001\030\tb\001\026\001F\bA\0152\nE\004\004\002\002\004*\006\142\015\000M\001z\001\004\004\tf\0042\004F\005R\004~\004\002\004\130\004\004\b\158\015\b\015\tb\t\002\t\006\t\n\t\014\t\018\004\002\017]\b\020\014\t\022\017]2j\t\030\r\b\b\tf\001\030\014\154\015\001!\n5\023\150\006u\r\r\004j\001\001\030\n5\005R\001\003>\015\015\n\022\n\014\002\n\n\006f\b\005\0229R\011\002\005R\022\130\b\014\000\004\150\011\n\011\014\015\001\n\014\006\001>\001\014\nE\006Z\n\026\001n\003\001\018\001\001\004\022\006\t\019:\014\150\004r\000\n6\015\019:\019b\029-\134\001\001\001\001\001\001\001\0156\024\015\024\001\026\006\0156\019&\006f\004\004\002\002\004*\003\005:\011\001z\001\004\004 \0042\004F\011=\004~\004\002\004\130\004\004\b\158\003*\b\002\003\002\t\002\t\006\t\n\t\014\t\018\n\153\n\014\b\001\030\t\0229V\011\129\t\030\r\b\b-\t\014\154\000\003B\016q%R\003J\r\r\005n\001\003R\026\130\005R\001\002\014\003\002*\158\007E\n\014\002\011\129\019\b\003b\026\134\011\002\014V\022\130\b\014\000\007E\011\n\011\014\003\001\n\014\006\001>\001\014\007E\007E\012:\001n\007E\001\018\001\001\004\022 \b \014\150\004r\000\011=\011=\b\023\006n\027.\001\001\001\001\001\001\001\005\134\002\0146\n\153\001\026\004\002\003\002\019\150\0272\004\004\002\002\004*\025\002\023\001\n\001z\001\004\004 \0042\004F\004\002\004~\004\002\004\130\004\004\b\158\004\002\b\025.\nJ\t\002\t\006\t\n\t\014\t\018\rn\t\b\012\n\t\022\005R\021J\t\030\r\b\b\027\005\014\154\012\030\b\t\015J\007E\024\0042\nN\b\005R\004\002\005R\007E\026\011\"\0042\005R\n\019:\004\002\t\b\0252:\011\002\b\022\130\b\014\000:\011\n\011\014\007\001\n\0156\001>\001\014\004v\007\019*\001n\0115\001\018\001\001\019.\007\b\005R\b\b\b\b\b$\t\018\005R\001\001\001\001\001\001\001\005\018\t\005\001\026\012&\001v1n\t\004\004\002\002\004*\019\158\0115\001\030\001z\001\004\004\012\0042\004F\004\002\004~\004\002\004\130\004\004\b\158\b\b\0115\005\t\002\t\006\t\n\t\014\t\018\t\007\n\b\006\t\022\n\153\029\t\030\r\b\b\007\025&\014\154\0115\b2\b\001\030\029\001\"\014\001\030\005R\014\005R\011\t\0115\0042\006\018\n\004\002\004\002\006\b\029&\150\011\002\018R\022\130\b\014\000\014)\011\n\011\014\007!\001\n\011\001>\001\014\017U\011\019*\001n\017U\001\018\001\001\019.\012&\001v\b\014)\014)\n6\014)\t\021&\012\005R\005R\001\001\001\001\001\001\001$6\030$J?\001\026:\t5\026\n\153\004\004\002\002\004*\015Z\n\149\006.\001z\001\004\004\t\0042\004F\t\004~\004\002\004\130\004\004\b\158\001\030\b\bm%j\t\002\t\006\t\n\t\014\t\018\021.\014)\b\029\t\022\005\134\024\158\t\030\r\b\b\007!\026\014\154\014)\014)\bm\014)\nU\bm\bm\025\018\011\015\006B\005R\015\n\029\003\014)\012:\n\014)\014)\001\b?\014)\011\002\014)\022\130\b\014\014)\002\014\011\n\011\014\000\006\004\002\000\n\b5\0156\n\029\026\001\n\002\004\n\001\014\n\149\b\137\006\004:\012\001\018\006\001\030\015\007.\011\"\019*:N\014F\003J\015e\015e\019.\0176\019:\011~\001\022\004\002\016\006\001\001\000\014.\150\015:\005R\bm\016u\001\026\b5\011V\015F\0156\001\001\021z\023\023$\017]\001z\001\016\018\011\130\021r\0042\004F\003\004~\024\004\130\004\004\024\t\b\011Z\005R\t,^\b5\007\017]\024\016\026\0256\017]\bn\b5\tV\025V\025\138\b\b\025\025\026F\000i\003F\t&\015e\000i\000i\000i\000i\000i\tZ\b5\026f\000i\t\000i\012\130\be%j,\000i\026j\b\000i\000i\000i\006\149#&\b#.\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\be\t\000i\012\134\be\000i\003J\000i\000i\000i\000i\000i\000i\006\149\000i\000i\bj\006J\000i\000i\000i\026N\000i\000i\000i\000i\000i\000i\007\000i\025^\000i\000i\000i\000i\000i!\134\000i\000i\000i\026V\be\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\025\154\000i\014r\001v\006V\006M,b\007\000\000i\000i\000i\011%j$\007\000i\000i\000i\000i\000i\000i\000i%\154\000i\000i\000i\000i\be,\016\158\nU\002\016\000i\011\011\bM\012:\011\011\006\149\000i\000i\000i,\004\002\be\001\141\000i\000i\000i\000\018\000\022\000\026\000\030\000\"\007\000&\000*\000.\0002\0006\026n\000:\000>\000B(R\t'\030\000F\001\141\001\141\016\001\141\001\141\000J\006M\nU\012r\007\007\000N\007\007\005R\t\004\002\016\000R\000V\000Z\000^\000b\000f\0176\000j\000n\014;\n\014>\023\000r\000v$\012v\n\021\007\011\004F\017q\016\001\141\tQ\004\004\tQ\tQ\n%\000z\bM\007\000~\000\130\007\n5\005R\n5\n5\000\134\000\138\000\142\n\021\016\000\146\000\150\000\154\000\158\006\000\000\000$\001\141\n%\bn\003\002\000\000\000\t>\001\141\007\000\006\000\000\001.\n\001\141\007\006~\031\000\007\000\003\0180\022\007\001\141\001\141\000\000\000\002\018\002\022\002\026\002\030\002\"\007\002&\002*\002.\0022\0026\tQ\002:\002>\002B\006n\027\004N\002F\001\141\n5\025\030\019j\001\141\002J\0042\026~\003\003\004\002\002N\t\026\016y\n5\014\005\138\002R\002V\002Z\002^\002b\002f\006\002j\002n\014\006\b~\019V\019z\002r\002v(\006%j\t\026n ~\004\022\t)\001\141\r\004r\000-\001\030 \002z\005R\006\002~\002\130\003J\003\157\006\130\tb\007\002\134\002\138\002\142 \130-\150\002\146\002\150\002\154\002\158\019n\002\002\002 \001\141\tf\r\b\133\002\002\002\000\006\001\141\000\n\002\017q\002\002\001\n\002\004\n\001\014\n6\012\002\004:\002\001\018%f%j\001\141\001\141\002\002\002$n.\015e.\007J\019\014\006\019^\001\022-\006\001\001\000\014\012\015:\003\bM&B\001\026\t)v\015F\003\157\001\001\021z\023\0230B\031R\001z\001\003$\021r\0042\004F\t\004~\024\004\130\004\004\024 \134\b\006\007N+$\bQ\r\012\024 \0256-\011%j\003J\025V\025\138\b\b\025\025\026F:\159\005\t\005\t\r\r\bQ\bQ\019:\bQ\bQ\006\026f\012\011+%j\r\011\006(\022\026j\b\012:\006=\0156\005\t#&\b#.\t*\001\030\t.\bM\001F\007n\t6\006\006\bM\001J\001\001\006)\006\tJ\006\bQ\014v\r\bQ\r\003\0069B%j\026~\tz\001\001\t~\014z\001\001\019:(\004\002\006)\011\129\011\129\006)\006)\001\030\t\014~\tj\001v\bQ\007\bQ\003J\0156\004\004\027R\002\014\019^\bQ\n\004\002\011N\bQ\011v\011\134\014\130\004\142\0252\006=\t\002\t\006\t\n\t\014\t\018\029\007\005R$\t\022\004\002\b\129\005\t\027V\004\146\004\150\019\011\003\006\t+.\003\003\002$z\bM>.F/\130$\005R\003\018/\014\t/\"\019:\n\003\t\011\129\004\154\006)&*\011\002\003\011\006\011\012!\n\005R\011\n\011\014\0156\012!\012!'\012!\012!\007:\012!\012!\007b\012!\012!\r\"\012!\003\003\029F\012!\012!\012!\012!\012!\012!\b6\002\014\003\003\007\004\002\005&\n\005*\012!\012!\004\012!\0056\t\r&1j\001\012!\012!\02521v\004\022\007j\006\012!\012!\004r\0001\146$\134111\012!\012!\012!\012!\012!\t;\011\005\n\012!\005R\007\130$z\0252\b\12996\015.3\030\012!\030\030\029*\012!\t\012!\012!\006^\004\002\012!.b\012!.r.~.\146\012!\012!\012!\017\012!\007\016j\n-\012:\012!\012!\001.\012}\001.\029.\012!\012!\012!\012}\012}\001\012}\012}'\012}\012}%N\012}\012}\014\012}$\134\005R\t\r\012}\012}\012}\012}\012}\b\014\007\001%n\001\030\017\001\0252\012}\012}\012}\012}\014\012&\001v5\022\001v\012}\012}\t\017\012}\003\002\007\012}\r\012}\012}5>\0145N5Z5n\012}\012}\012}\012}\012}\007\t\004F%\146\012}\016\138\024\004\004\000\n6(6\018\0269:\012}\018\"\t\012}\b\012}\012}\b\b\019^1>\012}1N\016\146\007\134\012}\012}\012}\000\012}\016\154\011\000\005F\012}\012}8\150\012\029\0247\142\012}\012}\012}\012\029\012\029\t\012\029\012\029\t\012\029\012\029\018*\012\029\012\029\011\012\029\007N2\011\012\029\012\029\012\029\012\029\012\029\012\029\004\002\0186\t?\014\004'\138.J\000\029\012\029\012\029\004\012\029\0038\154\024\014\001.\017U\012\029\012\029\t\b\004\022'\146\018B\012\029\012\029\004r\0008\158\023\015f\000\000\012\029\012\029\012\029\012\029\012\029\005R\017U\t\025$\012\029\017U\007\018J\000\000$\146\026\020N7\012\029\020z\b\133\012\029\003J\012\029\012\029\nB\000\012\029\026\012\029\bE%2\n\012\029\012\029\012\029$\012\029\0077\017\0292\012\029\012\029\0172\012i7\031\012\029\012\029\012\029\012i\012i\n\r\r!\012i\012i\020\130\012i\012i\011\012i$\134\011\011\014\002\012i\012i\012i\012i\012i\004\002\020\142\b\142\n\n\001\030\n\n\0252\012i\012i\014\006\012i,\030\018\017:\0156-\026\012i\012i \"\031\004\022\007\020\154\012i\014\150\004r\000\0156!\n%/\"\012i\012i\012i\012i\012i\005R\bE\tU3\142\012i\tU\tU\0201z\007\003\n\005/$\150\012i\0033\142\012i\n%\012i\012i3\150\011 4\012i4\007\004N\012i\012i\012i(\012i$:!\n\005\012i\012i\001\030:;F\001F\012i\012i\012i;j\n\001J)\014\n\n\005.;\134\029v\n\bI\n\003J\0044&\n\b\003\018\001\150\b\b\001\001\000\014\005\n\0184.\tU\012:\001\154\b\129 \146;\004N\001\001;;; r\001z\004\018\004\002\029\146\019\006\002\014\004\022\019:\b\004\002\r\146\004r\000; \150\004\142\004\00242\020\0186\030\018\007 ;\0156; v )\"r<\022<*\004\146\004\150v\006!>\138\012!\012!\006!\003\150\004F\016=\006\012!\012!\004\004)J(\016=\019\016=\012!\012!\012!\012!\012!4(b,N\012!\012!\011%\004N\011\011\006\016=*\006\157\004N.j+\012!\004\002\012!\006E)f\t\012!,\"\012!,R+)r\012!\012!\012!\003\012!)\1425&(\012!\012!\012!\006\157\019\006\003\006E\012!\012!\012!\006E\t\003\003,&\b\014\006\003\003\005R\003\003)\158\003\0051\t\011\014\003\003\003\003\003))\001~,4z*v\011\031z<:\003\003\0145\004\002\019\003J\011\011\003\003\011\011\004F)\001\134\003\024\004\004\b\130,\006\014\018\b\134\003\003\003\003\003+,6\b\150\003\00303J\012:\001\138\019\006\157\t2,\005R,8\0051\003)1.n,\006\003\024\t\003\006\003\003\002\003\003\003*\003,\130\004N\006\003\003\003.\002\b\003\004N\003\003\003\tn\001\n\003\011\001\014*\b1\b1\n\004N\001\018\001\001\t:.\138\tr4F\b\001\003J\b\b1\154\006\003\003\tz\001\001\t~\t\130\001\001\019:\002\014\003\003+\004\002\005&\t\142\005*\t\t\t\001,\b1\0079\"\0156\004\0041\0042-\003\n\030\004\002\n*2\018\n2\nr6*\b.\022\005\n\t\002\t\006\t\n\t\014\t\018\b\1290.\006.Z\t\022\005R\b1-9*\b\b2\002\nz\004\002\b1\003>\b\b1\006Z.\026\006^\b1.\1425F\005R\t\146.^\003J\t.\158\n\r^\b1>\b\001\030\001\011\002&\150\011\006\n~\031r\tn\001\n\011\n\011\014\001\014\016\007\007\016\005R\001\018\001\0011.\tr\003J\001\002\0061\n\030\004\002\n*1\n2\nr\016\b\031\138\031\146\t\002\t\006\t\n\t\014\t\018\00631\1425\t\022\t\003\003\t\b\b2\006\nz,\017\0024\014\002\014\003\003\025\004\002\005&\025\005*5J\005R+\134\03133\006a\n\r>\006a\006a\b\017\n56\011\0024\018\011\006\n~\003\006\006\011\n\011\0143\003\0035j\r\r\n\006\003\0033\003\003\005R\0035:\026\002\b\014\002\003\003\003\003\0035\004\0023536V\004\002\026\018\n>\003\003\014\0065z6\1385?V\b\011\022\003\003\b\011>\004\022\t9\003\014\150\004r\0003\026\"\001\030\006a?^\003\003\003\003\0035~\005R6\0189j\0036B\005R\t\006\1499Z\t\t5r\026.\003\018\142\003\003\004\0020^\0039\0061 \011J\003\00619n5\003\003\003\012\029\003\020R\006\149\003\011\003\003\012J\019V\019z\012f\003\003\0036Z\t\012\029\012\029\007\012\029\012\029\r\012\029\012\029\005R\012\029\012\029\003J\012\029?\004\0024F\012\029\012\029\012\029\012\029\012\029\012\029\0206v\012\158\019\1304F5\025\012\t\012\029\012\029\b<\154,\012\r\t9\012\029\012\029\0044&\004F\0061\t\012\029\012\029\004\004\n\005\t\005R94.\012\029\012\029\012\029\012\029\012\029:\0064F9\012\029\012\029\006\149\00616\022\006\149-\0026F B\019^;f:\018:\030\n\005\012\029\r\n\012\0299;\130\r2\012\029?\012\02942:\n6~\012\029\012\029\012\029\012A\012\029\029v\006\149\r:\012\029\012\029\012\029<:\022:\"\rB\012\029\012\029\012\029<\012A\012A\012A\012A\012A\012A\012A\012A\012A\n\005\012A\012A\012A\012A4\rF\012A\012A\012A\012A\012A\012A\012A\rb\rf<\r\r\019\019\014b\012A\012A\012A\012A\n\005\014\014-\015r\012A\012A\012A\015\150\012A\012A\021Z\015\012A\012A\012A\012A\016\n\029v\016:4F\012A\012A\012A\012A\012A\012A\0074F\016F\012A\012A\006\149+\016\n\r-*\021V\007N\016\016>j.\012A\012A\016\017\030\0042\015\012A\012A\004\002\012A$\134\021^\015\012A\012A\012A\012I\012A\017\n\r\016v\012A\012A\012A\016\130\017\018\014\0252\012A\012A\012A\018.\012I\012I\012I\012I\012I\012I\012I\012I\012I\018:\012I\012I\012I\012I\018f\005R\012I\012I\012I\012I\012I\012I\012I\0044&\018\158\018\018\019+\019~\012I\012I\012I\012I\0074.\019\019$\150\012I\012I\012I\019\012I\012I\0216\020F\012I\012I\012I\012I\020Z\020\134\020\146\020\012I\012I\012I\012I\012I\012I\020\021>\021B\012I\012I\n\r42\021j92+\003J\021\130\021\134>\130.\012I\012I\024\026\0242\002\014\024R\012I\012I\004\002\012I\024Z\019\024f\012I\012I\012I\012Q\012I\024n\024z\024\146\012I\012I\012I\025r\025\1464\025\012I\012I\012I\025\012Q\012Q\012Q\012Q\012Q\012Q\012Q\012Q\012Q\n.\012Q\012Q\012Q\012Q\026\006\005R\012Q\012Q\012Q\012Q\012Q\012Q\012Q\026\022\0044&\026^\026z\019+\026\142\012Q\012Q\012Q\012Q\026\0264.\026\026\012Q\012Q\012Q\026\012Q\012Q+\027\n\012Q\012Q\012Q\012Q\027\014\027\030\027\"\027>\012Q\012Q\012Q\012Q\012Q\012Q\027J\027j\027n\012Q\012Q\027~\027\13042\027\150;v+\003J\027\b>\150.\012Q\012Q\027\027\002\014\027\012Q\012Q\004\002\012Q\028\002\019\028&\012Q\012Q\012Q\0129\012Q\028*\028:\b\012Q\012Q\012Q\b\028>\01294\012Q\012Q\012Q\028~\0129\0129\0129\0129\0129\0129\0129\0129\0129\0129\0129\0129\0129\0129\028\150\005R\0129\0129\0129\0129\0129\0129\0129\028\028\028\028\028\029R\004\002\029j\0129\0129\0129\0129\029\134\029\029\029\029\0129\0129\0129\029\0129\0129\029\0129\0129\0129\0129\0129\030F\030Z\030r\030z\0129\0129\0129\0129\0129\0129\030\134\001J\030\142\0129\0129\030\154\005R\030\030\030\031\030\031.\0312\0129/:.\0129\0129\031B\0129\020\tR\0129\0129\0129\0129\031F\031V\0129\0129\0129\0129\0129\0129\t^\031$\0129\0129\0129\031\012A\031\0129\0129\0129\0129\012A\012A \026\012A\012A :\012A\012A\004\142\012A\012A\bm\012A N\bm\bm\012A\012A\012A\012A\012A\012A \158\006)!&\004\146\006)\006)!.!R!b\012A\012A\012A!f\019+!v!z!\138\012A\012A!!\012A!\":\012A\012A\012A\012A\004\154\"Z\t\"n\"\158\012A\012A\012A\012A\012A\"\"\016=\004\002\012A\016=\016=\"\"#\018$%\002%&\n\012A/\002%\150\012A+\003J\012A%\158\bm\012A%\012A%%\002\014\012A\012A\012A\004\002\012A\006)\019\019V\019z\012A\012A&\026\012I\005R\016=\012A\012A\012A\012I\012I\r\012I\012I&F\012I\012I&R\012I\012I&^\012I&b(v&\142\012I\012I\012I\012I\012I\012I5\r\005R\015z&\016=&'R'Z\012I\012I\012I\r\016='\150\016=''\012I\012I\0044&\012I(\014(*\012I\012I\012I\012I(2(Z(\130\016=4.\012I\012I\012I\012I\012I(\154(\016A(\012I\016A\016A)\018)\030\019^)*).)Z)\150\012I/\026)\012I7\014)\012I7\022)\012I*&\012I42*.\r\012I\012I\012I*B\012I*J*b*j*\130\012I\012I*\012Q*\016A\012I\012I\012I\012Q\012Q*\012Q\012Q*\012Q\012Q+\030\012Q\012Q+B\012Q+Z7\0304\012Q\012Q\012Q\012Q\012Q\012Q+b9+\150\017\154+\016A\004\0027*+\012Q\012Q\012Q,\018\016A,B\016A,\146,\012Q\012Q\0044&\012Q\t-v\012Q\012Q\012Q\012Q-\15876-\016A4.\012Q\012Q\012Q\012Q\012Q--.&.>\012Q.R\005R\t.z/Z\t\t/j7>\012Q/./\146\012Q/\158/\012Q/;R\012Q0\n\012Q420\"9\012Q\012Q\012Q\012\012Q\020R0N0Z0~\012Q\012Q0\0044&0\012Q\012Q\012Q1\130\t\012\012\007\012\0124.\012\0121\012\0121\01242\03022\012\012\012\012\012\0122\1302\14623\n3\02632\025$\t\012\012\b3:3342\t;Z\012\0124\0304*\004F\t\t\012\012\004\004\011\t4R\011\011\012\012\012\012\0124^4n4\134\012\0124\1425.\t5V5\150\t\t4556\00662\0126N\012\b6f6n\0126z\0126\1466\1546\012\012\012\r)\012\020R67\"\012\012\0127.7^7j\b\012\012\012\b\t\r)\r)\0071\03017\r)\r)7\r)\r)8\018\r)\0118\03061&\r)\r)\r)\r)\r)68\1427\154788\026\n8\t\r)\r)\r)8\004\00289\002\t9J\r)\r)9b9z\r)\t\t\r)1*\r)\r)9\t9:2:B\r)\r)\r)\r)\r):_:o:\131\r)\r)::\t;\026;V\t\t;\005R;<2?\b\r)\r)\r)\b\t\r=\r=\007\r=\r=>O\r=\r=>\r=\r=>\r=>>>1&\r=\r=\r=\r=\r=?2?:?b\000\000\000\000\000\000\026\026\000\000\t\r=\r=\r=\000\000\004\002\000\000\000\000\t\000\000\r=\r=\000\000\000\000\r=\t\t\r=1*\r=\r=\000\000\t\000\000\000\000\000\000\r=\r=\r=\r=\r=\000\000\000\000\000\000\r=\r=\000\000\000\000\t\000\000\000\000\t\t\000\000\005R\000\000\000\000\000\000\r=\000\000\r=\006a\000\000\000\0001:\000\000\r=\000\000\020\000\000\r=\r=\r=\012\r=\020R\000\000\000\000\r=\r=\r=\000\000\000\000\000\000\006a\r=\r=\r=\006a\t\012\012\007\012\012\000\000\012\012\000\000\012\012\000\000\012\000\000\000\000\000\000\012\012\012\012\012\012\000\000\000\000\000\000\000\000\000\000\000\000\026&\000\000\t\012\012\b\000\000\004\002\000\000\000\000\t\000\000\012\012\000\000\000\000\004F\t\t\012\012\004\004\000\000\t\000\000\011\000\000\012\012\012\012\012\000\000\000\000\000\000\012\012\000\000\000\000\t\000\000\000\000\t\t\000\000\005R\000\000\000\000\011\012\000\000\012\011\000\000\000\000\012\000\000\012\000\000\020\000\000\012\012\012\012}\012\020R\000\000\000\000\012\012\012\000\000\000\000\000\000\000\000\012\012\012\000\000\t\012}\012}\007\012}\012}\000\000\012}\012}\000\000\012}\012}\015Z\012}\000\000\000\000\000\0001&\012}\012}\012}\012}\012}\000\000\000\000\000\000\000\000\000\000\000\000\0262\000\000\t\012}\012}\012}\000\000\000\000\000\000\021.\t\000\000\012}\012}\000\000\011\012}\b\t\012}1*\012}\012}+\018\t\000\000\000\000\000\000\012}\012}\012}\012}\012}\000\000\000\000\000\000\012}\012}\011\000\000\b\000\000\011\b\b\000\000\000\000\000\000\000\000\000\000\012}\000\000\012}\000\000'\014\000\0001:\000\000\012}\000\000\000\000+*\012}\012}\012}\012i\012}+:\000\000\000\000\012}\012}\012}\000\000\021r\000\000\000\000\012}\012}\012}\000\000\004\002\012i\012i\000\000\b\014\000\000\012i\012i\000\000\012i\012i+J\012i\000\000\000\000\000\000\014\012i\012i\012i\012i\012i+R+j\000\000\000\000\000\000\000\000\000\000\000\000\b\012i\012i\014\000\000\000\000\000\000\000\000\005R\000\000\012i\012i\000\000\000\000\004F+r\000\000\012i\024\004\004\000\000&\150\000\000\000\000\000\000\012i\012i\012i\012i\012i\000\000\000\000\006!\012i\012i\006!\006!\000\000\000\000\000\000\000\000\000\0007\000\000\000\0007\000\000\012i2b\012i\000\0002r\000\000\024\000\000\012i\000\000\000\000\000\000\012i\012i\012i\000\000\012i\000\000\000\000\000\000\012i\012i\012i\000\000\004u\000\000\004\002\012i\012i\012i\004u\004u\000\000\r\r\000\000\004u\004u7\004u\004u\000\000\004u\000\0002~\000\000\014\002\004u\004u\004u\004u\004u\004\0027\000\000\000\000\000\000\006!\004\0022\142\000\000\004u\004u\014\006\000\000\005R\000\000\000\000\000\000\000\000\004u\004u\000\000\000\000\004\022\000\0007\004u\014\150\004r\000\000\0002\158\000\000(\000\000\004u\004u\004u\004u\004u\005R\000\000\000\000\000\000\004u\000\000\005R7\000\000\000\000\000\000\000\000\000\0002\004u\000\000\000\000\004u7J\000\000\004u7R\000\000 \000\000\004u\000\000\000\000\000\000\004u\004u\004u\000\000\004u\000\000\000\000\000\000\000\000\004u\004u\000\000\004q\000\000\000\000\004u\004u\004u\004q\004q\000\000\r\r\000\000\004q\004q\000\000\004q\004q\000\000\004q\000\0007Z\000\000\014\002\004q\004q\004q\004q\004q\000\000\000\000\000\000\000\000\000\000\000\000\000\0007f\000\000\004q\004q\014\006\000\000\000\000\000\000\000\000\000\000\000\000\004q\004q\006E\004q\004\022\006E\006E\004q\014\150\004r\000\000\0007r\000\000\000\000\000\000\004q\004q\004q\004q\004q\004q\000\000\b\014\004q\004q\004q\000\000\004q\004q\000\000\004q\000\0007z\004q\014\004q\004q\004q\004q\004q\000\000\004\002 \000\000\004q\000\000\000\000\000\000\004q\004q\004q\014\004q\000\000\000\000\000\000\000\000\004q\004q\004q\000\000\000\000\004F\004q\004q\004q\024\004\004\000\000\000\000\000\000\006E\000\000\004q\004q\004q\004q\004q\000\000\005R\000\000\004q\004q\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\000\000\000\0008\006\000\000\004q\000\000\000\000)\026\000\000\000\000\024\000\000\004q\000\000\000\000\000\000\004q\004q\004q\000\000\004q\000\000\000\000\000\000\004q\004q\004q\000\000\003\000\000\000\000\004q\004q\004q\003\003\000\000\r\r\000\000\003\0038\014\003\003\000\000\003\000\000\000\000\000\000\014\002\003\003\003\003\003\000\0008\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\014\006\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\003\004\022\000\0008&\003\015\022\004r\000\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\003\000\000\b\014\003\003\0038.\003\003\000\000\003\000\000\000\000\003\014\003\003\003\003\003\000\000\000\000/\n\000\000\003\000\000\000\000\000\000\003\003\003\014\003\000\000\000\000\000\000\000\000\003\003\003\000\000\000\000\004F\003\003\003\015\"\004\004\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\003\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\003\000\000\000\000\000\000\000\000\000\000.\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\003\003\003\003\003\000\000\r\r\000\000\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\014\002\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\014\006\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\003\004\022\000\000\000\000\003\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\003\000\000\b\014\003\003\003\000\000\003\003\000\000\003\000\000\000\000\003\014\003\003\003\003\003\000\000\000\000 \000\000\003\000\000\000\000\000\000\003\003\003\014\003\000\000\000\000\000\000\000\000\003\003\003\000\000\000\000\004F\003\003\003\024\004\004\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\003\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\003\000\000\017\158\000\000\000\000\015\024\000\000\003\000\000\000\000\000\000\003\003\003\004u\003\000\000\000\000\000\000\003\003\003\000\000\000\000\000\000\017\003\003\003\000\000\000\000\004u\004u\000\000\b\014\000\000\004u\004u\000\000\004u\004u\000\000\004u\017\000\000\000\000\014\004u\004u\004u\004u\004u\000\000\000\000\000\000\000\000\000\000\004\002\017\000\000\017\004u\004u\014\000\000\000\000\000\000\000\000\000\000\000\000\004u\004u\000\000\000\000\004F\000\000\000\000\004u\024\004\004\015\001\030\000\000\000\000;\142\004u\004u\004u\004u\004u;\146\000\000\017\004u\004u\005R\000\000\003\141\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\004u\000\000\015\000\000\000\000\000\000\024\000\000\004u\000\000\000\000\000\000\004u\004u\004u\003\004u\012&\001v\000\000\004u\004u\004u\000\000\000\000\000\000\000\000\004u\004u\004u\000\000\000\000\003\003\000\000\b\014;\150\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\014\003\003\003\003\003\000\000;\154\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\003\014\000\000\000\000\000\000\000\000\000\000\000\000\003\003\n\021\000\000\004F\n\021\n\021\003\024\004\004\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\003\003\003\000\000\000\000\000\000\003\003\000\000\r\r\000\000\003\003\000\000\003\003\000\000\003\000\000\n\021\024\014\002\003\003\003\003\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\003\014\006\000\000\000\000\003\003\003\000\000\003\003\000\000\000\000\004\022\n\021\000\000\003\014\150\004r\000\000\000\000\000\n\021\000\000\n\021\003\003\003\003\003\t>\000\000\000\000\000\000\003\000\000\n\021\000\000\000\000\000\000\000\000\n\021\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000 \000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\t\003\003\003\t\t\t\t\t\000\000\t\t\t\t\t\t\000\000\t\t\t\t\t\t\015\000\000\000\000\t\t\000\000\t\t\000\000\000\000\t\t\t\000\000\t\t\000\000\t\t\t\000\000\001\003\t\t\t\t\t\002\n\007Z\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\000\000\t\000\000\t\t\t\t\000\000\t\t\t\t\t\t\000\000\000\000\t\000\000\000\000\014\n\006r\t\t\t\t\014\018\014\006r\t\t\000\000\t\014\018\t\t\006r\t\t\t\t\t\t\t\t\t\t\000\000\000\000\000\000\t\t\000\000\000\000\t\000\000\t\000\000\006\025\t\t\t\t\000\000\000\000\t\t\000\000\016v\000\000\t\t\t\t\t\006r\t\t\t\000\000\t\006\025\000\000\000\000\006\025\006\025\000\000\t\014\014\000\000\003\000\000\t\t\t\t\t\000\000\000\000\t\t\000\000\000\000\000\000\t\t\t\t\t\t\000\000\t\t\t\t\t\000\000\000\000\000\000\t\t\000\000\004\002\000\000\t\t\000\000\t\t\t\t\t\t\t\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\002\t\006r\000\000\t\006z\t\t\t\t\006\025\000\000\t\000\000\003\nE\000\000\t\005R\nE\nE\003\nE\nE\t\000\000\000\000\nE\000\000\nE\000\000\000\000\000\000\000\000\t\000\000\000\000#\006\000\000\t\t\t\006\142\003\003\nE\000\000\000\000\nE\nE\000\000\000\000\000\000\002\014\003\003\nE\004\002\005&\000\000\005*\nE\nE\nE\nE\000\000\000\000\000\000\nE\nE\000\000\000\000\000\000\nE\nE\000\000\nE\nE\nE\nE\nE\nE\000\000\nE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nE\000\000\000\000\005R\000\000\nE\nE\nE\nE\000\000\000\000\nE\t\000\000\000\000\000\000\t\t\000\000\t\t\000\000\t\nE\t\000\000\t\000\000\nE\000\000\000\000\nE\000\000\nE\014\000\000\000\000\000\000\nE\nE\nE\000\000\t\000\000\000\000\t\t\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\t\t\t\t\000\000\000\000\000\000\t\t\000\000\000\000\000\000\t\t\000\000\t\t\t\t\t\t\t\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\t\t\t\t\000\000\000\000\t\000\000\000\000\000\000\000\014\026\001\030\000\000\004b\001F\000\000\014\030\t\004\134\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\t\004\000\000\000\000\000\000\t\t\t\000\000\001\150\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\000\000\001\001\004\b\014)\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\014\004\142\000\000\000\000\000\000\000\000\014)\014)\000\000\014)\014)\r\000\000\022B\000\000\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\000\000\000\000\000\0142\001\030\000\000\004b\001F:.\000\000\005R\004\134\017\137\001J\000\000\000\000\000\000\000\000\000\000\000\000\004\154\b\000\000\000\000\000\000\014\138\r\154\014\142\000\000\001\150\000\000\000\000\001\001\017\137\017\137\000\000\017\137\017\137\000\000\001\154\000\000\000\000\002\n\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\n\158\b\004\002\r\146\004r\000\r\150\014)\004\142\000\000\014)\014)\000\000\000\000\000\000\014)\017\137\014)\r\017\137>\006\014)\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\000\000\000\000\000\014\001\030\000\000\004b\001F\000\000\000\000\005R\004\134\017\133\001J\017\137\014\017\137\000\000\014\000\000\004\154\t\003\014\000\000\017\137\014\138\r\154\014\142\017\137\001\150\000\000\000\000\001\001\017\133\017\133\000\000\017\133\017\133\000\000\001\154\000\000\000\000\017\137\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\133\000\000\r\017\133\000\000\000\000\000\000\0146\014Z\004\146\004\150\000\000\t\014n\000\000\000\000\000\000\000\000\000\001\n\000\000\001>\001\014\000\000\000\000\005R\001n\000\000\001\018\017\133\014\017\133\000\000\014\000\000\004\154\t\003\014\004n\017\133\014\138\r\154\014\142\017\133\001\022\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000\000\017\133\000\000\001\001\002\002\004*\000\000\000\000\000\000\001z\001\000\000\000\000\000\000\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\023Z\000\000\000\000\t\030\r\b\b\000\000\000\000\014\154\000\000\000\000\000\000\000\000\000\001\030\015^\004b\001F\n\021\000\000\005R\004\134\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\t5\011}\014\b\014\000\000\001\150\000\000\n\021\001\001\n\021\n\021\018\000\000\000\000\000\000\001\154\000\000\000\000\018\000\000\001\001\004\b\018\000\000\000\000\001z\004\018\000\000\000\000\019\006\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\000\000\000\000\000\000\n\021\000\000\000\000(\026\000\000\r\000\000\000\000\000\000\000\000\0146\014Z\004\146\004\150(\"(F\014n\000\000\000\000\000\011}\000\000\000\000\001\030,j\004b\001F\000\000\005R\000\000\004\134\n\021\001J\000\000\000\000\000\000\000\000(N\004\154\n\021\000\000\n\021\n.\014\138\r\154\014\142\000\000\020b\001\150\000\000\000\000\001\001\n\021\000\000\000\000\000\000\000\000\n\021\001\154\000\000\000\000\000\000\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\000\000\000\000\000\000\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\000\000\000\000\000\000\000\000\000\001\030,j\004b\001F\000\000\005R\000\000\004\134!\001J\000\000\000\000\b\000\000\000\000\004\154\000\000\000\000\000\000\004n\014\138\r\154\014\142\000\000\000\000\001\150\001\000\000\001\001\001\000\000\000\000\029\029\b\001\154\000\000\b\b\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\031z\b\004\002\r\146\004r\000\r\150\019\006\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r!!\004\002\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\003\000\000\000\003\000\000\000\000\001\030,j\004b\001F\000M\005R\000\000\004\134\000\000\001J\000\000\000\000\000\000\000\000\000\000\004\154\b!\018\018\t\014\138\r\154\014\142\000\000\005R\001\150\000\000\000M\001\001\000M\000M\000\000\006\000\000\000\000\001\154\003&\150\000\000\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\003\003\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\000\000\000\000\000\000\004\002\000\000\000\000\000\000\000\000\r\000\000\003\000\000\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\018\026\000\000\000\018\"\000\000\003\001\030,j\004b\001F\000\000\005R\003\004\134\000M\001J\000\000\000\000\000\000\003\000\000\004\154\005R\000\000\0196^\014\138\r\154\014\142\000\000\000\000\001\150\000\000\000\000\001\0017\n\000\000\000\000\000\000\000\000\020\014\001\154\018*\000\000\000\000\000\000\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\004\002\0186\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\000\000\018B\000\000\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\000!\000\000\000\000\000\000\005R\000!,j\000!\000!\000\000\005R\018J\000!$\000!\000\000\000\000\000\000\018R\000\000\004\154\000\000\t\129\000\000\000\000\014\138\r\154\014\142\000\000\000\000\000!\000\000\000\000\000!\000!\ba\ba\000\000\ba\ba\000\000\000!\000\000\000\000\000\000\000\000\000!\000!\000!\000!\000\000\000\000\000\000\000!\000!\000\000\000\000\000\000\000!\000!\000\000\000!\000!\000!\000!\000!\000!\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ba\000\000\000!\ba\000\000\000\000\000\000\000!\000!\000!\000!\000\000\000\000\000!\000\029\000\000\000\000\000\000\000\000\000\029\000\000\000\029\000\029\000\000\000\000\000!\000\029\028\000\029\ba\000\000\ba\000\000\000\000\000\000\000!\t}\000\000\000\000\ba\000!\000!\000!\ba\000\029\002I\000\000\000\029\000\029\002I\000\000\000\000\028\028\000\000\000\029\000\000\000\000\ba\000\000\000\029\000\029\000\029\000\029\000\000\000\000\000\000\000\029\000\029\000\000\000\000\000\000\000\029\000\029\000\000\000\029\000\029\000\029\000\029\000\029\000\029\019\006\000\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\028\000\000\000\000\000\029\000\029\000\029\000\029\000\000\000\000\000\029\000\000\000\000\000\000\000\000\000\001\n\015^\001>\001\014\000\000\000\000\000\029\001n\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\029\ta\029\002\011}\011}\000\029\000\029\000\029\000\000\001\022\000\000\000\000\001\001\000\000\000\000\018\000\000\000\000\000\000\001\026\000\000\000\000\018\000\000\001\001\002\002\004*\018\000\000\000\000\001z\001\000\000\000\000\019\006\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000(\026\000\000\b\000\000#\000\000\000\000\t\030\r\b\b(\"(F\014\154\000\000\000\000\000\011}\000\000\001\n\000\000\001>\001\014\000\000\000\000\005R\001n$\001\018\000\000\000\000\000\000\000\000\000\000(N\b\000\0006:\000\000\000\000\014\b\014\000\000\001\022\000\000\000\000\001\001\be\000\000\000\000\be\be\000\000\001\026\000\000\000\000\000\000\000\000\001\001\002\002\004*\000\000\000\000\000\000\001z\001\000\000\000\000\000\000\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\be\000\000\b\000\000\000\000\000\000\000\000\t\030\r\b\b\000\000\000\000\014\154\000\000\000\000\000\000\000\000\000\001\n\000\000\001>\001\014\000\000\000\000\005R\001n\000\000\001\018\000\000\000\000\be\000\000\000\000\000\000\b\000\0006\n\000\000\be\014\b\014\000\000\001\022\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000\000\be\000\000\001\001\002\002\004*\000\000\000\000\000\000\001z\001\000\000\000\000\000\000\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\t\030\r\b\b\000\000\000\000\014\154\015\000\000\000\000\000\000\000\000\015\000\000\015\015\000\000\000\000\005R\015\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\b\t\1375\154\000\000\000\000\014\b\014\000\000\015\000\000\000\000\015\015\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\015\015\015\015\000\000\000\000\000\000\015\015\000\000\000\000\000\000\015\015\000\000\015\015\015\015\015\015\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\015\015\015\015\000\000\000\000\015\015\000\000\000\000\000\000\000\000\015\000\000\015\015\000\000\000\000\015\015\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\015\t\133\000\000\000\000\000\000\015\015\015\000\000\015\000\000\000\000\015\015\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\015\015\015\015\000\000\000\000\000\000\015\015\000\000\000\000\000\000\015\015\000\000\015\015\015\015\015\015\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\006\015\015\015\015\000\000\000\000\015\000\000\000\000\000\000\000\000\000\001\n\000\000\001>\001\014\000\000\000\000\015\001n\000\000\001\018\006\006\000\000\006\006\000\000\015\000\000\000\000\000\000\000\000\015\015\015\000\000\001\022\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\001\026\027\000\000\000\000\000\000\001\001\002\002\004*\000\000\000\000\000\000\001z\001\000\000\006\000\000\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\011\158\000\000\000\000\000\000\000\000\000\000\003\154\003\002\b\000\000\000\000\000\000\000\000\t\030\r\b\b\006\000\000\014\154\000\000\005\026\000\000\000\000\000\006\000\000\001\030\007F\004b\001F\005R\000\000\000\000\004\134\000\000\001J\000\000\000\000\000\000\000\000\b\000\0001\006\000\000\014\b\014\r\142\007V\007\134\001\150\000\000\000\000\001\001\000\000\000\000\000\000\0042\007\138\007\001\154\004\002\007\000\000\007\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\000\000\004\142\000\000\012\000\000\000\000\000\000\000\000\000\000\003\154\003\002\r\000\000\000\000\005R\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\005\026\000\000\000\000\000\000\000\000\000\001\030\007F\004b\001F\005R\000\000\000\000\004\134\000\000\001J\000\000\000\000\000\000\000\000\004\154\000\000\000\000\000\000\000\000\014\138\r\154\014\142\014\134\007V\007\134\001\150\000\000\000\000\001\001\000\000\000\000\000\000\0042\007\138\007\001\154\004\002\007\006\007\001\001\004\b\000\000\000\000\000\000\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\004\002\r\146\004r\000\r\150\006\004\142\t\006\006\000\000\000\000\000\000\000\000\000\000\000\000\r\000\000\000\000\005R\000\000\0146\014Z\004\146\004\150\000\000\000\000\014n\000\000\000\000\t\000\000\002\t\t\004!\000\000\000\000\000\000\005R\000\000\004!\004!\000\000\000\000\000\000\006\004!\004!\004\154\004!\004!\000\000\004!\014\138\r\154\014\142\003\004!\004!\004!\004!\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\004!\004!\007\006\000\000\006\000\000\000\000\000\000\004!\004!\007\000\000\006\000\000\006\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\004!\004!\004!\004!\t\000\000\006\n\004!\000\000\007\000\000\t\000\000\t\000\000\000\000\000\000\004!\000\000\t\004!\000\000\000\000\004!\000\000\t\n\n\004!\n\t\000\000\004!\004!\004!\000\000\004!\000\000\004\r\000\000\000\000\004!\004!\000\000\004\r\004\r\000\000\004!\004!\004!\004\r\004\r\000\000\004\r\004\r\000\000\004\r\000\000\000\000\000\000\000\000\004\r\004\r\004\r\004\r\004\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\r\004\r\000\000\000\000\000\000\000\000\000\000\n\000\000\004\r\004\r\000\000\000\000\000\000\000\000\006\004\r\000\000\006\006\n\n\000\000\n\000\000\021\158\004\r\004\r\004\r\004\r\000\000\000\000\000\000\000\000\004\r\n\000\000\000\000\012\n\n\000\000\000\000\015j\n\004\r\n\000\000\004\r\000\000\n\004\r\000\000\000\000\000\000\000\000\004\r\006\000\000\000\000\004\r\004\r\004\r\000\000\004\r\000\000\004\t\000\000\000\000\004\r\004\r\000\000\004\t\004\t\000\000\004\r\004\r\004\r\004\t\004\t\000\000\004\t\004\t\000\000\004\t\000\000\006\000\000\006\004\t\004\t\004\t\004\t\004\t\007\002\r\006\000\000\006\000\000\002\r\000\000\000\000\004\t\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\004\t\000\000\006\000\000\000\000\002\r\004\t\000\000\000\000\002\r\000\000\000\000\002\r\002\r\000\000\021\158\004\t\004\t\004\t\004\t\000\000\000\000\000\000\000\000\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\000\000\000\000\004\t\000\000\000\000\004\t\002\r\000\000\000\000\000\000\004\t\002\r\000\000\000\000\004\t\004\t\004\t\000\000\004\t\002\r\004A\000\000\000\000\004\t\004\t\000\000\021\150\021\000\000\004\t\004\t\004\t\004A\004A\000\000\004A\004A\000\000\004A\000\000\000\000\000\000\000\000\004A\004A\004A\021\004A\026\002\r\002\r\000\000\002\r\000\000\002\r\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\004A\027B\000\000\000\000\000\000\002\r\004A\000\000\000\000\002\r\000\000\000\000\002\r\002\r\000\000\021\158\021\004A\004A\004A\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\019>\000\000\001\n\000\000\000\000\004A\000\000\000\000\004A\000\000\000\000\004A\002\r\000\000\000\000\000\000\004A\002\r\000\000\t\004A\004A\004A\000\000\004A\002\r\004E\000\000\000\000\004A\004A\000\000\004E\004E\000\000\004A\004A\004A\004E\004E\000\000\004E\004E\000\000\004E\024\000\000\000\000\000\000\004E\004E\004E\004E\004E\0276\0042\002\r\000\000\002\r\004\002\000\000\000\000\0252\004E\004E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004E\004E\027B\000\000\000\000\000\000\006\004E\019*\006\006\000\000\000\000\000\000\019.\000\000\021\158\004E\004E\004E\004E\000\000\000\000\000\000\000\000\004E\005R\000\000\000\000\000\000\014\018\000\000\000\000\0176\000\000\004E\000\000\000\000\004E\000\000\000\000\004E\000\000\000\000\000\000\000\000\004E\006\000\000\000\000\004E\004E\004E\000\000\004E\000\000\004\005\000\000\000\000\004E\004E\000\000\004\005\004\005\000\000\004E\004E\004E\004\005\004\005\000\000\004\005\004\005\000\000\004\005\000\000\006\000\000\006\004\005\004\005\004\005\004\005\004\005\000\000\006\006\000\000\006\000\000\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004\005\000\000\006\000\000\000\000\006\004\005\000\000\006\006\000\000\000\000\000\000\000\000\000\000\021\158\004\005\004\005\004\005\004\005\000\000\000\000\000\000\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\004\005\000\000\000\000\004\005\000\000\000\000\004\005\000\000\000\000\000\000\000\000\004\005\006\000\000\000\000\004\005\004\005\004\005\000\000\004\005\000\000\004\021\000\000\000\000\004\005\004\005\000\000\021\150\021\000\000\004\005\004\005\004\005\004\021\004\021\000\000\004\021\004\021\000\000\004\021\000\000\006\000\000\006\004\021\004\021\004\021\021\004\021\000\000\000\000\006\000\000\006\000\000\002\r\000\000\000\000\004\021\004\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\021\004\021\000\000\006\000\000\000\000\002\r\004\021\000\000\000\000\002\r\000\000\000\000\002\r\002\r\000\000\021\158\021\004\021\004\021\004\021\000\000\000\000\000\000\000\000\004\021\000\000\000\000\000\000\000\000\019>\000\000\001\030\000\000\000\000\004\021\000\000\000\000\004\021\000\000\000\000\004\021\002\r\000\000\000\000\000\000\004\021\002\r\000\000\t\004\021\004\021\004\021\000\000\004\021\002\r\004\017\000\000\000\000\004\021\004\021\000\000\021\150\021\000\000\004\021\004\021\004\021\004\017\004\017\000\000\004\017\004\017\000\000\004\017\001\000\000\000\000\000\000\004\017\004\017\004\017\021\004\017\000\000\002\014\002\r\000\000\002\r\004\002\000\000\000\000\0156\004\017\004\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\017\004\017\026\000\000\000\000\000\000\000\000\004\017\019*\000\000\000\000\000\000\000\000\000\000\019.\000\000\021\158\021\004\017\004\017\004\017\000\000\006=\000\000\000\000\004\017\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\017\000\000\000\000\004\017\000\000\000\000\004\017\000\000\000\000\000\000\006=\004\017\000\000\006=\006=\004\017\004\017\004\017\000\000\004\017\nU\004-\000\000\000\000\004\017\004\017\000\000\021\150\021\000\000\004\017\004\017\004\017\004-\004-\000\000\004-\004-\000\000\004-\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\004\002\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\nU\nU\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\nU\004-\000\000\000\000\nU\000\000\000\000\nU\000\000\006=\021\158\021\022\030\022&\0226\000\000\000\000\005R\000\000\022>\000\000\000\000\000\000\000\000\000\000\nU\000\000\000\000\000\000\004-\000\000\nU\004-\000\000\000\000\004-&N\000\000\000\000\000\000\004-\000\000\000\000\nU\004-\004-\004-\000\000\004-\000\000\004\029\000\000\nU\022N\004-\000\000\021\150\021\bn\004-\022V\022^\004\029\004\029\000\000\004\029\004\029\000\000\004\029\000\000\000\000\000\000\000\000\004\029\004\029\004\029\021\004\029\000\000\016A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\004\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\004\029\000\000\000\000\000\000\000\000\016A\004\029\000\000\016A\016A\000\000\000\000\000\000\000\000\000\000\021\158\021\004\029\004\029\004\029\000\000\000\000\000\000\000\000\004\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\000\000\000\000\004\029\000\000\000\000\004\029\000\000\000\000\000\000\000\000\004\029\016A\000\000\000\000\004\029\004\029\004\029\000\000\004\029\000\000\004\025\000\000\000\000\004\029\004\029\000\000\021\150\021\000\000\004\029\004\029\004\029\004\025\004\025\000\000\004\025\004\025\000\000\004\025\000\0008n\000\000\016A\004\025\004\025\004\025\021\004\025\000\000\002I\016A\000\000\016A\000\000\028\022\000\000\000\000\004\025\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004\025\000\000\016A\000\000\000\000\002I\004\025\000\000\000\000\002I\000\000\000\000\028\030\0282\000\000\021\158\021\004\025\004\025\004\025\006M\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\004\025\000\000\000\000\004\025\021r\000\000\006M\000\000\004\025\006M\006M\000\000\004\025\004\025\004\025\000\000\004\025\028F\004I\000\000\000\000\004\025\004\025\000\000\021\150\021\000\000\004\025\004\025\004\025\004I\004I\000\000\004I\004I\000\000\004I\000\000\000\000\000\000\000\000\021\021\021\021\004I\000\000\004\002\000\000\000\000\028N\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004I\004I\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\000\000\006M\000\000\021\158\021\022\030\022&\004I\000\000\005R\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004I&\000\000\004I\000\000\000\000\004I\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\004I\004I\004I\000\000\004I\000\000\004\001\000\000\000\000\004I\004I\000\000\021\150\021\000\000\004I\004I\004I\004\001\004\001\000\000\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000\000\004\001\004\001\004\001\021\004\001\000\000\0061\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\000\000\0061\004\001\000\000\0061\0061\000\000\000\000\000\000\000\000\000\000\021\158\021\004\001\004\001\004\001\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\000\000\004\001\000\000\000\000\004\001\000\000\000\000\000\000\000\000\004\001\004\002\000\000\000\000\004\001\004\001\004\001\000\000\004\001\000\000\003\000\000\000\000\004\001\004\001\000\000\021\150\021\000\000\004\001\004\001\004\001\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\0061\021\021\021\021\003\000\000\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000'\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\004%\000\000\000\000\003\003\000\000\021\150\021\000\000\003\003\003\004%\004%\000\000\004%\004%\000\000\004%\000\000\000\000\000\000\000\000\021\021\021\021\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\004%\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\004%\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\004%\004%\004%\000\000\004%\000\000\003\000\000\000\000\004%\004%\000\000\021\150\021\000\000\004%\004%\004%\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\021\021\021\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\004M\000\000\000\000\003\003\000\000\021\150\021\000\000\003\003\003\004M\004M\000\000\004M\004M\000\000\004M\000\000\000\000\000\000\000\000\021\021\021\021\004M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\004M\000\000\000\000\000\000\000\000\000\000\004M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\004M\000\000\000\000\000\000\000\000\004M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004M\000\000\000\000\004M\000\000\000\000\004M\000\000\000\000\000\000\000\000\004M\000\000\000\000\000\000\004M\004M\004M\000\000\004M\000\000\004)\000\000\000\000\004M\004M\000\000\021\150\021\000\000\004M\004M\004M\004)\004)\000\000\004)\004)\000\000\004)\000\000\000\000\000\000\000\000\021\021\021\021\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\004)\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\004)\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\004)\000\000\000\000\004)\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\004)\004)\004)\000\000\004)\000\000\0041\000\000\000\000\004)\004)\000\000\021\150\021\000\000\004)\004)\004)\0041\0041\000\000\0041\0041\000\000\0041\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\0041\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0041\000\000\000\000\0041\000\000\000\000\0041\000\000\000\000\000\000\000\000\0041\000\000\000\000\000\000\0041\0041\0041\000\000\0041\000\000\0045\000\000\000\000\022N\0041\000\000\021\150\021\000\000\0041\022V\022^\0045\0045\000\000\0045\0045\000\000\0045\000\000\000\000\000\000\000\000\021\021\021\021\0045\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\0045\000\000\000\000\0045\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\0045\0045\0045\000\000\0045\000\000\0049\000\000\000\000\0045\0045\000\000\021\150\021\000\000\0045\022V\022^\0049\0049\000\000\0049\0049\000\000\0049\000\000\000\000\000\000\000\000\021\021\021\021\0049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\0049\000\000\000\000\0049\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\0049\0049\0049\000\000\0049\000\000\004=\000\000\000\000\0049\0049\000\000\021\150\021\000\000\0049\022V\022^\004=\004=\000\000\004=\004=\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\000\000\000\000\004=\000\000\000\000\004=\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\004=\004=\022f\000\000\004=\000\000\004y\000\000\000\000\022N\004=\000\000\021\150\021\000\000\004=\022V\022^\004y\004y\000\000\004y\004y\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004y\000\000\000\000\004y\000\000\000\000\004y\000\000\000\000\000\000\004!\004y\000\000\000\000\000\000\004y\004y\022f\000\000\004y\000\000\000\000\000\000\000\000\022N\004y\000\000\004!\004!\000\000\004y\022V\022^\004!\004!\000\000\004!\004!\000\000\004!\000\000\000\000\000\000\000\000\004!\004!\004!\004!\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!\004!\000\000\000\000\000\000\000\000\000\000\004!\000\000\t\017\t\017\000\000\007\007\000\000\000\000\022\004!\004!\004!\004!\000\000\000\000\000\000\004!\004!\000\000\000\000\000\000\000\000\000\000\000\000\t\017\t\017\000\000\t\017\t\017\000\000\004!\007\000\000\000\000\000\000\000\000\000\000\004\r\004!\000\000\000\000\000\000\004!\004!\004!\007\004!\000\000\007\000\000\004!\004!\004!\000\000\004\r\004\r\000\000\004!\004!\004!\004\r\004\r\000\000\004\r\004\r\t\017\004\r\000\000\000\000\000\000\000\000\004\r\004\r\004\r\004\r\004\r\007\000\000\000\000\000\000\000\000\000\000\004N\000\000\007\004\r\004\r\000\000\007\000\000\000\000\000\000\007\000\000\004\r\004\r\t\017\000\000\000\000\000\000\000\000\004\r\000\000\007\t\017\000\000\019\000\000\t\017\000\000\022\004\r\004\r\004\r\004\r\000\000\000\000\000\000\004\r\004\r\000\000\000\000\000\000\t\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\r\000\000\000\000\000\000\000\000\000\000\000\000\004\t\004\r\000\000\000\000\000\000\004\r\004\r\004\r\000\000\004\r\000\000\000\000\000\000\004\r\004\r\004\r\000\000\004\t\004\t\000\000\004\r\004\r\004\r\004\t\004\t\000\000\004\t\004\t\000\000\004\t\000\000\000\000\000\000\000\000\004\t\004\t\004\t\004\t\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\004\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\004\t\000\000\000\000\000\000\000\000\000\000\004\t\000\000\017y\017y\000\000\000\000\000\000\000\000\000\000\022\004\t\004\t\004\t\004\t\000\000\000\000\000\000\004\t\004\t\000\000\017\158\000\000\000\000\015\000\000\017y\017y\000\000\017y\017y\000\000\004\t\000\000\000\000\000\000\000\000\000\000\000\000\004y\004\t\000\000\000\000\000\000\004\t\004\t\004\t\000\000\004\t\000\000\000\000\000\000\004\t\004\t\004\t\000\000\022\022\000\000\004\t\004\t\004\t\004y\004y\017\004y\004y\017y\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\004\002\017\000\000\017\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\017y\000\000\000\000\000\000\015\004y\000\000\000\000\017y\000\000\019\000\000\017y\000\000\022\022\0236\023>\023N\005R\000\000\000\000\004y\023V\000\000\000\000\015\017y\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\004y\000\000\000\000\000\000\000\000\000\000\000\000\004A\004y\000\000\000\000\000\000\004y\004y\023~\000\000\004y\000\000\000\000\000\000\004y\023f\004y\000\000\022\022\000\000\004y\023n\023v\004A\004A\000\000\004A\004A\000\000\004A\000\000\000\000\000\000\000\000\004A\004A\004A\022\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\004A\000\000\017\137\017\137\000\000\b\021\b\021\000\000\000\000\022\022\004A\004A\004A\000\000\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\000\000\017\137\017\137\000\000\017\137\017\137\000\000\004A\019:\000\000\000\000\000\000\000\000\000\000\004E\004A\000\000\000\000\000\000\004A\004A\004A\b\021\004A\000\000\0156\000\000\004A\004A\004A\000\000\004E\004E\000\000\004A\004A\004A\004E\004E\000\000\004E\004E\017\137\004E\000\000\000\000\000\000\000\000\004E\004E\004E\004E\004E\b\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\021\004E\004E\000\000\b\021\000\000\000\000\000\000\b\021\000\000\004E\004E\017\137\000\000\000\000\000\000\000\000\004E%\b\021\017\137\000\000\000\000\000\000\017\137\000\000\022\004E\004E\004E\004E\000\000\000\000\000\000\004E\004E\000\000\000\000\000\000\017\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004E\000\000\000\000\000\000\004E\004E\004E\000\000\004E\000\000\000\000\000\000\004E\004E\004E\000\000\004\005\004\005\000\000\004E\004E\004E\004\005\004\005\000\000\004\005\004\005\000\000\004\005\000\000\000\000\000\000\000\000\004\005\004\005\004\005\004\005\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\004\005\000\000\017\133\017\133\000\000\000\000\000\000\000\000\000\000\022\004\005\004\005\004\005\004\005\000\000\000\000\000\000\004\005\004\005\000\0008r\000\000\000\0006\000\000\017\133\017\133\000\000\017\133\017\133\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\004\021\004\005\000\000\000\000\000\000\004\005\004\005\004\005\000\000\004\005\000\000\000\000\000\000\004\005\004\005\004\005\000\000\022\022\000\000\004\005\004\005\004\005\004\021\004\0218z\004\021\004\021\017\133\004\021\000\000\000\000\000\000\000\000\004\021\004\021\004\021\022\004\021\004\0028~\000\0008\130\000\000\000\000\000\000\000\000\000\000\004\021\004\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\021\004\021\017\133\000\000\000\000\000\0006\004\021%\000\000\017\133\000\000\000\000\000\000\017\133\000\000\022\022\004\021\004\021\004\021\005R\000\000\000\000\004\021\004\021\000\000\000\0007\002\017\133\000\000\000\000\000\000\020N\000\0007\n\020z\000\000\004\021\000\000\000\000\000\000\000\000\000\000\000\000\004\017\004\021\000\000\000\000\000\000\004\021\004\021\004\021\000\000\004\021\000\000\000\000\000\000\004\021\004\021\004\021\000\000\022\022\000\000\004\021\004\021\004\021\004\017\004\017\000\000\004\017\004\017\000\000\004\017\000\000\020\130\000\000\000\000\004\017\004\017\004\017\022\004\017\000\000\000\000\000\000\000\000\000\000\000\000\004\002\020\142\000\000\004\017\004\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\017\004\017\000\000\000\000\000\000\000\000\000\000\004\017\000\000\r\r\000\000\020\154\000\000\000\000\000\000\022\022\004\017\004\017\004\017\000\000\000\000\000\000\004\017\004\017\000\000\005R\000\000\000\000\000\000\000\000\r\r\020\r\r\000\000\004\017\000\000\000\000\020\000\000\000\000\000\000\004-\004\017\000\000\000\000\000\000\004\017\004\017\004\017\000\000\004\017\000\000\000\000\000\000\004\017\004\017\004\017\000\000\022\022\000\000\004\017\004\017\004\017\004-\004-\000\000\004-\004-\r\004-\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\004\023.\023F\r\000\000\000\000\000\000\000\000\004-\000\000\000\000\r\000\000\000\000\000\000\r\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004-\023V\000\000\025\000\000\r\025\000\0008r\000\000\000\0006\000\000\000\000\004-\000\000\000\000\000\000\000\000\000\000\000\000\004\029\004-\000\000\000\000\000\000\004-\004-\004-\000\000\004-\000\0008v\000\000\004-\023f\004-\000\000\022\022\000\000\004-\023n\023v\004\029\004\029\026\002\004\029\004\029\000\000\004\0298z\000\000\000\000\000\000\004\029\004\029\004\029\022\004\029\004\002\026\018\000\000\000\000\000\000\004\0028~\000\0008\004\029\004\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\029\004\029\000\000\000\000\000\000\000\000\026\"\004\029\000\000\000\000\000\0006\000\000\000\000\000\000\000\000\022\022\004\029\004\029\004\029\005R\000\0008\004\029\004\029\005R\000\000\026.\000\000\000\000\000\000\000\0007\002\000\000&\150\000\000\000\000\004\029\000\0007\n\000\000\000\000\000\000\000\000\004\025\004\029\000\000\000\000\000\000\004\029\004\029\004\029\000\000\004\029\000\000\000\000\000\000\004\029\004\029\004\029\000\000\022\022\000\000\004\029\004\029\004\029\004\025\004\025\000\000\004\025\004\025\000\000\004\025\000\000\000\000\000\000\000\000\004\025\004\025\004\025\022\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004\025\000\000\000\000\000\000\000\000\000\000\004\025\000\000\bQ\bQ\000\000\000\000\000\000\000\000\000\000\022\022\004\025\004\025\004\025\000\000\000\000\000\000\004\025\004\025\000\0002b\000\000\000\0002r\000\000\bQ\bQ\000\000\bQ\bQ\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\004I\004\025\000\000\000\000\000\000\004\025\004\025\004\025\000\000\004\025\000\000\000\000\000\000\004\025\004\025\004\025\000\000\022\022\000\000\004\025\004\025\004\025\004I\004I2~\004I\004I\bQ\004I\000\000\000\000\000\000\000\000\022\023\006\023\014\022\004I\004\0022\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004I\004I\bQ\000\000\000\000\000\0002\158\004I\000\000\000\000\bQ\000\000\000\000\000\000\bQ\000\000\022\022\0236\023>\004I\005R\000\000\000\000\004I\004I\000\000\000\0002%\000\000\000\000\000\000\000\000\000\000:\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004I\000\000\000\000\000\000\004I\004I\004I\000\000\004I\000\000\000\000\000\000\004I\004I\004I\000\000\022\022\000\000\004I\004I\004I\004\001\004\001\000\000\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000\000\004\001\004\001\004\001\022\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\000\000\000\000\004\001\000\000\ba%j\000\000\000\000\000\000\000\000\000\000\022\022\004\001\004\001\004\001\000\000\000\000\000\000\004\001\004\001\000\000\000\000\000\000\000\000\000\000\000\000\ba\ba\000\000\ba\ba\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\003\004\001\000\000\000\000\000\000\004\001\004\001\004\001\000\000\004\001\000\000\000\000\000\000\004\001\004\001\004\001\000\000\022\022\000\000\004\001\004\001\004\001\003\003\000\000\003\003\ba\003\000\000\000\000\000\000\000\000\022\023\006\023\014\022\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\ba\000\000\000\000\000\000\000\000\003\000\000\000\000\ba\000\000\000\000\000\000\ba\000\000\022\022\0236\023>\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\ba\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\t\000\000\004%\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\022\022\000\000\003\003\003\004%\004%\015\004%\004%\000\000\004%\000\000\000\000\000\000\000\000\022\023\006\023\014\022\004%\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\004%\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\0002f\000\000\t\000\000\000\000\022\022\0236\023>\004%\t\000\000\000\000\004%\004%\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\004%\000\000\000\000\000\000\000\000\t\000\000\003\004%\000\000\000\000\000\000\004%\004%\004%\000\000\004%\000\000\000\000\000\000\004%\004%\004%\000\000\022\022\000\000\004%\004%\004%\003\003\015\003\003\000\000\003\000\000\000\000\000\000\000\000\022\023\006\023\014\022\003\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\0002v\000\000\t\000\000\000\000\022\022\0236\023>\003\t\000\000\000\000\003\003\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\003\000\000\000\000\000\000\000\000\t\000\000\004M\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\003\003\003\000\000\022\022\000\000\003\003\003\004M\004M\015\004M\004M\000\000\004M\000\000\000\000\000\000\000\000\022\023\006\023\014\022\004M\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\004M\000\000\000\000\000\000\000\000\000\000\004M\000\000\000\000\000\0002\134\000\000\t\000\000\000\000\022\022\0236\023>\004M\t\000\000\000\000\004M\004M\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\004M\000\000\000\000\000\000\000\000\t\000\000\004)\004M\000\000\000\000\000\000\004M\004M\004M\000\000\004M\000\000\000\000\000\000\004M\004M\004M\000\000\022\022\000\000\004M\004M\004M\004)\004)\015\004)\004)\000\000\004)\000\000\000\000\000\000\000\000\022\023\006\023\014\022\004)\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\004)\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\0002\150\000\000\t\000\000\000\000\022\022\0236\023>\004)\t\000\000\000\000\004)\004)\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\004)\000\000\000\000\000\000\000\000\t\000\000\0041\004)\000\000\000\000\000\000\004)\004)\004)\000\000\004)\000\000\000\000\000\000\004)\004)\004)\000\000\022\022\000\000\004)\004)\004)\0041\0041\015\0041\0041\000\000\0041\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\0041\000\000\000\000\000\0002\000\000\t\000\000\000\000\022\022\0236\023>\023N\t\000\000\000\000\0041\023V\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\0041\000\000\000\000\000\000\000\000\t\000\000\0045\0041\000\000\000\000\000\000\0041\0041\0041\000\000\0041\000\000\000\000\000\000\0041\023f\0041\000\000\022\022\000\000\0041\023n\023v\0045\0045\015\0045\0045\000\000\0045\000\000\000\000\000\000\000\000\022\023\006\023\014\022\0045\t\000\000\000\000\005*\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\0002\000\000\t\000\000\000\000\022\022\0236\023>\023N\t\000\000\000\000\0045\023V\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\0049\0045\000\000\000\000\000\000\0045\0045\0045\000\000\0045\000\000\000\000\000\000\0045\0045\0045\000\000\022\022\000\000\0045\023n\023v\0049\0049\000\000\0049\0049\000\000\0049\000\000\000\000\000\000\000\000\022\023\006\023\014\022\0049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\0049\023V\001\000\000\000\000\000\000\000\000\031r\000\000\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\000\000\004=\0049\000\000\000\000\001\0049\0049\0049\001\0049\000\000\029\029\0049\0049\0049\000\000\022\022\000\000\0049\023n\023v\004=\004=\000\000\004=\004=\000\000\022\000\000\000\000\000\0003F\022\023\006\023\014\022\023\022\000\000\021r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\031\138\031\146\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\0003J\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004=\023V\000\000\000\000\t\031\000\000\t\t\000\000\000\000\000\000\000\000\006\004=\000\000\006\006\000\000\000\000\000\000\006\004=\000\000\000\000\000\000\004=\004=\023~\016\004=\015\000\000\000\000\004=\023f\004=\000\000\000\000\000\000\028\142\004=\023n\023v\000\000\t\016\016\005*\b\014\000\000\016\000\000\006\016\016\006\016\000\000\000\000\000\000\014\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\016\016\014\000\000\000\000\000\000\006\t\006\016\016\000\000\000\000\004F\000\000\t\006\024\004\004\000\000\t\000\000\000\000\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\006\000\000\000\000\000\000\000\000\003\154\003\158\000\000\000\0006\000\000\000\000\016\000\000\025F\000\000\000\000\000\000\024\007\145\005\026\000\000\000\000\000\000\000\000\000\000\016\007F\000\000\000\0006\000\000\000\000\016\000\000\000\000\022\022\000\000\000\000\016\016\007\145\007\145\000\000\007\145\007\145\000\000\0226\007\134\000\000\000\000\022\023\006\023\014\022\023\022\000\000\0042\007\138\007\000\000\004\0026\000\000\007\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\007\145\000\000\000\000\000\0006\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\0008^\007\145\023V\005R\000\000\000\000\000\000\000\000\000\000\000\0007\002\000\000\000\000\000\000\000\000\007\145\000\0007\n\000\000\000\000\000\000\000\000\000\000\007\145\000\000\000\000\000\000\007\145\007\145\023~\012A\007\145\000\000\000\000\000\000\007\145\023f\007\145\000\000\000\000\000\000\000\000\007\145\023n\023v\000\000\000\000\012A\012A\000\000\012A\012A\000\000\012A\000\000\000\000\012A\012A\000\000\012A\000\000\000\000\000\000\012A\012A\012A\012A\012A\012A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012A\012A\012A\000\000\000\000\000\000\000\000\000\000\000\000\012A\012A\000\000\000\000\012A\000\000\000\000\000\000\012A\012A\012A\000\000\000\000\000\000\000\000\000\000\012A\012A\012A\012A\012A\000\000\000\000\006\000\000\012A\006\006\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000$*\000\000\012A\000\000\000\000\000\000\000\000\000\000\012A\000\000\000\000\000\000\000\000\000\000\0176\012I\012A\000\000\000\000\000\000\000\000\000\000\000\000\012A\000\000\000\000\000\000\000\000\006\000\000\012A\012A\012I\012I\000\000\012I\012I\000\000\012I\000\000\000\000\012I\012I\000\000\012I\000\000\000\000\000\000\012I\012I\012I\012I\012I\012I\000\000\000\000\000\000\006\000\000\006\000\000\000\000\000\000\012I\012I\012I\000\000\006\000\000\006\000\000\000\000\012I\012I\000\000\000\000\012I\000\000\000\000\000\000\012I\012I\012I\000\000\000\000\000\000\006\000\000\012I\012I\012I\012I\012I\000\000\000\000\000\000\000\000\012I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$B\000\000\012I\000\000\000\000\000\000\000\000\000\000\012I\000\000\000\000\000\000\000\000\000\000\000\000\012Q\012I\000\000\000\000\000\000\000\000\000\000\000\000\012I\000\000\000\000\000\000\000\000\000\000\000\000\012I\012I\012Q\012Q\000\000\012Q\012Q\000\000\012Q\000\000\000\000\012Q\012Q\000\000\012Q\000\000\000\000\000\000\012Q\012Q\012Q\012Q\012Q\012Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012Q\012Q\012Q\000\000\000\000\000\000\000\000\000\000\000\000\012Q\012Q\000\000\000\000\012Q\000\000\000\000\000\000\012Q\012Q\012Q\000\000\000\000\000\000\000\000\000\000\012Q\012Q\012Q\012Q\012Q\000\000\000\000\000\000\000\000\012Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$V\000\000\012Q\000\000\000\000\000\000\000\000\000\000\012Q\000\000\000\000\000\000\000\000\000\000\000\000\0129\012Q\000\000\000\000\000\000\000\000\000\000\000\000\012Q\000\000\000\000\000\000\000\000\000\000\000\000\012Q\012Q\0129\0129\006\0129\0129\000\000\0129\000\000\000\000\0129\0129\000\000\0129\000\000\000\000\000\000\0129\0129\0129\0129\0129\0129\000\000\000\000\000\000\006\006\000\000\006\006\000\000\0129\0129\0129\000\000\000\000\000\000\000\000\000\000\000\000\0129\0129\000\000\000\000\0129\004a\000\000\000\000\0129\0129\0129\000\000\005\"\000\000\000\000\000\000\0129\0129\0129\0129\0129\000\000\022\022\000\000\0129\006\000\000\004a\004a\000\000\004a\004a\000\000\022\000\000$b\000\000\0129\022\023\006\023\014\022\023\022\0129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0129\023\030\023&\000\000\000\000\006\000\000\0129\000\000\000\000\023.\023F\000\000\006\0129\0129\000\000\004a\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\006\006\000\000\004a\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004a\000\000\000\000\000\000\000\000\000\000\000\000\004e\004a\000\000\000\000\000\000\004a\004a\023~\000\000\004a\000\000\000\000\000\000\004a\023f\004a\000\000\022\022\000\000\004a\023n\023v\004e\004e\000\000\004e\004e\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004e\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\000\000\000\000\000\000\004i\004e\000\000\000\000\000\000\004e\004e\023~\000\000\004e\000\000\000\000\000\000\004e\023f\004e\000\000\022\022\000\000\004e\023n\023v\004i\004i\000\000\004i\004i\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\004i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004i\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004i\000\000\000\000\000\000\000\000\000\000\000\000\004]\004i\000\000\000\000\000\000\004i\004i\023~\000\000\004i\000\000\000\000\000\000\004i\023f\004i\000\000\022\022\000\000\004i\023n\023v\004]\004]\000\000\004]\004]\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004]\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\000\000\004]\004]\023~\000\000\004]\000\000\004a\000\000\004]\023f\004]\000\000\021\150\021\000\000\004]\023n\023v\004a\004a\000\000\004a\004a\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004a\000\000\000\000\004a\000\000\000\000\004a\000\000\000\000\000\000\000\000\004a\000\000\000\000\000\000\004a\004a\022f\000\000\004a\000\000\004e\000\000\000\000\022N\004a\000\000\021\150\021\000\000\004a\022V\022^\004e\004e\000\000\004e\004e\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\004e\000\000\000\000\004e\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\004e\004e\022f\000\000\004e\000\000\004i\000\000\000\000\022N\004e\000\000\021\150\021\000\000\004e\022V\022^\004i\004i\000\000\004i\004i\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004i\000\000\000\000\004i\000\000\000\000\004i\000\000\000\000\000\000\000\000\004i\000\000\000\000\000\000\004i\004i\022f\000\000\004i\000\000\004]\000\000\000\000\022N\004i\000\000\021\150\021\000\000\004i\022V\022^\004]\004]\000\000\004]\004]\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\004]\000\000\000\000\004]\000\000\000\000\000\000\003\004]\000\000\000\000\000\000\004]\004]\022f\000\000\004]\000\000\000\000\000\000\000\000\022N\004]\000\000\022\022\000\000\004]\022V\022^\003\003\000\000\003\003\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\003\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\023~\000\000\003\000\000\000\000\000\000\003\023f\003\000\000\022\022\000\000\003\023n\023v\003\003\000\000\003\003\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\003\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\023~\000\000\003\000\000\003\000\000\003\023f\003\000\000\021\150\021\000\000\003\023n\023v\003\003\000\000\003\003\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\022f\000\000\003\000\000\003\000\000\000\000\022N\003\000\000\021\150\021\000\000\003\022V\022^\003\003\000\000\003\003\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\022f\000\000\003\000\000\003M\000\000\000\000\022N\003\000\000\021\150\021\000\000\003\022V\022^\003M\003M\000\000\003M\003M\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\003M\000\000\000\000\003M\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\003M\003M\022f\000\000\003M\000\000\007\145\000\000\000\000\022N\003M\000\000\021\150\021\000\000\003M\022V\022^\007\145\007\145\000\000\007\145\007\145\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\007\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\145\000\000\000\000\007\145\000\000\000\000\007\145\000\000\000\000\000\000\000\000\007\145\000\000\000\000\000\000\007\145\007\145\022f\000\000\007\145\000\000\003\000\000\000\000\022N\007\145\000\000\003\003\000\000\007\145\022V\022^\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\003\000\000\000\000\0030\022\000\000\021\150\021\000\000\003\003\003\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\003\000\000\000\000\000\000\003M\003\000\000\000\000\000\000\003\003\003\000\000\003\000\000\000\000\000\000\000\000\022N\003\000\000\022\022\000\000\003\022V\022^\003M\003M\000\000\003M\003M\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\003M\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\000\000\000\000\003\003M\000\000\000\000\000\000\003M\003M\023~\000\000\003M\000\000\000\000\000\000\003M\023f\003M\000\000\003\003\000\000\003M\023n\023v\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\003\003\003\000\000\000\000\000\003\003\000\000\000\000\001\n\000\000\001>\001\014\000\000\000\000\000\000\001n\000\000\001\018\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003\003\003\001\022\003\000\000\001\001\003\003\025^\000\000\000\000\000\000\001\026\003\003\003\000\000\001\001\002\002\004*\000\000\000\000\000\000\001z\001\000\000\000\000\000\000\0042\004F\000\000\004~\004\002\004\130\004\004\b\158\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\005\t\005\t\000\000\t\030\r\b\b\000\000\000\000\014\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005R\000\000\005\t\005\t\000\000\005\t\005\t\000\000\000\000\000\000\b\000\0000\022\022\014\b\014\000\000\003\003\000\000\003\003\000\000\003\000\000\000\000\000\000\003\006\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\005\t\000\000\000\000\003\023V\000\000\007\000\000\005\t\000\000\000\000\000\000\005\t\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\005\t\000\000\003\003\003\000\000\003\000\000\004m\000\000\003\023f\003\000\000\021\150\021\000\000\003\023n\023v\004m\004m\000\000\004m\004m\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\000\000\000\000\000\000\000\000\000\000\004m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004m\000\000\000\000\004m\000\000\000\000\004m\000\000\000\000\000\000\004m\004m\000\000\000\000\000\000\004m\004m\022f\000\000\004m\000\000\000\000\000\000\000\000\022N\004m\000\000\022\022\000\000\004m\022V\022^\004m\004m\000\000\004m\004m\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\004m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\004m\023V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004m\000\000\000\000\000\000\004m\004m\023~\0179\004m\000\000\000\000\000\000\004m\023f\004m\000\000\000\000\000\000\000\000\004m\023n\023v\000\000\000\000\0179\0179\b\021\b\014\000\000\0179\000\000\000\000\0179\0179\000\000\0179\000\000\000\000\000\000\014\0179\0179\0179\0179\0179\000\000\000\000\000\000\b\021\b\021\000\000\b\021\b\021\000\000\0179\0179\014\000\000\000\000\000\000\000\000\000\000\000\000\0179\0179\000\000\000\000\004F\000\000\000\000\000\000\024\004\004\000\000$\134\016\000\000\000\000\0179\0179\0179\0179\0179\000\000\000\000\000\000\000\000\0179\b\021\000\000\000\000\0252\016\016\000\000\b\014\000\000\016\000\000\0179\016\016\000\000\016\000\000\024\000\000\014\016\016\016\016\016\0179\000\000\000\000\000\000\000\000\b\021\000\000\0179\000\000\016\016\014\000\000\b\021\0179\0179\000\000\b\021\016\016\000\000\b\021\004F\000\000\000\000\000\000\024\004\004\000\000\000\000\0175\b\021\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\0175\0175\000\000\b\014\000\000\0175\000\000\016\0175\0175\000\000\0175\000\000\024\000\000\014\0175\0175\0175\0175\0175\016\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0175\0175\014\000\000\000\000\016\016\000\000\000\000\0175\0175\000\000\000\000\004F\000\000\000\000\000\000\024\004\004\000\000\000\000\016\137\000\000\000\000\0175\0175\0175\0175\0175\000\000\000\000\000\000\000\000\0175\000\000\000\000\000\000\000\000\016\137\016\137\000\000\b\014\000\000\016\137\000\000\0175\016\137\016\137\000\000\016\137\000\000\024\000\000\014\016\137\016\137\016\137\016\137\016\137\0175\000\000\000\000\000\000\000\000\000\000\000\000\0175\000\000\016\137\016\137\014\000\000\000\000\0175\0175\000\000\000\000\016\137\016\137\000\000\000\000\004F\000\000\000\000\000\000$\030\004\004\000\000\002\149\000\000\000\000\000\000\016\137\016\137\016\137\016\137\016\137\000\000\000\000\000\000\000\000\016\137\000\000\000\000\000\000\002\149\002\149\000\000\002\149\002\149\000\000\002\149\000\000\000\000\016\137\002\149\000\000\002\149\000\000\000\000$2\002\149\002\149\002\149\002\149\002\149\002\149\000\000\016\137\000\000\000\000\000\000\000\000\000\000\000\000\016\137\002\149\002\149\002\149\000\000\000\000\000\000\016\137\016\137\000\000\002\149\002\149\000\000\000\000\002\149\000\000\000\000\000\000\002\149\002\149\002\149\000\000\000\000\005\t\000\000\000\000\002\149\002\149\002\149\002\149\002\149\000\000\000\000\000\000\000\000\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\000\000\000\000\000\000\002\149\000\000\000\000\000\000\000\000\000\0002>\016\002\149\000\0002B\000\000\000\000\000\000\000\000\002\149\000\000\000\000\003\006\000\000\000\000\000\000\002\149\002\149\016\016\000\000\b\014\000\000\016\000\000\005\t\016\016\005\t\016\000\000\000\000\000\000\014\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\014\000\000\000\000\005\t\005\t\000\000\005\t\016\016\000\000\000\000\004F\007\000\000\005\t\024\004\004\005\t\005\t\000\000\000\000\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\005\t\000\000\000\000\016\016\000\000\r\r\000\000\016\000\000\000\000\016\000\000\000\000\016\000\000\000\000\024\014\002\016\016\016\016\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\014\006\000\000\000\000\000\000\016\016\000\000\016\016\000\000\000\000\004\022\000\000\000\000\000\000\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\0129\0129\000\000\0129\0129\000\000\0129\000\000\000\000\016\000\000<\014\0129\000\000\000\000 \0129\0129\0129\0129\0129\0129\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016\0129\0129\0129\000\000\000\000\000\000\016\016\000\000\0129\0129\000\000\000\000\0129\000\000\000\000\000\000\0129\0129\0129\000\000\000\000\000\000\000\000\000\000\0129\0129\0129\0129\0129\000\000\000\000\000\000\000\000\0129\000\000\000\000\000\000\016\016\000\000\r\r\000\000\016>\000\000\0129\000\000\000\000\016\000\000\000\000\0129\014\002\016\016\016\016\016\000\000\0129\000\000\000\000\000\000\000\000\000\000\000\000\0129\016\016\014\006\000\000\000\000\000\000\0129\0129\000\000\016\016\000\000\000\000\004\022\000\000\000\000\000\000\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\0179\0179\000\000\r\r\000\000\0179\000\000\000\000\016\000\000\000\000\0179\000\000\000\000 \014\002\0179\0179\0179\0179\0179\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016\0179\0179\014\006\000\000\000\000\000\000\016\016\000\000\0179\0179\000\000\000\000\004\022\000\000\000\000\000\000\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\0179\0179\0179\0179\0179\000\000\000\000\000\000\000\000\0179\000\000\000\000\000\000\016\016\000\000\r\r\000\000\016\000\000\000\000\0179\000\000\000\000\016\000\000\000\000 \014\002\016\016\016\016\016\000\000\0179\000\000\000\000\000\000\000\000\000\000\000\000\0179\016\016\014\006\000\000\000\000\000\000\0179\0179\000\000\016\016\000\000\000\000\004\022\000\000\000\000\000\000\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\0175\0175\000\000\r\r\000\000\0175\000\000\000\000\016\000\000\000\000\0175\000\000\000\000 \014\002\0175\0175\0175\0175\0175\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016\0175\0175\014\006\000\000\000\000\000\000\016\016\000\000\0175\0175\000\000\000\000\004\022\000\000\000\000\000\000\014\150\004r\000\000\000\000\000\000\000\000\000\000\000\0175\0175\0175\0175\0175\000\000\000\000\000\000\000\000\0175\000\000\000\000\000\000\016\137\016\137\000\000\r\r\000\000\016\137\003\016b\0175\000\000\016j\016\137\000\000\000\000 \014\002\016\137\016\137\016\137\016\137\016\137\003\0175\000\000\000\000\000\000\000\000\000\000\003\0175\016\137\016\137\014\006\000\000\000\000\000\000\0175\0175\000\000\016\137\016\137\000\000\000\000\004\022\000\000\000\000\000\000>^\004r\000\016r\003\000\000\000\000\000\000\016\137\016\137\016\137\016\137\016\137\002\014\003\003\000\000\016\137\016~\0145\005*\000\000\t*\001\030\000\000\000\000\001F\000\000\000\000\000\000\016\137\000\000\001J\003\003\002\030j>r\tJ\000\000\0145\0145\016\138\0145\000\000\016\137\000\000\b5\000\000\003\000\000\000\000\016\137\tR\000\000\000\000\005>\000\000\000\000\016\137\016\137\000\000\000\000\000\000\016\146\000\000\t^\011\138\001v\000\000\b5\016\154\000\000\b5\b5\000\000\000\000\002\014\003\003\n\000\000\011N\000\000\011v\000\000\000\000\004\142\002\014\003\003\000\000\004\002\005&\000\000\005*\0145$\134\000\000\000\000\000\000\000\000\000\000\000\000\004\146\004\150\000\000\000\000\000\000\0145\0145\b5\0145\000\000\0252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\000\000\0145\000\000\000\000\0145\0145\000\000\004\154\005R\0145\000\000\0145\000\000\011\000\000\0145\022\022\000\000\b5\000\000\000\000\003E\000\000\000\000\003E\003E\b5\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\0141\000\000\000\000\000\000\b5\023\030\023&\001\n\000\000\000\000\001\014\000\000\000\000\000\000\023.\023F\000\000\000\000\000\000\000\000\000\000\003E\000\000\0141\0141\000\000\0141\0141\000\000\000\000\022\022\0236\023>\023N\0145\000\000\000\000\000\000\023V\000\000\tn\001\n\000\000\000\000\001\014\000\000\000\000\000\000\000\000\n\001\018\003E\000\000\000\000\000\000\tr\000\000\0145\0145\003E\0145\0145\012\000\000\012\023~\012\000\000\000\000\000\000\n\"\000\000\023f\003\003\002\000\000\000\000\000\000\003E\023n\023v\000\000\000\000\n&\nv\001\000\000\b\003\000\000\000\000\000\000\000\000\006\0042\003\000\000\n\030\000\000\n*\000\000\n2\000\000\000\000\b\000\000\0141\000\000\000\000\0141\0141\000\000\000\000\000\000\0141\000\000\0141\003\003\000\000\0141\b\b\000\000\000\000\000\000\000\000\002\014\003\003\000\000\004\002\005&\000\000\005*\000\000\000\000\000\000\000\000\000\000\000\000\0145\021\150\021\0145\0145\000\000\b\003E\0145\000\000\0145\003E\n\134\021\0145\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\005R\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022.\006Z\000\000\006^\016\153\000\000\003E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\016\153\016\153\000\000\022>\000\000\000\000\016\153\000\000\000\000\016\153\016\153\000\000\016\153\nA\000\000\000\000\003E\016\153\016\153\016\153\016\153\016\153\000\000\000\000\003E\000\000\000\000\000\000\022v\000\000\022f\016\153\016\153\000\000\000\000\000\000\000\000\022N\003E\000\000\016\153\016\153\000\000\003E\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\153\016\153\016\153\016\153\016\153\000\000\000\000\000\000\000\000\016\153\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\016\153\000\000\000\000\tJ\000\000\000\000\029r\000\000\000\000\000\000\016q\000\000\003\1547\134\016\153\000\0007\142\000\000\"\130\000\000\000\000\016\153\025^\000\000\000\000\000\000\000\000\005\026\016\153\016\153\000\000\"\134\tj\001v\007F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\0007\150\007\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0042\007\138\007\004\146\004\1507\011\007\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\"\138\001J\005R\000\000\000\000\000\000\tJ\000\000\000\000<\158\000\0007\004\154\016q\000\000\000\000\000\000\000\000\011\000\000\000\000\"\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\"\134\tj\001v\000\000\000\000\000\0007\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\003\003\012\014\000\000\000\000\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\003\004\146\004\150\001J\011\000\000\000\000\003\tJ\000\000\018\0180\134\000\000\000\000\000\000<\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\003\003\000\000\000\000\011\000\000\000\000\t^\tj\001v\003\003\003\000\000\003\003\000\000\003\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\000\000\004\146\004\150\001J\011\000\000\000\000\000\000\tJ\003\000\000\014B\000\000\000\000\000\0000\158\000\000\005R\000\000\t\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\006\000\000\000\000\000\000\011\000\000\000\000\t^\tj\001v\000\000\000\000\000\000\t\000\000\0171\t\t\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\022\022\000\000\000\000\000\000\000\000\0171\000\000\020R\0171\0171\000\000\022\004\146\004\150\000\000\011\022\023\006\023\014\022\023\022\t\000\000\000\000\007\000\000/\000\000\005R\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\004\154\023.\023F\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\022\022\0236\023>\023N\t\000\000\t\000\000\023V\t*\001\030\t.\t\001F\000\000\t6\000\000\000\000\t\001J\000\000\0171\000\000\t\tJ\000\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\000\000\000\000\tR\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\022\022\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\004\146\004\150\000\000\011\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\023\000\000\005R\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\004\154\023.\023F\000\000\000\000\000\000\011\016\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\016\145\000\000\000\000\016\145\016\145\000\000\022\000\000\000\000\016\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\023f\000\000\000\000\000\000\023.\023F\000\000\023n\023v\016\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\016\149\000\000\000\000\016\149\016\149\000\000\022\000\000\000\000\000\000\016\145\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\023\030\023&\000\000\000\000\000\000\000\000\023f\000\000\000\000\023.\023F\000\000\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\000\000\023V\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\016\149\000\000\000\000\tJ\000\000\000\000\030\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\000\000\000\000\tR\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\000\000\004\146\004\150\001J\011\000\000\000\000\000\000\tJ\000\000\000\000\030\000\000\000\000\000\000\030.\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\t\000\000\000\000\000\000\011\000\000\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\003\003\002\031\000\000\000\000\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\003\004\146\004\150\001J\011\000\000\000\000\005>\tJ\000\000\000\000!*\000\000\000\000\000\000\031\022\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\003\003\000\000\000\000\011\000\000\000\000\t^\tj\001v\002\014\003\003\000\000\004\002\005&\000\000\005*\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\000\000\004\146\004\150\001J\011\000\000\000\000\000\000\tJ\005R\000\000\"\000\000\000\000\000\000!J\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\004\146\004\150\000\000\011\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\"\000\000\005R\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\004\154\016\016\000\000\000\000\000\000\011\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\016\016\016\016\000\000\000\000\016\016\016\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\016\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\000\000\016\016\017=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\016\016\016\016\000\000\022\022\000\000\016\000\000\000\000\017=\000\000\000\000\017=\017=\000\000\022\000\000\000\000\000\000\016\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\023\030\023&\000\000\000\000\000\000\000\000\016\000\000\000\000\023.\023F\000\000\000\000\016\016\017\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\017\005\000\000\000\000\017\005\017\005\000\000\017\005\000\000\000\000\017=\000\000\017\005\017\005\017\005\022\017\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\017\005\017\005\000\000\000\000\000\000\023f\000\000\000\000\000\000\017\005\017\005\000\000\023n\023v\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\017\005\017\005\017\005\000\000\022\022\000\000\017\005\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\017\005\016\016\016\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\005\016\016\000\000\000\000\000\000\000\000\017\005\000\000\000\000\016\016\000\000\000\000\017\005\017\005\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\016\016\016\000\000\000\000\022\022\016\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\016\016\016\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\016\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\000\000\016\016\017\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\016\016\016\000\000\017\t\017\t\000\000\016\000\000\000\000\017\t\000\000\000\000\017\t\017\t\000\000\017\t\000\000\000\000\000\000\016\017\t\017\t\017\t\017\t\017\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\017\t\017\t\000\000\000\000\000\000\000\000\016\000\000\000\000\017\t\017\t\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\017\t\017\t\017\t\017\t\000\000\000\000\022\022\017\t\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\017\t\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\t\000\000\023\030\023&\000\000\000\000\000\000\017\t\000\000\000\000\000\000\023.\023F\000\000\017\t\017\t\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\016\016\016\016\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\023f\000\000\000\000\016\016\000\000\000\000\023n\023v\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\016\016\016\000\000\000\000\022\022\016\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\016\016\016\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\016\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\000\000\016\016\017\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\016\016\016\000\000\022\022\000\000\016\000\000\000\000\017\r\000\000\000\000\017\r\017\r\000\000\017\r\000\000\000\000\000\000\016\022\023\006\023\014\022\017\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\023\030\023&\000\000\000\000\000\000\000\000\016\000\000\000\000\017\r\017\r\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\017\r\000\000\000\000\022\022\017\r\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\017\r\000\000\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\r\000\000\023\030\023&\000\000\000\000\000\000\017\r\000\000\000\000\000\000\023.\016\000\000\017\r\017\r\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\016\000\000\016\016\000\000\016\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\016\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\016\016\016\016\000\000\000\000\016\016\016\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\016\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\016\016\016\016\000\000\022\022\000\000\016\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\016\016\016\016\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\016\016\016\000\000\000\000\022\022\016\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\016\000\000\022\022\000\000\016\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\016\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\023\030\023&\000\000\000\000\000\000\000\000\016\000\000\000\000\023.\016\000\000\000\000\016\016\017\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\016\000\000\000\000\022\022\016\000\000\000\000\000\000\017\017\000\000\000\000\017\017\017\017\000\000\017\017\000\000\000\000\016\000\000\022\023\006\023\014\022\017\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\016\000\000\000\000\000\000\023.\017\017\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\017\017\000\000\022\022\000\000\017\017\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\017\017\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\017\023\030\023&\000\000\000\000\000\000\000\000\017\017\000\000\000\000\023.\016\000\000\000\000\017\017\017\017\017\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\016\000\000\000\000\022\022\016\000\000\000\000\000\000\017\001\000\000\000\000\017\001\017\001\000\000\022\000\000\000\000\016\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\016\000\000\000\000\000\000\023.\023F\000\000\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\017\001\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\023\030\023&\000\000\000\000\000\000\000\000\023f\000\000\000\000\023.\023F\000\000\000\000\023n\023v\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\016\000\000\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\023f\000\000\000\000\000\000\023.\023F\000\000\023n\023v\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\016\000\000\000\000\016\016\000\000\016\000\000\000\000\000\000\016\022\023\006\023\014\022\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\023\030\023&\000\000\000\000\000\000\000\000\016\000\000\000\000\023.\023F\000\000\000\000\023n\023v\017%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\017%\000\000\000\000\017%\017%\000\000\022\000\000\000\000\016\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\023\030\023&\000\000\000\000\000\000\016\000\000\000\000\000\000\023.\023F\000\000\023n\023v\017)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\017)\000\000\000\000\017)\017)\000\000\022\000\000\000\000\000\000\017%\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\023\030\023&\000\000\000\000\000\000\000\000\023f\000\000\000\000\023.\023F\000\000\000\000\023n\023v\017-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\017-\000\000\000\000\017-\017-\000\000\022\000\000\000\000\017)\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\023\030\023&\000\000\000\000\000\000\023f\000\000\000\000\000\000\023.\023F\000\000\023n\023v\017!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\000\000\023V\000\000\000\000\017!\000\000\000\000\017!\017!\000\000\022\000\000\000\000\000\000\017-\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\023\030\023&\000\000\000\000\000\000\000\000\023f\000\000\000\000\023.\023F\000\000\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\000\000\000\000\023V\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\017!\000\000\000\000\tJ\000\000\000\000<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\000\000\000\000\tR\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\003\015~\000\000\000\000\015\000\000\000\000\000\000\t*\001\030\t.\000\000\001F\000\000\t6\003\004\146\004\150\001J\011\000\000\000\000\003\tJ\000\000\015\023\000\000\000\000\000\000<\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\004\154\000\000\015\003\000\000\000\000\011\000\000\000\000\t^\tj\001v\002\014\003\003\000\000\004\002\015\000\000\005*\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\015\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150\t\011\000\000\017\138\000\000\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\015\005R\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\t\000\000\025\n\t\t\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\022\022\000\000\000\000\000\000\000\000\000\000\007\015\000\000\000\000\000\000\022\004\146\004\150\000\000\011\022\023\006\023\014\022\023\022\t\000\000\000\000\005*\000\000\000\000\000\000\005R\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\004\154\023.\023F\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\022\022\0236\023>\023N\t\000\000\t\000\000\023V\t*\001\030\t.\t\001F\000\000\t6\000\000\000\000\t\001J\000\000\000\000\000\000\t\tJ\000\000\000\000\0302\000\000\000\000\000\000\000\000\000\000\000\000\025\014\023~\000\000\025\026\000\000\tR\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150\031\026\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150!N\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150\"\142\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\003\003\002!\000\000\tJ\004\146\004\150\"\011\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\tR\000\000\005R\005>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\002\014\003\003\n\004\002\011N\000\000\011v\011\134\014\130\004\142\002\014\003\003\000\000\004\002\005&\000\000\005*\000\000\001\030\000\000\000\000\001F\000\000\000\000\000\000\004\146\004\150\001J\011\000\000\000\000\019V\019z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\000\000\001\r\000\000\000\000\000\000\000\000\000\000\000\000\004\154\005R\000\000\001\000\000\000\000\011\000\000\000\000\000\000\001\001v\000\000\006}\006}\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\004&\000\000-^\004r\000\000\000\000\000\004\142\000\000\000\000\000\000\021\150\021\000\000\000\000\000\000\000\000\017e\007\000\000\n\017e\000\000\021\004\146\004\150\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\019^\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\004\154\022\022\022.\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000:\147\000\000\000\000\tJ\000\000\000\000/\134\000\000\000\000\000\000\000\000\000\000\007-\022f\000\000-\000\000\tR\000\000\000\000\022N\000\000\000\000\000\000\000\000\000\000\000\000\022V\022^\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150/\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\1500\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\007\007\011\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\000\000\000\000\000\000\007\007\007\007\007\007\000\000\t\t\000\000\000\000\t\000\000\004\146\004\150\000\000\011\t\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\t\003\006%\005R\000\000\000\000\000\000\006\000\000\000\000\000\000\t\000\014\004\154\t\007\007\000\000\007\011\000\000\018\000\000\000\000\t\t\t\000\000\000\000\000\000\006\000\0009\026\006\006\t\000\000\000\000\t\t\t\006\t\t\007\t\007\007\000\000\022\022\000\000\007\007\007\007\007\019\007\007\000\000\022\t\t\000\000\t\022\023\006\023\014\022\023\022\006\000\000\007\007\000\000\000\000\000\000\t\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\000\000\t\023.\023F\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\006\000\000\006\000\000\000\000\022\022\0236\023>\023N\006\000\000\006\000\000\023V\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\006\tJ\000\000\000\000<\000\000\000\000\000\000\000\000\000\000\000\0009\030\023~\000\0009&\000\000\tR\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t*\001\030\t.\000\000\001F\000\000\t6\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\tJ\004\146\004\150<\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tR\000\000\005R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\154\t^\tj\001v\000\000\000\000\011\000\000\t\t\000\000\000\000\002\014\000\000\t\n\004\002\011N\000\000\011v\011\134\014\130\004\142\t\000\000\t6\000\000\000\000\000\000\t\tn\001\n\000\000\000\000\001\014\000\000\000\000\000\000\004\146\004\150\001\018\011\000\000\000\000\000\000\tr\000\000\007Z\000\000\000\000\t\t\t\000\000\005R\000\000\000\000\000\000\000\000\000\000\n\"\t\t\t\004\154\t\t\000\000\t\000\000\011\000\000\000\000\n&\t\001\000\000\000\000\000\000\000\000\000\000\006\149\000\000\000\000\0042\000\000\000\000\n\030\004\002\n*\000\000\n2\nr\000\000\b\000\000\000\000\000\000\022\022\000\000\000\000\006r\000\000\t\000\000\000\000\000\000\006\149\000\000\022\b\b\000\000\nz\022\023\006\023\014\022\023\022\000\000\000\000\000\000\011f\000\000\000\000\000\000\005R\000\000\023\030\023&\000\000\000\000\000\000\000\000\006\153\000\000\b\023.\023F\000\000\000\000\000\000\n~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022\022\0236\023>\023N\000\000\000\000\000\000\006\153\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\006\149\t\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000\000\000\t\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\006\153\000\000\023~\000\000\023.\023F\000\000\000\000\000\000\023f\017e\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\017e\000\000\000\000\000\000\017e\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000-\"\000\000\023~\000\000\023\030\023&\000\000\000\000\000\000\023f\000\000\000\000\000\000\023.\023F\000\000\023n\023v\017i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\022\022\b1\023V\000\000\000\000\017i\000\000\000\000\000\000\017i\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\b1\b1\000\000\b1\b1\023~\023\030\023&\000\000\000\000\000\000\000\000\023f\000\000\000\000\023.\023F\000\000\000\000\023n\023v\t\000\000\000\000\000\000\000\000\000\000$\134\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\b1\000\000\000\000\0252\000\000\000\000\000\000\t\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\023\030\023&\000\000\b1\000\000\023f\n\017\000\000\000\000\023.\023F\b1\023n\023v\000\000\b1\000\000\000\000\000\000\b1\000\000\000\000\000\000\022\022\022\022\0236\023>\023N\b1\000\000\000\000\n\017\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\0002J\004\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000\000\000\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\n\017\000\000\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\000\000\022\022\0236\023>\023N\000\000\016\153\016\153\004\023V\000\000\000\000\016\153\000\000\000\000\000\000\000\000\000\000\016\153\000\000\000\000\000\000\000\000\016\153\016\153\016\153\016\153\016\153\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\023~\016\153\016\153\000\000\000\000\000\000\000\000\023f\000\000\000\000\016\153\016\153\000\000\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\016\153\016\153\016\153\016\153\016\153\000\000\000\000\000\000\000\000\016\153\000\000\000\000\tz\001\001\t~\n\001\001\000\000\000\000\000\000\016\153\000\000\000\000\000\000\000\000\000\000\t\n\000\000\000\000\000\000\000\000\000\000\000\000\016\153\004\004\000\000\000\000\000\000\024\016\1530\022\000\000\000\000\000\000\000\000\000\000\016\153\016\153\000\000\t\002\t\006\t\n\t\014\t\018\000\000\022\022\000\000\t\022\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\023\030\023&\000\000\000\000\000\000\000\000\011\002\000\000\011\006\023.\023F\000\000\000\000\011\n\011\014\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\003\154\003\002\000\000\000\000\000\000\000\000\023~\000\000\023\030\023&\000\000\000\000\000\000\023f\000\000\005\026\000\000\023.\023F\000\000\023n\023v\027\134\000\000\000\000\025\000\000\000\000\000\000\000\000\000\000\021\150\021\022\022\0236\023>\023N\022~\000\000\000\000\024\023V\021\007V\007\134\000\000\000\000\021\021\021\021\021\000\000\0042\007\138\007\000\000\004\002\007\000\000\007\022\006\022\014\000\000\000\000\000\000\000\000\000\000\023~\000\000\022\022\022.\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\005R\000\000\000\000\000\000\021\150\021\000\000\000\000\000\000\000\000\017i\005\000\000\000\000\017i\025\021\000\000\000\000\000\000\000\000\021\021\021\021\021\022f\000\000\022n\000\000\000\000\000\000\000\000\022N\000\000\022\006\022\014\000\000\000\000\000\000\022V\022^\000\000\000\000\022\022\022.\000\000\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\158\021\022\030\022&\0226\000\000\022\022\000\000\022>\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\022f\023\030\023&\000\000\000\000\000\000\000\000\022N\000\000\000\000\023.\023F\000\000\000\000\022V\022^\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\000\000\022\022\023V\000\000\000\000\000\000\000\000\000\000\000\000$&\000\000\000\000\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\023\030\023&\000\000\000\000\000\000\023f\024\000\000\000\000\023.\023F\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\022\022\0236\023>\023N\000\000\000\000$>\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000-f\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000-j\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000-~\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000-\130\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\024\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000.\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\024\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000.\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000.\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000.\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000 \023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000/\022\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000.\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\000/v\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\021\150\021\022\022\0236\023>\023N\005\000\000\000\000 \023V\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\006\022\014\000\000\000\000\000\000\000\00012\023~\000\000\022\022\022.\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\021\158\021\022\030\022&\0226\000\000\000\00016\000\000\022>\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\0051F\022f\000\000\023.\023F\000\000\000\000\000\000\022N\000\000\000\000\000\000\000\000\000\000\000\000\022V\022^\022\022\022\022\0236\023>\023N\000\000\000\0001J\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\0004:\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\0004>\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\0004\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\022\022\022\022\0236\023>\023N\000\000\000\0004\000\000\023V\022\000\000\000\000\000\000\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\030\023&\000\000\000\000\000\000\000\000\000\000\023~\000\000\023.\023F\000\000\000\000\000\000\023f\000\000\000\000\000\000\000\000\000\000\000\000\023n\023v\000\000\000\000\022\022\0236\023>\023N\000\000\021\150\021\000\000\023V\000\000\000\000\0171\025\000\000\000\000$R\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\022\006\022\014\000\000\000\000\000\000\000\000\023f\000\000\000\000\022\022\022.\000\000\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\0171\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\0003\000\000\022f\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\145/\000\000\000\000-\142\000\000\021\000\000\000\000\000\000\016\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\1490r\000\000\000\000.\000\000\021\000\000\000\000\000\000\016\145\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\0009\n\000\000\022f\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\016\016\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\149\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000;\000\000\022f\016\016\000\000\000\000\000\000\000\000\022N\000\000\000\000\016\016\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\016\016\016\016\000\000\016\016\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\016\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\017=4\006\000\000\000\000/*\000\000\021\000\000\000\000\000\000\016\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\022\022\022.\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\017\005\000\000\000\000\000\000\000\000\000\000\017\005\000\000\000\000\000\000\017=\017\005\017\005\017\005\021\017\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022f\017\005\017\005\000\000\000\000\000\000\000\000\022N\000\000\000\000\017\005\017\005\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\017\005\017\005\017\005\000\000\021\150\021\000\000\017\005\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\005\016\016\016\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\005\016\016\000\000\000\000\000\000\000\000\017\005\000\000\000\000\016\016\000\000\000\000\017\005\017\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\016\016\016\000\000\017\t\017\t\000\000\016\000\000\000\000\017\t\000\000\000\000\000\000\000\000\000\000\017\t\000\000\000\000\000\000\016\017\t\017\t\017\t\017\t\017\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\017\t\017\t\000\000\000\000\000\000\000\000\016\000\000\000\000\017\t\017\t\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\017\t\017\t\017\t\017\t\000\000\021\150\021\000\000\017\t\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\t\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\t\022\006\022\014\000\000\000\000\000\000\000\000\017\t\000\000\000\000\022\022\022.\000\000\000\000\017\t\017\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\022N\000\000\000\000\016\016\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\017\r\000\000\000\000\000\000\000\000\000\000\017\r\000\000\000\000\000\000\016\021\021\021\021\017\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\017\r\017\r\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\017\r\000\000\021\150\021\000\000\017\r\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\r\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\r\022\006\022\014\000\000\000\000\000\000\000\000\017\r\000\000\000\000\022\022\016\000\000\000\000\017\r\017\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\016\000\000\016\016\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\016\016\016\016\000\000\016\016\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\016\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\016\016\016\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\016\016\016\000\000\021\150\021\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\016\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\016\000\000\021\150\021\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\022\022\016\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\016\000\000\021\150\021\000\000\016\000\000\000\000\017\017\000\000\000\000\000\000\000\000\000\000\017\017\000\000\000\000\000\000\016\021\021\021\021\017\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\022\022\017\017\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\017\017\000\000\021\150\021\000\000\017\017\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\017\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\017\022\006\022\014\000\000\000\000\000\000\000\000\017\017\000\000\000\000\022\022\016\000\000\000\000\017\017\017\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\016\000\000\021\150\021\000\000\016\000\000\000\000\017\0019\018\000\000\000\0001V\000\000\021\000\000\000\000\000\000\016\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\016\000\000\000\000\022\022\022.\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\001\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022f\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\016\021\021\021\021\016\000\000\000\000\000\000\000\000\000\000\011}\000\000\000\000\016\022\006\022\014\000\000\000\000\019\000\000\016\000\000\000\000\022\022\022.\000\000\000\000\022V\022^.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011}\000\000\021\158\021\022\030\022&\0226\000\000\000\000\022\022\022>\015:\000\000\000\000\000\000\000\000\000\000>f\021\"\000\000\022\000\000\000\000\016\021b\022\023\006\023\014\022\023\022\000\000\021r\000\000\000\000\000\000\000\000\024\016\000\000\023\030\023&\000\000\000\000\000\000\016\000\000\000\000\000\000\023.\023F*2\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000*:*R\000\000\022\022\0236\023>\023N\000\000\021\150\021\000\000\023V\000\000\026f\017%;\000\000\000\0005\002\000\000\021\000\000*Z\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\022\006\022\014\000\000\000\000\000\000\000\000\023f\000\000\000\000\022\022\022.\000\000\000\000\023n\023v \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\022\022\022>\000\000\000\000\000\000\000\000\000\000\000\000>~\000\000\000\000\022\000\000\000\000\017%\000\000\022\023\006\023\014\022\023\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022f\000\000\023\030\023&\000\000\000\000\000\000\022N\000\000\000\000\000\000\023.\023F\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\022\0236\023>\023N\000\000\021\150\021\000\000\023V\000\000\000\000\017)\146\000\000\021\000\000\000\000\000\000\000\000\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023~\022\006\022\014\000\000\000\000\000\000\000\000\023f\000\000\000\000\022\022\022.\000\000\000\000\023n\023v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\017-\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\017)\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022f\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\021\150\021\000\000\022>\000\000\000\000\017!\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\017-\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022f\022\006\022\014\000\000\000\000\000\000\000\000\022N\000\000\000\000\022\022\022.\000\000\000\000\022V\022^\000\000\000\000\000\000\000\000\000\000\tn\001\n\000\000\000\000\001\014\021\158\021\022\030\022&\0226\001\018\000\000\000\000\000\000\022>\tr\000\000\000\000\000\000\000\000\n.\000\000\000\000\000\000\000\000\000\000\000\000\017!\000\000\000\000\n\"\t\t\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\022f\000\000\n&\t\001\t\000\000\022N7\154\000\000\000\000\000\000\t\0042\022V\022^\n\030\004\002\n*\000\000\n2\nr\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\007Z\000\000\t*\001\030\t\t\001F\000\000\000\000\000\000\b\b\001J\nz\t\t\t\tJ\t\t\002\006\t\000\000\000\000\000\000\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\b\000\000\006\000\000\000\000\000\000\n~\000\000\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\002\014\t\000\000\n\004\002\011N\000\000\011v\011\134\000\000\004\142\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\tn\001\n\000\000\000\000\001\014\000\000\000\000\000\000\004\146\004\150\001\018\011\000\000\000\000\000\000\tr\000\000\000\000\000\000\000\000\004n\000\000\000\000\000\000\005R\000\000\000\000\000\000\000\000\000\000\n\"\000\000\000\000\000\000\004\154\000\000\000\000\000\000\000\000\000\000\011\000\000\000\000\n&\t\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0042\000\000\000\000\n\030\004\002\n*\000\000\n2\nr\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t*\001\030\000\000\000\000\001F\000\000\000\000\000\000\b\b\001J\nz\000\000\000\000\000\000\tJ\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\005R\000\000\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\b\000\000\t\000\000\000\000\000\000\n~\000\000\000\000\t^\tj\001v\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\002\014\000\000\000\000\n\004\002\011N\000\000\011v\011\134\000\000\004\142\000\000\000\000\000\000\021\150\021\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\021\004\146\004\150\000\000\011\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\000\000\022\006\022\014\003\022\000\000\000\000\000\000\000\000\000\000\004\154\022\022\022.\000\000\000\000\000\000\011\000\000\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\n\n\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\n\000\000\005\t\000\000\000\000\n\000\000\000\000\007\023\005\t\000\000\000\000\000\000\005\t\000\000\022f\000\000\022\000\000\n\000\000\000\000\022N\000\000\000\000\000\000\000\000\000\000\005\t\022V\022^\000\000\n\n\n\000\000\000\000\000\000\000\000\000\000\t\017\000\000\000\000\n\000\000\000\000\n\n\n\000\000\n\n\000\000\n\000\000\000\000\000\000\021\150\021\000\000\000\000\000\000\t\017\t\017\000\000\t\017\t\017\000\000\000\000\021\n\n\000\000\n\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\022\006\022\014\000\000\000\000\000\000\000\000\000\000\000\000\n\022\022\022.\000\000\000\000\000\000\n\t\017\000\000\000\000\t\017\000\000\000\000\000\000\000\000\000\000\000\000\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\000\000\000\000\003\003\002\015^\000\000\000\000\000\000\000\000\t\017\000\000\t\017\000\000\000\000\000\000\000\000\000\000\003\000\000\t\017\000\000\017\022\011}\t\017\003\000\000\022f\000\000#R\000\000\000\000\000\000\000\000\022N\000\000\018\000\000\000\000\t\017\000\000\022V\022^\018\000\000\000\000\000\000\003\003\018\000\000\000\000\000\000\000\000\000\000\000\000\019\006\002\014\003\003\000\000\004\002\005&\000\000\005*\000\000\000\000\000\000\000\000\000\000\000\000\021\150\021\000\000\000\000(\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000(\"(F\021\021\021\021\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\030\022\006\022\014\001F\000\000\000\000\000\000\000\000(N\001J\022\022\022.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\158\021\022\030\022&\0226\000\000\000\000\000\000\000\000\022>\001\000\000\000\000\000\000\000\000\000\000\001\030\001\001v\001F\006}\006}\001z\004\018\000\000\001J\000\000\002\014\004\022\000\000\004&\000\000\004j\004r\000\000\000\022f\004\142=\138\000\000\000\000\001\000\000\022N\000\000\000\000\000\000\000\000\000\000\000\000\022V\022^\001\000\000\004\146\004\150\000\000\000\000\000\000\001\001v\000\000\006}\000\000\001z\004\018\019N\000\000\000\000\002\014\004\022\000\000\004&\000\000\004j\004r\000\000\000\000\000\004\142\004\154\000\000\000\000\000\000\000\000\000\000\004\003\003\002)J\000\000\000\000\000\000\000\000\000\000\000\000\004\146\004\150\000\000\000\000\000\000\000\000\003\000\000\011\000\000\000\000\011\019r\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)f\000\000\004\154\000\000\000\000\000\000\000\000)r\004\000\000\000\000\003\003)\142\000\000\000\000\001\030\000\000\000\000\001F\019\006\002\014\003\003\000\000\001J\005&\000\000\005*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\158\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000))\001\000\000\000\000\000\000\000\000\000\000\nM\001\001v\nM\006}\000\000\001z\004\018\000\000\nM\000\000\002\014\004\022\000\000\004&)\004j\004r\000\000\000\000\000\004\142\000\000\000\000\000\000\nM\000\000\000\000\000\000\000\000\000\014\000\000\000\000\000\000\000\000\000\000\nM\000\000\004\146\004\150\000\000\000\000\000\000\nM\nM\000\000\000\000\000\000\nM\nM5\000\000\000\000\nM\nM\000\000\nM\000\000\nM\nM\nM\000\000\000\000\nM\004\154\001\030\000\000\000\000\001F\000\000\004\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\000\000\nM\nM\000\000\000\000\000\000\000\000\000\000\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\nM\000\000\001\001v\000\000\000\000\nM\001z\004\018\000\000\000\000\000\000\002\014\004\022\000\000\b\000\000\r\146\004r\000\001\n\000\000\004\142\001\014\000\000\000\000\000\000\000\000\005\t\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tY\000\000\004\146\004\150\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\001\026\000\000\000\000\000\000\000\000\000\000\000\000\001:\001\004\154\000\000\000\000\001z\001\000\000\r\154\000\000\0042\004F\000\000\004~\003\022\004\130\004\004\000\000\0141\b\000\000\000\000\001\030\000\000\000\000\001F\000\000\005\t\000\000\000\000\005\t\000\000\000\000\000\000\000\000\000\000\b\b\0141\0141\000\000\0141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\000\000\000\000\000\000\b\000\000\007\012\002\005\t\000\000\b\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\000\000\012N\000\000\012j\000\000\012z\000\000\000\000\005\t\0051\000\000\r\r\000\000\000\000\000\000\000\000\0141\001\030\000\000\001~\001F\000\000\000\000\014\002\000\000\004\150\001J\000\000\000\000\0141\0141\000\000\0141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\006\001\134\001N\000\000\0141\000\000\000\000\0141\0141\000\000\000\000\004\022\0141\001R\0141\014\150\004r\000\0141\001\n\001j\001v\001\014\000\000\001\138\001z\004\018\000\000\001\018\000\000\002\014\004\022\0051\004B\000\000\004j\004r\000\000\000\000\000\004\142\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\b\000\000\004\146\004\150\000\000\000\000\000\000\b\001\000\000\000\000\001z\001\000\000\000\000\000\0042\004F\000\0000\000\000\025\004\004\000\000\000\000\b\004\154\000\000\000\000\000\000\000\000\004\158\000\000\000\000\000\000\000\000\000\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\"\000\000\000\000\001\005\003\000\000\001\005\001\005\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\0001\002\000\000\000\000\000\000\000\000\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\005\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\005\"\000\000\000\000\000\000\000\b\000\000\000\001\005\000\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\005\b\b\000\000\b\b\000\000\000\000\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\005\000\000\001\005\000\000\000\000\000\000\001\005\000\000\001\005\000\000\001\005\001\005\001\005\000\000\001\005\001\005\b\b\000\000\000\000\001\005\000\000\001\005\000\000\001\005\001\005\000\000\b\001\005\001\005\b\000\000\000\000\000\000\000\000\000\000\000\000\b\b\b\b\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\005\150\b\000\000\b\000\000\b\b\000\000\b\b\000\000\b\000\000\b\000\000\b\b\b\b\000\000\b\b\000\000\000\000\000\000\b\000\000\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\bB\b\000\000\b\000\000\b\002\002\b\002\002\b\000\000\b\000\000\b\b\002\000\000\000\000\000\000\bN\b\b\b\b\000\000\000\000\000\000\b\b\000\000\b\005\b\000\000\b\b\000\000\002\002\000\000\002\002\b\000\000\b\002\b\b\b\b\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\b\b\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\002\000\000\002\000\000\000\000\002\000\000\000\000\002\000\000\002\000\000\002\002\000\000\000\000\000\000\003\003\002\000\000\002\000\000\002\000\000\000\000\000\000\bZ\002\000\000\000\000\000\000\002\003\002\000\000\000\000\000\000\015\000\000\003\000\000\002\000\000\002\000\000\002\002\000\000\003\003\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\005\002\003\003\003\000\000\000\000\003\003\002\016\130\000\000\003\002\014\003\003\000\000\004\002\005&\000\000\005*\000\000\000\000\003\000\000\000\000\000\000\000\0006\000\000\003\000\000\000\000\000\000\003\003\000\000\000\000\000\000\003\003\002\000\000\000\000\000\000\002\014\003\003\000\000\004\002\005&\000\000\005*\003\003\003\000\000\005R\000\000\000\0007\000\000\003\002\014\003\003\000\000\004\002\005&\000\000\005*\006Z\000\000\006^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\007\000\000\005R\000\000\000\000\007\000\000\000\000\002\014\003\003\000\000\004\002\005&\000\000\005*\006Z\000\000\006^\000\000\005R\000\000\007\007\000\000\007\007\007\007\000\000\007\007\000\000\000\000\006Z\017y\006^\t\000\000\000\000\t\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\022\000\000\005R\000\000\000\000\003\030\000\000\000\000\017y\017y\000\000\017y\017y\000\000\007\015\130\006Z\007\006^\007\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\005*\000\000\000\000\007\007\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\007\000\000\000\000\007\017y\007\007\017y\007\000\000\000\000\007\007\007\007\t\007\007\000\000\000\000\000\000\007\000\000\t\000\000\t\007\007\000\000\000\000\000\000\t\007\017y\000\000\017y\000\000\t\000\000\000\000%\000\000\t\017y\r\017\022\000\000\017y\000\000\007\007\000\000\007\007\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017y\000\000\000\000\000\000\r\r\000\000\r\r\000\000\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\000\000\000\000\000\000\000\007\007\000\000\007\000\000\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\000\000\000\000\r\000\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\000\000\000\000\000\000\007\000\000\007\000\000\000\000\000\000\007\000\000\004\r\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\000\000\007\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r")) and lhs = - (16, "\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\021\001\021\001\020\001\020\001\019\001\019\001\018\001\018\001\017\001\017\001\016\001\016\001\015\001\015\001\015\001\014\001\014\001\014\001\r\001\012\001\012\001\011\001\011\001\n\001\n\001\t\001\t\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\007\001\007\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\005\001\005\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\003\001\003\001\002\001\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\159\000\158\000\158\000\157\000\157\000\156\000\156\000\155\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\139\000\138\000\138\000\138\000\138\000\137\000\137\000\137\000\136\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\132\000\132\000\132\000\132\000\131\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\129\000\129\000\128\000\127\000\127\000\127\000\127\000~\000~\000~\000~\000~\000}\000}\000|\000|\000{\000z\000z\000y\000y\000x\000x\000x\000w\000w\000v\000v\000u\000t\000t\000s\000s\000r\000r\000q\000q\000p\000p\000p\000p\000o\000o\000o\000o\000n\000n\000m\000m\000l\000l\000k\000k\000j\000j\000j\000j\000i\000i\000i\000i\000i\000i\000h\000h\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000g\000f\000f\000e\000e\000d\000d\000c\000c\000b\000b\000a\000a\000`\000`\000_\000_\000^\000^\000]\000]\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000U\000U\000T\000S\000R\000R\000R\000Q\000P\000O\000N\000N\000M\000M\000L\000L\000K\000K\000J\000J\000J\000J\000J\000J\000J\000J\000J\000J\000J\000J\000I\000I\000I\000I\000H\000H\000G\000G\000F\000E\000E\000D\000D\000D\000C\000C\000C\000B\000B\000A\000A\000@\000@\000@\000@\000?\000?\000?\000?\000?\000>\000>\000=\000=\000<\000<\000;\000;\000:\000:\0009\0009\0008\0008\0007\0007\0006\0006\0005\0005\0004\0004\0003\0003\0003\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0001\0001\0001\0001\0001\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\000/\000/\000/\000/\000/\000/\000/\000/\000/\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000.\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000-\000,\000,\000,\000,\000+\000+\000+\000+\000+\000+\000*\000*\000)\000)\000)\000)\000)\000)\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000(\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000'\000&\000&\000%\000%\000$\000#\000#\000\"\000\"\000\"\000\"\000\"\000\"\000!\000!\000!\000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000 \000\031\000\031\000\030\000\030\000\030\000\030\000\029\000\028\000\027\000\027\000\026\000\026\000\025\000\025\000\025\000\025\000\025\000\025\000\024\000\024\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\020\000\019\000\018\000\017\000\016\000\016\000\016\000\015\000\015\000\015\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\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\r\000\012\000\012\000\011\000\011\000\n\000\n\000\n\000\n\000\n\000\n\000\t\000\b\000\b\000\007\000\007\000\007\000\007\000\007") + (16, "\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\020\001\020\001\019\001\019\001\018\001\018\001\017\001\017\001\016\001\016\001\015\001\015\001\014\001\014\001\014\001\r\001\r\001\r\001\012\001\011\001\011\001\n\001\n\001\t\001\t\001\b\001\b\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\006\001\006\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\002\001\002\001\001\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\159\000\158\000\158\000\157\000\157\000\156\000\156\000\155\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\137\000\136\000\136\000\136\000\136\000\135\000\135\000\135\000\134\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\129\000\129\000\129\000\129\000\128\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000\127\000~\000~\000}\000|\000|\000|\000|\000{\000{\000{\000{\000{\000z\000z\000y\000y\000x\000w\000w\000v\000v\000u\000u\000u\000t\000t\000s\000s\000r\000q\000q\000p\000p\000o\000o\000n\000n\000m\000m\000m\000m\000m\000m\000m\000m\000l\000l\000l\000l\000l\000l\000l\000l\000k\000k\000j\000j\000i\000i\000h\000h\000g\000g\000g\000g\000f\000f\000f\000f\000f\000f\000e\000e\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000d\000c\000c\000b\000b\000a\000a\000`\000`\000_\000_\000^\000^\000]\000]\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000U\000U\000T\000T\000S\000S\000R\000R\000Q\000Q\000P\000P\000O\000N\000M\000M\000M\000L\000K\000J\000I\000I\000H\000H\000G\000G\000F\000F\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000C\000C\000B\000B\000A\000@\000@\000?\000?\000?\000?\000?\000?\000?\000>\000>\000>\000=\000=\000<\000<\000;\000;\000:\000:\0009\0009\0009\0009\0008\0008\0008\0008\0008\0008\0007\0007\0006\0006\0005\0005\0005\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0004\0003\0003\0003\0003\0003\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0002\0001\0001\0001\0001\0001\0001\0001\0001\0001\0001\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000/\000.\000.\000.\000.\000-\000-\000-\000-\000-\000-\000,\000,\000+\000+\000+\000+\000+\000+\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000)\000(\000(\000'\000'\000&\000%\000%\000$\000#\000#\000\"\000\"\000\"\000\"\000\"\000\"\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000!\000 \000 \000\031\000\031\000\031\000\031\000\030\000\029\000\028\000\028\000\027\000\027\000\026\000\026\000\026\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\022\000\021\000\020\000\019\000\018\000\017\000\016\000\016\000\016\000\015\000\015\000\015\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\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\r\000\012\000\012\000\011\000\011\000\n\000\n\000\n\000\n\000\n\000\n\000\t\000\b\000\b\000\007\000\007\000\007\000\007\000\007") and goto = - ((16, "\004\t\000m\001\000\030\000\023\001\n&\000\000\000\000\000\000\r\006\0009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020J\b\000\000\000\000\nV\000\130\000\000\000\000\000\000\000\000\000\000\020\011\000\000\000\029\000\000\000\005\000\020\018\022\029\001\000\000\021\022\000\000\000\000\000\000\r\006\000\000\016b\004\142\005\000\000\021.\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\128\000\000\000\000\000\000\000\000\020J\000\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000l\000\000\005\146\002Z\000\000\004\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001J\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\003\024\000\000\000\000\000\000\004\022\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000N(\b\000\000\000\002\018\000\000\006\006r#\022\005@\000\000(\150\000\000\000\000r\000\000\026\000\014\002\\\006h\021\030\000\155\005d\000\000)\025\000\000(\018\004\000\007\002\024\152\025\001\006F\000\000\000\000\000\000\000\000\b7 \000\000\000\000\001\r\000\000)\018\026(\011\150D|\000\000\000\000\000\000\000\000\007l\000\000\000\000\000\000\000\000Xh\b\000V\031\000\000\021\022\000\000\000\000\000\000\000\000\000\000\000\t\t2\000\000\000\000\000\000\000\000\000\000\000J\003.\n\000\000\000\000\000\000s@\007t\011A)b\000\000\000\001\158\000\000 \n^\011\011\011\000\000\000\000\000\000\rX\000\000\000\000\000\000\000\000sL\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\011Z\000\000\000\000\127\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\014\030\000\000)\000\000\000\000\000\000*4\000\000\000\000\000\000*@\000\000\014L\000~\000\000\000\000\000\000\000\000\014Z\000\149\014\030\000\000\000\000\000\000\000\000\000\000\018b\014\000\000\000\000\000\000\000\000\015\n\000\000\000\0005\144\014r\014T\000\000\000r(\150\000\000\000\000Q@\000\000\000\000\000\000\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\015\142\015\002\000\000\000\000\000\000\000\000\023j\000\000\000\000\000\000\002\014\000\0008\002\000\000\000\000\002\128\000\000\000\000\003x\000\000\000\000\000\000\000\000Z\000\000\000\000\0168\000\000\000\000\000\000)\000\155\000\000\000\000\000\000\017\022\000\150\000\003\000\000\000\000\000\000\000\000\000\000tL\000\000\000\000\000\000\006P\000\000\000\000\000\000\0170\000\000\000\000\000\000\000\000\000\000\000\000*T\017\146\018\014\017|\018D\000\000\000\000\000\000\000\000#\000\000\000\000\000\000+L\000\000\000\000\000g\000\000\029\022\018\156\000\000\000\000\000\000\000\000\030\142\018\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\019\144\000\000\000\000,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\002\000\000\000\000\128$\000\000\000\000\000\000\018.\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000t^\000\000\000\000\000\000\0208+FbH\000\000\000\000\000\000\000\000\019N\004\b z\000\000\000\000+\026R\003\002p\012\000\000\000\000\000\000\000\000\000u|4\007\000\000\021l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\1469\000\000\000\000\000\000\000\000\001t~\000\000g\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \152\000\000\006\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\019\007\002\134\000\000t\000\000\000\000\000\000\b\000\000\000\000\000\000\000\019\142\000\000\000\000\000\000\000\000\000\000\000\000\000\0005\018\000\000\000\000\000\000\005\000\000\000\000\000\000\018\014\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\020\000\000\000\000\000\000\000\000<\003z5\018\007x\020v\004^\020\000\000\000\000\000\000\000\000\000\000\003f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\150#*\025\000\000,\000\000\000\000/\000\000\022f\000\000\020J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~|\000\000\022\020\000\000\134\n\000\000\000\000\000\000\000\000\000\000%B\000\000\000\000\000\000\022B\134\n\134\130\000\000\000\000\001Z\000\000\000\000\000\000\012> \152\000\00092\000\022\018\012\022\"\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004d\130\000\000\000\000\000\000A.\000\000\000\000C\000\000\023\000\000\020\000\000\000\000\000\000\000\000gZ\000\000\000\000t\000\000\135\000\000*\156\000\000\023\016\000\000\135\000\000\000\000\000\000\000\000.\000\000\000\000\000\000\007$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000j\000\000\000\000\000\000\000\000t\000\000\000\000\000\000\000\000\000\000\000\000\000\000?(\000\000\000\000ID\000\000\000\000\000\000\b,\000\000\000\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000\000\000\000u\\\000\000\000\000\000\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\000\023j\000\000\000\000\000\000\000\000\000\000\000\000U\000\000r\000\000\000\000\000\000\000\000\000\000\137\000\000\138:\000\000\000\000\000\000\000\000\000\000\000\000,:\000\000\ry&\022\000V\000\000\000\000\000\000\000\000\000\000\000\000\001\129\016\000\000\000\000\000\000\000\000,^\000\000\135\000\000,\144\003b\127\001\000\000\000\000\000\000\021\005\000\000\000\000\023\000\000\022\007H,\000\000\000\000\136*\000\000-~\007-\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000'V\000\000\000\000\000\000--\129\\\001.\132\t\000\000./^\129\128\000\000\000\000\000\000\000\0230\024B\023\134u\000\000o\030\024Fv,\000\000\000\000\000\000/\136\001/0\030\0000|\000\000\025\012\023\156\006\n\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\146\000\000\000\000\024\152\024\\\000\000\000\000\024\000\000\023\006\028\n\024\006D\024\134\005\000\000\000\000\001/\001(0\130\000\000\000\000\000\000\025\030\000\000\000\000\000\000\000\000\001m\000\0001\n(\150\bN\000\000\006\\\000\000\000\000)b\011\000\000\r\000\000\016\020\000\000\011\016:\000\000\016^\000\000\000\000\016\000\000\000\000\016\000\000\017\000\000\018b\000\000\000\000\018x\000\000\018\000\000\000\000\018\000\000\000\000\018\000\000\0196\000\000\019\000\000\003\019\000\000\020\000\000(\150\020\000\000)b\022\018\000\000\023H\000\000\023d\000\000\015\028\025\000\000\025\000\000\000\000\026\000\000\000\000\026\000\000\027N\000\000\027P\000\000\000\000\027\156\000\000\028\000\000\000\000\029\002\000\000\000\000\029\158\000\000\029\000\000\030D\000\000\000#n8\000\000v2\000\000\025\020\000\000\025\024\134\002\154\024\006\138\001\005p\000\000\025\000\000\000\000\000\000\000\000\000\000\006N\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001(\003P\000\000\000\000\004r\0258\000\000\000\000\000\000\019\000\000\000\000\003r\000\000\005h\025>\000\000\000\000\000\000\b\000\000\000\000\024\006\138\024\000\000\000\000\000\000\024b\000\000\000\005\030\000\000\031\002\000\000\000\000\031F\000\000\000\000\031b\000\000\031\000\000 R\000\000\024t\007\000\000\000\000\024x\b\148\000\000\000\000\005\000\024~\006\016\000\000\024\142\t4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\152\0258\000\000\000\000\024\007L\012H\0268\000\000\000\000v\128\000\000\b\004\007\136P\000\0000\000\000\026:\023\007L\000\000\000\000\000\000\n\014\000\0282\020\000\000\000\000{$\129\000\000\129\000\000\00322*\000\000\000\000\127\129\000\000\000\000\000\000\000\000\000\000\000\000\026:\0242\t\140\n\014\012\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000:\000\000\r0\002\026\000\000\019L\014R\025\128\006\156\025\020\001\011Z\003(n\154\000\000v\000\000\025\132\000\000\026,\002\025(\011Z\000\000\000\000\007\150\000\000\026>\000\000\000\000\000\000\000\000\000\000\024\002\024 ho\024\000\000\000\000\025v\000\000\000\000\000\000\000\000\000\000 |\000\000\000\000 \156\000\000\000\000 \000\000 \000\000 \000\000\024\011:\000\000\000\000\024\012\000\000\000\000\t\024\012\000\000\024\r\006\000\000\000\000\000\000\000\000\000\000\024\tX\022h\004z\000\000\000\000\000\000\n\n\014\000\000\014N\n\014\004z\000\000\016\026\128\000\000wP\000\000\n\br\020J\000\000\000\0002\150\000\000\000\000\000\0002\000\0003\006\000\000\005\000\000\000\000\000\0003\018\000\00036\000\0003r\000\0003\000\0003\000\0004\000\0004\000\0005R\000\0005\000\0005\000\0006:\000\0006\000\0006\000\0007\022\000\0007.\000\0007z\000\0007\000\00078x\000\000\000\0008\000\0009^\000\0009\136\000\0009\000\000:\024\000\000:4\000\000\000\000/^\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000:n\000\000:\000\000\025$8\000\000\026n;\026\000\000;~\000\000<\014\000\000L\000\000>\000\000?8\000\000?\132\000\000?\142\000\000?\000\000?\000\000@N\000\000@\154@\000\000\000\000A\028\000\000Ar\000\000A\000\000A\000\000w\154\000\000w\025w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Bt\000\000\026\030\000\000I\0030o\138\000\000\025\001;B\000\000\000\000\000\000o\030\025\025\000\000\000\000x\"\000\000B\000\000\000\000x@\000\000C \000\000\000\000C\142\000\000\000\000\000\000x\000\000C\000\000\000\000D\020\000\000\000\000\011J\tH\130X\000Dj\000\000\000\000\000\000\011D\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\014V\000El\000\000\000\000\014\b\000\000\000\000\014\000\000\000\000\015\000\000\000\000\011R\007\130|\000E\136\000\000\000\000\t\136h\026\018E\000\000\000\000E\000\000\025n\025\000\000\000\000\000\000\136\000\000F\024\024\000\000\000\000F\140\000\000\130\000\026\000\000y6\000\000\000A\025\000\000\000\000\000\000\003 h\004n\000\000\000\000\000\000 |\r\000\000\000\000 \156\014,\000\000\000\000 \014f\000\000 \0152\000\000 \015\128\000\000\000\000\000\000\000\000\011\000\000F\000\000\016\028\000\000G\026\000\000 \136\000\000\rF\000\000\011\000\000\025\138\007\000\000\000\000\026\025H\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\nyT\000\000\000\000\000\000\000\000\000\000\006L\006\025\000\000\026\000\000\000\000\000\000\000\000y\000\000\026\000\000\000\000G\025Z\011\000\000\000\000y\000\000\000\000\026\000\000\000\000H\006\000\000\001(\000\000\000\000\000\000\000\000\000\000\025p\014\000\000\000\000\000\000\000\000\000\000\012\000\000p*\000\000y\000\000\000\000\000\000\025h\bD\000\000\026\000\000\000\000H:\000\000\026\000\000\000\000H\144\000\000\r\140\000\000p^\000\000\000\000\026@\001\000\000\000\000\016D\000\000\000\000\000\000\014\134\000\000\000\000\000\000\004B\014\138\000\000\000\000\015\150\000\000\000\000\b\000\000\000\000\025\004f\000\000\000\000\000\000\025\004f\000\000\000\000\tx\000\000\000\011J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025pr\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\007\028\000\000\025P\026\004T\026(\000\000\000\000z\012\000\000\000\000\000\000\026,\000\000\000\000\000\000{\002\000\000\000\000\000\000\026H\000\000\000\000H\000\000\000\000\000\000\000\b\027T\026T\bvpj\000\000\026x\007\142Ij\000\000\000\000\000\000p\026T\000\000{\024\000\000I\000\000\000\000{4\000\000J\028\000\000\000\000J\000\000\000\000\000\000{J\000\000J\000\000\000\000K,\000\000\000\000\130\000\026\146\nF\011\004\148\000\000\000\000\000\000\000\000q\020\000\000\000\000\018\016\b\000\000\000\000\000\000\018\000\000\026\140\000\000\000\000\000\000q\132\000\000\000\000\000\000\n\132\011&\000\000\026cL\000\000\131F\000\026\021\026\000\000q\144\000\000\000\000\n\000\000\000\000\000\000J\138\000\000\006fK\138\026\138\000\000{f\t\000\000\000\000\012T\000\000\000\000\000\000\026\002f\n\132\000\000\011F\000\000\000\000\000\000\000\000\137\022\000\000\000\127\000\000\026\000\000\000\000\000\000\027\132\rV\130\015>\000\000\131\006\016\020\000\000\000\000\000\000\017&\026\131\030\000\000\000\000\027\002\131`\000\000\000\000\000\000\004\134\000\000\000\000\000\000\000\000\000\000\000\000\017B\000\000\000\000\000\000\000\000\000\000\024\022\000\000\000\000\000\000\000\000\026\142\000\000\000\000\000\000\027\152\000\000\000\000\000\000\131\001\rK\154\000\000\000\000\000\000Lh\000\000\000\000\000\000\000\000\000\000\026\023\b\012f\015\000\000\000\000\000\000\000\000\000r6\000\000\000\000\024\t\152\000\000\000\000\000\000\025(\000\000\026\000\000\000\000\000\000q\000\000{\132\000\000\000\000\000\000\000\000\014\018\016\000\000\132\n\001\026\026\148\026\000\000r\000\000\000\000\016\000\000\000\000\000\000L\018\000\000\b\012K\138\026\000\000{\152\r\000\000\016p\000\000\000\000\000\000\027\000\004&\014\000\000\017b\000\000\000\000\000\000\000\000\1376\000\000\007\"\000\000\027\004\000\000\000\000\000\000\028R\000\000\000\000\006\136\000\000\000\000\027\006\000\000\000\000\000\000\r\000\000\n~\016p\000\000\000\000\017X\000\000\000\000\017\130\000\000L\000\000\1326\000\000\000L\000\000L\000\000Mj\000\000Mt\000\000M\000\000M\000\000N^\000\000Np\000\000O\002\000\000O\156\000\000O\000\000PT\000\000Pd\000\000P\000\000P\000\000P\000\000QP\000\000Q\000\000RR\000\000\000\000S\020\000\000SL\000\000S|\000\000S\000\000\000\000S\000\000\000\000\000\000\012(\000\000\000\000\000\000\000S\000\000\000\000T:\000\000\016\026T\000\000\000\000UR\000\000U\158\000\000\000\000U\000\000\000\000V\014\000\000\000\000\001J\000\000\016\0150\000\000\017\016\016:\000\000\017\016\000\000+\154\000\000\000\000\000\000\000\000\004\146\017\026\132\000\000\026\020{\027\000\000\000|\000\000\026\000\000\016\000\000\000\000\017\000\000\000\000\000\000\027\000\000\000\000+\000\000\000\000.X\000\000\000\000\000\000\000\000\000i\000\000\n\014\000\000\000\000\000\000\000\000\026J\0278\000\146\005\000\000\000\000\000\000\000\000\000\000\014R\019\016\026\000\000\026:|\027\026\000\000}\024\000\000\026\000\000\019\000\000\006*\000\000\000\000\000\000\000\000\000\000\tJ\000\000\000\000\000\000\011\002\000\000\000\000\000\000\019\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000/\000\000\000\000:R\000\000\000\000\000\000\016\144\017\016\020>\017\016;\140\020\"\000\000\000\000\000\000\000\000\000\000\b\006\000\000\n:\000\000\000\000\000\000\n\000\000\000\000\007\b\000\000\000\000$B\027$\b\000\000\000\000\026L\002\003\003\030\000\000\000\000\005\012\000\000\000\000\015x\007\016@\000\000\011\016\138\000\000\000\000\000\000\000\000\027r\027\016\000\000\000\000\027^\026\138\020\000\000\000\000\027\132N\000\000\021\146\017\016\028\022\000\000}.\000\000\018\000\000\012X\000\000\018\020t\012\000\000\017\132\000\000\000\000\000\000\014\000\000\000\000\015\bZ\000\000\000\000V \000\000\000\000\016j\132\016\000\000\132\017L\000\000\000\000\000\000\0142\027\133\018\000\000\000\000$B\027\133\024\000\000\000\000\000\000\012\000\000\000\000\000\000\017\016\000\000?\024\000\000\000\000\000\000\000\000\017\016}J\000\000\000\000\000\000\000\000\000\000\000\000B\000\000\028*\000\000}h\000\000\020r\000\000\026\154\000\000\n\000\000\026\000\000\028\000\000\t\016\000\000\000\000\019^\000\000\000\000\nv\000\000\000\000\000\000Mv\000\000\000\000\000\000\000\000\003\146\027@\000\000\000\000\020\024C\004\000\000\000\000\000\000\000\000\020\r\028\000\000\021|\000\000\000\000\000\000\021\000\000\000\000\r\000\000\000\000\007T\027\128\tN\000\000\026\004\022\000\000\000\000\026\020\000\000\028f\000\000~@\000\000E\000\000\028~\000\000~V\000\000\020v\000\000\026\000\000\019\152\011\156\000\000\000\000\005\027\142\000\000\000\000\000\000\022,\014r\000\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\000\000\002\026\000\000\000\000\023t\n\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\000\000\024\136\n\014\000\000\000\000\000\000\028\000\000\000\000\000\000 $\000\000\028v\000\000\027!\004\000\000\000\000\000\000\000\000\021\027\000\000\000\000\000\000\004\000\000%\004\000\000\003\156\027j\000\000\017\000\000\000\000V~\000\000\000\000\000\000\000\000\000\000\003\134\027\018\000\000\000\000\000\000\000\000V\144\000\000\000\000\000\000\000\000\005\000\000\1280,^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\b\014\017\016\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\029r\000\000\000\000\000\000!>\000\000\000\000\022v\027\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000K\000\000\028\000\000~\144\000\000\020\027\000\000\000\000\000\000\027(\000\000\022$\022:\000\000\027\140\007\144\019\000\000\000\000\000\000\015F\022~\000\000\000\000\022\000\000\000\000\020X\000\000\000\000\027\142\000\000%\000\000\011\0222\000\000\000\000\022@\000\000\000\000\r\000\000\000\000\000\000RL\000\000\000\000\000\000\000\000\r$\027\000\000\000\000\023XN\000\000\000\000\000\000\000\000\023\146\016\000\000\023\000\000\000\000\000\000\023\000\000\000\000\017\000\000\000\000\n\028\026\012.\000\000\000\000\027D\006*\000\000\028`\028\000\000\000\000\000\027v\022\156Yh\000\000\000\000\000\000\029\b\000\000~\000\000a\000\000\029\026\000\000~\000\000\022\000\000\027\142\000\000\023,\0232\020\000\000\015l\000\000\000\000\014X\028.\000\000\000\000\000\000\023\019J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\014\021\014\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\000\000\000\000!\000\000\000\000\022\146\028t\000\000\000\000\000\000\011v\000\000\000\000\000\000\000\000\000\000\000\000\000\000W\000\000\000\022W\130\000\000\000\000W\140\000\000W\000\000\000\000Xt\000\000\000\000X\000\000\000\000\000\000\000\000\000\000X\000\000\023YR\000\000\000\000Y\142\000\000Y\000\000\000\000Y\000\000\000\000ZT\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030$\000\000\000\000\000\000*\136\000\000Zj\000\000\000\000\000\000\000\000\000\000>t\000\000[^\000\000\027p[\000\000\133B\001\000\000\000\000\028\142Z8\000\000\003D\\\024\000\000\000\000\000\000\137\152\028\154\000\000\\$\000\000\027\028F\000\000\000\000\000\000\000\000\026:\000\000\000\000\\H\000\000\027\144\\\000\000\133Z\000\000\000\000\000\000\000\000\000\028\011\\\000\000\000\000\000\000\028\018\025\000\000\000\000\000\000\000\000\030\026\000\000\000\000\000\000\000\000\027\004\b\000\000\000\000\000\000\000\000\000\000\133z\000\000\000\000]:\000\000\000\000\000\000\023]\000\000\000\000\000\000^>\000\000\000\000\000\000\000\000\000\000\025\012\025|\027\138\n\014\021\000\000\000\000\000\000\000\000\000\000\000\000\030\000\000\000\000\000\000\"\000\000\000\000\000\023\028\000\000\000\000\000\000\014R\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000^\148\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\000\000\000\000\000\000^\158\000\000\028^\000\000\000\000\000\000\000\000\026\030\014r\030\021\000\000\000\000\031\002\022|\000\000\000\000\031F\023,\000\000\000\000\031b\023V\000\000\031\023\154\000\000 R\023\000\000\000\000\000\000\000\000%H\028\018x\028_V\000\000\000\000\028D\000\000\029\\\000\000\000\000\000\000\000\000\029`\028V\000\000\000\000\001T\000\000\000\000\000\000\029\002\028\000\000\014v\000\000\000\000\016d\000\000\0154\000\000\000\000\027\015*\000\000\028\016\022\000\000\005\027\000\000\000\000\027\029\004\016l\000\000%Z\000\000\000\000\023\028\016\n\014ej\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\n\132\000\000\025\012\000\000%\000\000\000\000_\134\000\000_\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000_\000\000\000\000\000\000\028\137\029.\000\000\016\026\000\000\017N\000\000\000\000\000\000\0298\028\000\000\0180\000\000\000\000\0188\000\000\018\134\000\000\000\000\029&\019\018\000\000\007F\026\000\000\000\000\029(\019h\000\000&f\000\000\000\000\000\000\028\150\028\000\000\000\000\023`z\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\026:\025\148\029\138\n\014\023\026\000\000\000\000\000\000\000\000\000\000\000\000\030\000\000\000\000\000\000#\000\000\000\000\000\023\029(\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029,\000\000\000\000\000\000\000\000\000\000\000\000\028\028\028\000\000\000\000\000\000\000\000\000\000\128\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\028\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\028\028\000\000\000\000\000\000\000\000\000\000\028\000\000\000\000\000\000\029l\000\000\000\000\000\000\000\000\000\000 \000\000`)!\014\000\000+L!\028\000\000!^\000\000!v\000\000\017!\000\000\"\028\000\000\000\000\">\000\000\000\000\"h\000\000\"\000\000\"\000\000\000\000\"\000\000#b\000\000\000\000#\000\000\000\000$&\000\000$0\000\000$d\000\000,$\130\000\000$\000\000)$\000\000+L$\000\000$\000\000%:\000\000\020\144%D\000\000%L\000\000\000\000%Z\000\000\000\000%d\000\000%\000\000%\000\000\000\000&F\000\000&\000\000\000\000&\000\000\000\000'.\000\000'`\000\000'b\000\000\t\014\018\000\000\000\000\000\000\011n\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\007\000\tj\000\000\000\000\t\026\029P\000\000\000\000\000\000$\130\000\000\000\000\018.\000\000\011\029R\000\000\000\000\000\000\019\000\000\000\000\000\000\028f\007\134\000\000\000\000\000\000\n\014\000\000\0234\000\000\000\000\000\000\000\000\000\000a\136\000\000a\000\000\000\000\000\000\000\000\014\b\000\000\014\000\000\000\000\017\016\000\000h\138\000\000\000\000\000\000\000\000\n\014\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\012\152\000\000\000\000\000\000\000\000\000\000\029\014\028\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\020\028\028\000\000\000&\029d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\018\001\000\000\029v'*\000\000\000\000\000\000\000\000\000\000\134\"\000\r\152\000\000\000\000\000\000\000\000\000\000\th\000\000\000\000\000\000r\000\000\000\000\000\000'<\000\000\000\000\000\0002N\000\000\000\000\000\000\002\012\015\1344\001\029n\012\\\000\000\028\144\b\017l\r\150\000\000\000\000\020\019\158\000\000\000\000\020(\021\b\020\158\000\000\021j\022H\000\000\000\000\000\000\000\000]\152\000\000\000\000\000\000\029:\029\004\028\000\000^\000\000\029H\029\014\028\000\000\028\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\028\024\000\000\021\022\000\000\000\000a\000\000b\026\000\000\000\000\000\000bT\000\000\026\134\001\029\n\014\016\n\135\020\001b\000\000\012\029\028\028F\000\000\000\000\137\000\000b\028c\000\000\1356\001\030z\000\000\127.\000\000\023l\000\000\023H\000\000d\000\000\000[\000\000d\022\000\000\000\000\020&\000\000\029H#\000\000\029J\020\006\028\031\018\000\000\000\000\027\000\000\000\000\000\000\023R\000\000\020D\021\"\000\000\000\000\023b\000\000\000\000\020z\000\000dp\000\000\135t\001\000\000d\000\000d\000\000e\026\000\000e\134\000\000e\000\000f0\000\000f\138\000\000f\000\000f\000\000gH\000\000g\000\000g\000\000hL\000\000h^\000\000h\000\000h\000\000iP\000\000ib\000\000ij:\000\000\000\000j\000\000j\000\000k6\000\000k\140\000\000\000\000\000\000\000\000\000\000k\158\000\000\000\000\000\000\000\000\000\000\000\000\001k\000\000\000\000l \000\000\024.l\136\000\000\000\000m\n\000\000m`\000\000\000\000m\000\000\000\000m\000\000\000\000\018b\000\000\000\000\021f\t\016\000\000\021\000\000\000\000\000\000\022f\000\000\000\000\n\128\000\000\000\000'\029\r\000\000\028\nf\000\000\000\000\029\029\024\024\000\000\026\031v\n\014\030\158\000\000\127\000\000\024\000\000\024\021@\000\000\000\000\000\000\022\000\000\000\000\023&\019\154\000\000\000\000m\000\000\000\000\020\130\026\000\000'\027\002\000\000\000\000\000\000\002b\000\000\000\000\000\000\0038\000\000\000\000\004\"\000\000\000\000\000\000\000\000"), (16, "\001\001\bd\001;\rL\b\142\rQ\001\128\bd\b\144\t:\001/\t?\004\002C\b\144\004T\012r\000\134\000\138\003s\004\004\000z\rS\011\000\011\r\147\004\000\146\000\134\000\138\001\bk\007m\001\003t\006+\001;\001G\000\143\000\138\000\144\004\001\130\r8\001/\001\001\007c\004\011\r}\006\000\138\r\128\r\131\000\001\145\000\138\004\001;\000\r1\000\002F\002I\003s\005\001/\bg\bk\011\002O\011\004\000\b\143\007n\b\140\001\006,\004\001\003t\001@\007>\b\147\011\003$\011\004>\000z\b\147\r\134\004@\r\137\0015\001\011\011\011\005\011\011\b\148\000\016\004\004\128\006Y\004|\b\148\bl\bm\006a\b\t\t\001V\012\153\012\127\001<\012\011\000\004\001\145\000\138\001\149\004\007a\006\004_\001\134\007>\001\140\011\t\011\007d\b\bd\011\n\023\001@\b\140\b\004\b\144\011\bl\bm\004\007i\t\t\001\027\001\141\003%\006\005 \004\006\005\001\145\000\138\004F\007e\006\001\027\n\025\011\011\001W\t\"\0016\006\t\007a\004\001\001\005 \t\006\rg\006\004\007p\005n\011\007d\001\027\001\137\bl\bm\001\149\rf\b\132\000\028\003s\007i\005o\006\b\135\006\012\011\011\001\145\000\138\004\129\001Y\011@\001\005 \001\027\001\003t\004A\007e\011\000\020\t\"\003'\000\t\000\b\147\005q\005u\000\t\011\011\001\149\004\b\132\005n\011\007d\007p\001&\b\135\003p\003\b\148\004B\000\016\005t\001\027\005o\000}\003\004D\011\012\002\003(\b\136\0045\003)\003q\004a\004\138\000\001\027\005x\001W\007e\007\011\002C\011\003'\000\006\012\0141\005q\005u\001\149\001\t\b\011B\011\006\135\000\138\014b\b\135\001\n\007p\014c\014d\000\b\014f\014h\014i\b\136\005t\ba\014k\014l\000\134\000\138\003&\012\002\003v\003(\003\028\002C\003)\014m\005\b\152\000\140\005x\000\031\003'\000\014\0141\001'\004\000|\002N\002I\re\001Z\007,\001/\014b\001\027\002O\003\bb\014\0046\014f\014h\014\0047\003\000z\014k\014l\006\154\007-\000\134\000\138\004\159\003(\000\0013\003)\014m\011\003\t\"\0019\000\146\0072\002\145\002I\006\138\0074\014\129\r\140\014\145\007\149\002O\004\001\r\005n\011\b\001>\014\146\001j\005t\001\016\005\n\0076\005\006\001\018\001\019\005o\003\000\028\003\011\000\006\139\b\153\b\154\006\144\004>\b\155\t\004\159\004@\006\145\001a\003\000\138\001@\003\029\002+\000\138\014\129\000\128\014\145\005q\005u\004\000\146\005/\006\146\007\001\014\146\001Z\007c\006\rb\003'\000\014\0141\0050\r\144\r\145\005t\t\000\001j\006\005\014b\011\001m\006\004\159\014\003\014f\014h\014\014\005x\007s\014k\014l\000\012\127\0056\0059\001W\003(\002X\001\134\003)\014m\004\004>\005/\014\014\004@\001\b\b\006\012\002\029\003\003&\001\027\002/\0050\b\006\001\023\005:\005\011\003&\b\002]\002Y\014\002\001\017\014\005<\007s\001\001\027\002[\001o\001\n\004;\006\001 \001u\000+\0056\0059\004\014\005/\014\014\002 \007d\b\b\004\014\129\0036\014\145\004\002#\0050\000\004C\003&\002+\000\138\014\146\001n\001\024\014\001\027\001\027\002\001\027\005\020\001\029\001\027\b\004T\007e\014\003'\000\014\0141\001\134\0056\0059\004\159\014\004B\004>\000z\001\027\014b\004@\000\004D\001j\014\007g\014f\014h\014\011M\006\003&\014k\014l\006D\006E\000\002X\001\027\003(\006\002\157\003)\014m\001\r\006Y\002_\000\151\014\001n\006]\b\002C\001\027\tl\004I\001\018\001\019\b\128\002/\003,\000\014\002C\007s\002Y\t\002Z\000\155\002\158\n\016\002\007*\001Z\002[\001\020\000\138\004\002\005/\014\014\b\152\004B\005\001r\001\027\003N\b\001\027\004D\tm\0050\003-\002\r\\\004\014\129\011N\014\145\005\n\014\005\006\002\003O\006\t\002\014\146\011\031\007\006\012\t\001\001\004d\b\017\t\0056\0059\004X\014\004\t\006\002b\bB\002\b\002\002\004\159\b\001\027\bC\bE\bF\r\152\001\027\003&\bI\bJ\004\002^\004Y\011 \001\027\001\t\001;\001\bK\002c\002^\001\023\004F\014\001/\001\027\006\006\012\002_\b\153\b\154\002\002\t\t\r2\002_\006D\006E\004B\006\001n\001\027\002+\000\138\001\027\004D\014\000\016\007s\006D\006E\004\004Q\006F\006\002_\002\001\001\006\b\017\004\000\159\005/\014\014\b\007\001\024\005\011\bB\b_\b\129\b\007+\001\029\0050\bC\bE\bF\tD\001\134\b\bI\bJ\014\004\132\003R\000\002\001\001\001\001\bK\007\003=\000\001@\004\139\000\138\003\0056\0059\003v\014\002b\001\020\000\138\005t\002\003s\002/\000\b\004\007\t\011\r6\b\t\134\003&\001\027\001\003\007,\001\003t\001\027\t\001\027\002c\002^\b\152\t\002\002\001;\014\0062\t\0047\011\007-\001\027\001/\0057\b_\004\137\b\0029\006\t!\004d\t\"\n\000\n\001\0072\b\002\004f\0074\002\001\001\0077\b\017\004\001\027\005n\t+\t4\b\r\154\004[\003&\bB\012\007\134\011\003v\011\005o\bC\bE\bF\tD\t\002 \bI\bJ\0045\011\002\004<\002\018\001\004d\000\028\001\bK\001\143\002+\000\138\004\004g\000\134\000\138\005q\005u\000\t5\b\153\b\154\003v\0058\b\155\b\000\146\011+\001@\004\132\000\001\141\tm\012\002+\000\138\005t\t!\003\t\"\004\128\006p\004|\006\006\153\t\001\n\001\027\001\001\007]\b\017\004\t\031\005n\t+\t4\004\n0\006\154\0047\bB\b_\005r\b\000\134\000\138\005o\bC\bE\bF\tD\b\b\bI\bJ\001\130\b\004\139\000\138\002/\001\003'\000\001\bK\004\006\005n\001\028\001\145\000\138\004\136\005q\005u\003v\t5\006D\006E\001\027\000\005o\003p\001\027\002/\011\b\004:\002X\012\029\012\144\000\028\b\005t\b\003(\001\000\138\003)\003q\006\0005\004\139\000\138\004\001\134\n\005q\005u\000\028\t\031\004\005s\b\0122\006Y\002Y\003\002d\b_\006]\b\004\129\000\t!\002[\t\"\005t\003\006\b\007\006q\b\011\001\001\003U\b\017\004\001\149\005n\t+\t4\005x\b\007\003&\bB\007_\002e\012!\003v\012'\005o\bC\bE\bF\tD\t\t\156\bI\bJ\001\027\0123\t\006\000\138\001\002C\007\001\bK\006\n\136\007\001\027\n\145\n\b\005q\005u\004\t5\004\000z\004\159\006\156\007\004\004\006\b\002&\006\001\027\b\b\n4\004?\b\005t\t!\007\t\"\004\002)\007\006\004\000\016\007\002_\001\001\002'\b\017\004\t\031\005n\t+\t4\002\002I\007\000\bB\b_\002'\b\002O\007\023\005o\bC\bE\bF\tD\007\b\bI\bJ\011&\007\006^\005 \006\001\003'\000\001\bK\004\004{\005/\004|\r$\004d\005t\005q\005u\003v\t5\t\b\000\016\007\0050\003p\001\027\004\0124\000\000\006\b\tG\006\000\005t\005\003(\003\006\003)\003q\006\007\004\001\027\003\006\002b\0056\0059\b\t\031\006D\006E\006\006q\006\001\027\002C\b\b_\rq\b\012H\b\t!\011)\t\"\003&\b\007\t\b\nJ\002f\002^\0127\001\001\005 \b\017\004\000\005n\t+\t4\005<\004\127\004d\004|\bB\nK\006D\006E\003v\b\005o\bC\bE\bF\tD\002m\003V\bI\bJ\007\n\nc\r5\001\027\b\001\002\002I\001\bK\003\001\027\004>\007\002O\004\004@\005q\005u\003U\t5\t\029\006\012\004\159\r/\004\139\000\138\nd\r\156\ng\nh\001\r\r\tE\t\131\006\005t\t!\000\016\t\"\r\014\b\003\006\r\016\014\138\012I\007\001\001\001;\b\017\004\t\031\005n\t+\t4\r\022\001/\001\027\001\027\bB\b_\004\132\b\007\026\004\155\005o\bC\bE\bF\r\151\003\b\bI\bJ\bb\0073\ni\006\n\128\001\001\001\001\bK\004\r!\005/\n\129\r$\t\001\t\005q\005u\003v\t5\000\134\000\138\004\139\000\138\0050\t\006\012}\t\000\000\001\027\b\004\014\142\012f\005t\b\001\b\007,\001\rx\006\t\\\004\000\004\012g\004\135\0056\0059\004\t\031\011\011\001@\005\014\007-\000\001\027\004`\b_\rp\b\012H\005t\t!\tT\t\"\003&\r\0072\b\012h\012i\0074\005:\001\001\007\138\b\017\004\000\005n\t+\t4\005<\006\021\004B\r\017\bB\001\027\0076\003&\003v\004D\005o\bC\bE\bF\n\n\r\158\bI\bJ\000z\nc\r\001\027\004\001\001\027\t_\001\bK\004\007\r\018\006\005\019\001\027\001\027\005q\005u\r\020\t5\001\027\014\143\003v\r(\004\007B\nd\n\ng\nh\b\r\r\001\027\007P\n\005t\t!\000\016\t\"\t\\\003]\004\006\b\007\014\138\012I\n\001\001\006\024\b\017\004\t\031\005n\t+\t4\r\022\b\001\001\027\001\027\bB\b_\004\b\bb\004\005o\bC\bE\bF\t8\000z\b\bI\bJ\003&\005 \ni\n\n\128\001\003'\000\001\bK\004\007`\005n\n\129\000\001\027\007[\005q\005u\003v\t5\006T\003U\t`\001\005o\003p\001x\001\027\b\000\000\b\ta\004\014\144\012f\005t\b\n\003(\007P\007,\003)\003q\006\001\004\004\n\005\030\012g\005\005q\005u\004\t\031\011\011\000\134\000\138\007-\005\005\007N\005\006\b_\rh\b\012H\bb\t!\b\t\"\005t\r\0072\b\012h\012i\0074\001\028\001\001\0078\b\017\004\r\014\005n\t+\t4\r\016\007O\004d\002\157\bB\007f\0076\003&\003v\n\132\005o\bC\bE\bF\bH\n\n\bI\bJ\b\nc\014\152\001\027\t\\\001\004d\001\134\001\bK\001\007\001\027\002\158\004f\002\001\027\001\027\005q\005u\t`\t5\002\014\143\004\159\b\011\004\tY\nd\n\ng\nh\006g\006j\002C\003\n\133\n\005t\t!\004\t\"\003\003\004\006\005*\n]\012I\n\001\001\001;\b\017\004\t\031\005n\t+\t4\r\001/\001\027\t\bB\b_\007\b\000\016\t\005o\bC\bE\bF\t7\t\155\b\bI\bJ\001\130\005 \ni\002\157\n\128\001\001\001\001\bK\004\r+\005/\n\129\001\145\000\138\005\005q\005u\003v\t5\006\006j\004\139\000\138\0050\t\r\019\012j\t\002\002\158\001\027\002\159\004\006\012f\005t\n`\001\002\005\001\r_\006\006H\004\139\000\138\001\027\012g\000\028\0056\0059\001\006\t\031\r\018\001\011\001@\001\027\bk\006D\006E\r\020\b_\005\t\b\005\006\003\t!\001#\t\"\003&\011>\006\b\012h\012i\b\005:\001\001\001\027\b\017\004\001\149\005n\t+\t4\005<\t`\006\005\014\bB\b\b\003&\003v\003\005o\bC\bE\bF\r\150\n\007)\bI\bJ\011?\005\014\002\006\135\000\138\001\003'\000\001\bK\r\001\027\tx\006D\006E\004d\001\027\005q\005u\002\t5\001\027\n\132\003v\na\007^\003p\007\002\002\t\015\bl\bm\rd\nm\t\n\005t\t!\003(\t\"\007v\003)\003q\006\001\145\000\138\005\018\n\001\001\t\019\b\017\004\t\031\005n\t+\t4\007\005\001\027\b\bB\b_\005\017\b\006\014\149\005o\bC\t/\nn\r\r\b\bI\bJ\t|\tb\r\003\006\138\001\001\001\001\bK\004\003\005n\006T\006\135\000\138\003&\005q\005u\003v\t5\002\n]\tx\005\005o\003s\tc\t\tf\tg\007{\006\139\011\b\006\144\001\027\005t\001\149\001\b\132\006\147\001\003t\006\011}\b\135\002\002\r\000\005q\005u\004\159\t\031\004\139\000\138\006\146\011\011\001\027\001\027\001\130\b_\001\027\b\001\134\006\t!\002_\t\"\005t\001+\001\n\t0\0017\001\145\000\138\001\027\th\001[\t\127\001=\004\007\005n\t+\t4\t~\001\027\t\128\nb\006\138\002_\t}\011\003v\011\005o\b\136\b\004\001\001\004\006\002\005!\tx\bd\011\tA\004\n\001\134\003\b\144\001\001i\004\001\027\005/\006\139\003s\002_\006\144\005q\005u\007\t5\011\006\003v\b\0050\t\001\0116\t\001\003t\006\135\000\138\001C\001\130\003\005t\006\146\001\149\006T\nn\007\001\027\006\b\003\011\011\001\r\001\145\000\138\0056\0059\004\t\031\005n\001p\t4\t\025\t\001\018\001b\001c\001H\t\t\r\0065\005o\001\027\001\027\003&\011\t\t\"\t}\007\n\na\005:\001\020\000\138\b\004\011\004\026\011\b\147\004\005<\005n\011\0069\001L\bb\005q\005u\011\t5\011\011\004\007v\005o\012\b\148\nO\011\001\001\bd\006\138\be\007\t\005t\011\b\144\002_\003v\001\149\006=\006\001\n\006\004\n]\t\007\003s\005q\005u\b\t\031\001N\b\011\005 \n\029\006\006\139\b\001\006\144\006\001\003t\003,\000\006\005t\006\001\001\r\001\027\007\011\002_\001\023\t}\011\011\001\130\r\014\006\146\r\005x\r\016\011\007z\t\"\003s\bg\r\nR\001\130\001\145\000\138\011\003-\t\028\n\002\004\004\001\005n\011\001\003t\001\145\000\138\011\011\003\n\b\b\147\011\005o\011\tb\003\011\011\011\001\r\001d\001q\011\007v\011\001e\003\001Z\b\148\bb\tT\001\018\001b\006L\003\003'\000\006@\005q\005u\tc\t\tf\tg\003\b\003v\006\002C\001_\001\020\000\138\003\001\027\011\003p\011\bd\005t\bh\001\149\b\140\012\029\b\b\144\011\t%\011\003(\b\001\027\003)\003q\001\149\001\027\005x\006C\003\003'\000\006\nS\b\011\004\003\b\145\012\031\012:\003v\007y\006\th\001\027\t\127\011\007\t\"\003p\001\027\bd\na\b\t\128\r\025\012\029\t%\b\144\b\\\b\004\003(\005n\011\003)\003q\001`\003\011\003\ny\b\b\r]\012!\005o\012'\003\001\023\011\012\031\012 \r\018\t*\001|\001\027\003\012,\011\r\020\t\"\006\000\138\b\147\b|\000\138\b\003\004\007\t\005q\005u\004\003\005n\011\006\012\b\004\159\007\128\b\148\007\t\b\138\006\012\003\012!\005o\012'\b\139\005t\011\t)\007\002X\001d\001\027\011\t%\012,\006O\007\001Z\003\n}\b\147\003\005x\n\000\n\001\003'\000\t\005q\005u\b\006\135\000\138\001\027\001\144\006\004\159\002Y\b\148\002d\b\007\b\007\012-\003&\007s\003p\002[\b\006\005t\007\007\n\003\012\029\006\001\027\011\003\004\003(\005/\0120\003)\003q\003\003\005x\ny\t\003'\000\001\027\002i\0050\b\001&\002|\0124\012\031\012&\t\t(\006\012\006\006\012-\011\007s\003p\006\006\006\001\148\003\001\027\012\029\002C\001\0056\0059\004\003(\005/\0120\003)\003q\006\001\159\001\027\006\138\b\012\t\021\t[\n~\012!\0050\012'\001\134\003&\0124\012\031\012+\r\014\b\127\000\138\0127\r\016\012,\011\011\001\157\n\127\002_\000\016\001\158\005<\003\006\139\003'\000\006\144\0056\0059\003\006\003\r\007\142\003\001\027\004\159\t\012)\001'\003\t\007\143\003\t\012!\003p\012'\001/\003&\006\146\b\t\007\146\012\029\003\001\027\0127\001\012,\003(\014\131\tT\003)\003q\003\bq\005<\001\003\003'\000\001B\003\002C\011\t\r\003\0019\012\031\012/\004\159\001\001\027\001\027\003\003\012-\bk\007s\003p\tT\b\011\b\011\003\001E\011\012\029\002C\001\002b\007,\004\003(\005/\0120\003)\003q\001\001\027\000\016\004\002X\001\n~\b\012!\0050\012'\007-\006,\0124\012\031\0126\001@\001\027\002f\002^\t\012,\012-\003\007s\0072\t\003\b\0074\r)\003\002Y\0075\002d\0056\0059\004\003\005/\0120\002[\001\134\004\159\t\002m\0076\003'\000\ny\t\012!\0050\012'\014\020\003&\0124\003\r\018\bl\bm\001\027\0127\t\012,\r\020\002i\003\003\003\003\002|\003\005<\001\145\000\138\001\001\003\0056\0059\003(\007,\011\149\003)\rc\003\004\159\001\027\003\014\138\r\r\012-\006T\007s\003s\r\014\003\003&\007-\r\016\003\b\159\003'\000\0127\0141\004\001\005/\0120\001\003t\0072\n\005<\014b\0074\003\t\020\003\0077\0050\014f\014\014\026\0124\002_\003\014k\014l\b\b\003\0076\012-\003(\007s\002\139\003)\014m\b\b\001\149\001\b\132\001\001\0056\0059\004\b\135\005/\0120\tP\014\t\150\001\027\006\000\138\r\r\015\tp\003\tq\0050\003s\002y\003&\0124\002*\004\159\b\b\014'\0127\002.\001\001\001\014\020\012c\001\003t\nO\005<\bd\003\b\001\001\0056\0059\b\144\014\129\n?\014\145\003s\006,\003v\006,\014'\t^\001\027\b\136\014\002b\003\n~\003s\001\003&\012\001\003t\003\005z\003\0127\r\001\001\001\r0\r\001\003t\004\159\005<\nO\003\t\154\002f\002^\002M\004\006\005/\002\n@\003s\t\001\t\002\001\027\014*\001\027\n\003\001\134\014\143\0050\r\018\nT\001\001\027\003\001\003t\r\020\002m\003\t\001\t\138\004\006\005n\tp\006\tt\002\003v\014,\b\147\nI\003'\000\0056\0059\005o\005\005\002\005}\r\001\130\000\000\005z\014!\006\b\148\004\002U\005/\003p\014\003&\n\001\145\000\138\014'\003v\t\014$\005q\005u\0050\003(\t\nU\003)\003q\002y\003v\001\027\002W\nU\004\000\005z\012\nE\012H\n\nU\005t\b\011\011\001\027\t\018\005z\005v\0056\0059\004\014\005n\014+\001\027\014\134\tp\005x\tw\r\003v\nS\002{\003\011j\005o\005\rm\003&\005}\nE\001\027\bd\004\003\t\007\001\027\tp\005z\t{\b\144\014+\004\001\027\005n\001\149\014\014\011\011\001\027\011\005q\005u\004\b\152\005n\005o\005\012\n\001\027\005}\nE\001\130\003\r\003\nS\002\131\005o\005\rY\005t\005}\003\004\159\014\137\001\145\000\138\005v\003'\000\t\005q\005u\004\012I\005n\002\005x\000\016\b\003'\000\002\143\005q\005u\011\011\011-\005o\005\011C\005t\005}\tp\014&\t\003o\r\005v\011\003p\003(\r\005t\003)\ra\nU\b\147\005x\nE\005v\003'\000\003(\005q\005u\003)\003q\n\158\001\027\005x\011\001\b\153\b\154\003U\b\148\t\004\014+\005/\000\003p\014\141\014\020\005t\001\149\002+\000\138\004\b\012f\005v\0050\011\004\003(\002\t\003)\003q\n\145\n\146\005x\001\n\012g\003'\000\n\007,\n*\n\b\r\n@\002\154\004\006\001\001\011\0056\0059\003o\002\156\n\012P\003p\007-\002\002C\014\012h\012i\011\002\001\001\003s\r<\003(\003&\0072\003)\003q\004\159\0074\003\005:\003\002\007J\001\003&\014\t\001\003t\003s\004\159\005<\002/\b\b\003\0076\001\130\014\026\011\b\000\028\001\003\000\001\003t\nL\nZ\003\001\130\001\145\000\138\003\007\014\n\\\n\003\000\002\001\r\004\159\n_\n\001\145\000\138\001\001\001\028\nq\n@\nr\001\018\001b\001f\003#\011\001\027\rW\b\002\nN\004\002y\005/\n\003s\011*\004\011\t\001\020\000\138\b\004\004\005/\0050\nq\001\nu\002\001\003t\004\159\nq\nq\nx\n|\0050\n\003A\nQ\t\002\003v\001\130\000\000\011\001\007\001\149\001\134\0056\0059\004\nq\005/\n\b\001\145\000\138\005z\003v\001\149\0056\0059\002\007\014\020\0050\011\004\002C\003&\t\004\b\011w\011\011\003g\005z\012\139\007\012H\003n\003&\007\014\011\002\004\n\007\n\005:\001\134\011\012]\0056\0059\004\001\023\005/\n\005<\007\004\003\n\006\135\000\138\004\n\005n\n\0050\n\011\003&\t\001\134\003\003v\003\004\005:\005o\005\n\004\005}\005n\001\149\014#\011a\005<\011\011\000\005z\014)\0056\0059\003\005o\005\n\031\014\005}\001d\003\011\005q\005u\001e\012G\001Z\000\004\005 \t\003&\003\001\001\004\n\145\r\005:\003\005q\005u\005t\012I\011\001\001\000\028\005<\005v\014~\n\145\014\157\003s\001\001\004\006\138\005n\005x\005t\n@\003\001\001\003s\001\005v\003\001\003t\005o\005\t\003s\005}\002X\005x\001\004/\004=\001\003t\003s\0044\006\139\0049\001\006\144\004R\001\003t\004\\\004c\007\142\004e\001\005q\005u\001\003t\004j\007\148\004z\002Y\004~\002d\004\004\131\012f\006\146\001\n\007\146\002[\004\000\028\004\134\005t\001[\001\001\004\143\012g\004\144\005v\002y\007\004\147\004\151\t\t\004\004\004\005x\004\004\002\002i\003s\001\001\002|\004\007\004\004\004\012h\012i\005\004\005\b\001\012\001i\001\003t\003v\007\005\r\003s\005\016\007\005\023\005&\005\007\005 \003&\003v\005\005\005\001\005z\003\001\003t\003v\007\005\003\005\003\005\006\018\005z\003v\006\022\003\014\006\023\006 \001\r\007\005z\006%\006*\006b\002_\006\\\001p\006[\006m\005z\001\018\001b\001c\006o\006v\002\127\006z\007\006\129\006\143\006\006\158\006\006\b\002\002\133\004\006\005n\001\020\000\138\007\006\b\000\006\007\006\006\004\007\005n\005o\005\011l\007\001\005}\007\006\004\003v\005n\007\r\007'\007\005o\005\012R\004\005}\005n\007;\007D\007I\005o\005\012\148\005z\005}\005q\005u\003v\007K\005o\005\012\136\003\005}\003\007X\007h\005q\005u\007o\003\002b\003\007~\005z\005t\005q\005u\004\r\007\130\007\007\005v\007\004\015\005q\005u\005t\006\135\000\138\000\028\007\005x\007\005v\001\023\005t\002f\002^\007\004\007\005n\005v\005x\005t\007\007\003\007\br\bt\005v\005x\003\005o\005\012m\bv\005}\b}\004\005x\005n\002m\b\131\b\149\b\000\028\b\b\b\b\b\b\007\005o\005\011\138\b\005}\005q\005u\001d\001q\003\003\000\016\001e\007>\001Z\b\b\003\003\b\t\000\007?\007\t\004\t\t\005t\005q\005u\007@\t-\006\138\t2\005v\007\tL\tR\004\018\007>\004\021\tV\tk\007\005x\007s\t\130\007?\005t\007>\003\t\133\000\016\007\007@\005v\t\137\007?\003\007a\006\139\007|\007\006\144\007@\005x\t\140\007\003\007\142\003\007\004\007\011g\007\000\016\007\153\t\146\004\t\152\t\159\007i\007a\t\006\146\000\016\007\146\007\t\007\007\007,\007a\t\000\028\t\001\001\t\t\007q\n+\007s\n9\007\007i\n>\nB\007\007-\007\007\007\nG\nW\007i\003s\nl\007|\007d\004\023\004\025\n\131\0072\007q\007\007s\0074\n\135\001\007,\007\001\003t\007q\n\138\007s\n\139\004\n\142\011\007\007|\007d\0076\004\n\148\007e\007-\007\003\003\007|\007d\007,\n\154\007\004\n\004\028\n\n\0072\011\019\007,\011\028\0074\011#\007p\007\135\007\133\007e\007-\007\011'\004\001&\011(\000\028\0112\011;\007e\007-\007\134\011A\007\0072\011L\011x\003\0074\007\007p\007\132\007\133\011\155\0072\011\001\001\0074\011\007p\007\157\007\133\007\011\007\134\007\007\005 \003\011\014\031\011\011\011\007\134\003s\003\003v\011\003'\000\004\011\007\007\003\007s\011\001\001\001\001\003t\003\005z\006\135\000\138\012;\012\026\004\012#\012$\007|\007\0129\0128\012<\012>\012^\003s\012s\001'\003(\012z\007\003)\r`\012{\012\141\001/\012\142\012\001\012\012\001\003t\012\r\"\r,\r4\007\007\rj\005 \rk\ru\rv\r{\001\001\004\001\005n\003'\000\007\r\143\0019\r\007\r\007\007\007\r\005o\005\t\003s\005}\r\r\003\003p\001\r\007\r\r\r\003\001\006\138\r\001\003t\003(\004\030\003v\003)\003q\005q\005u\004\003\012M\014\000\014\005\014\"\014\025\004\011\003\003\001@\004!\005z\014 \014\148\014\151\014\155\006\139\005t\004\159\006\144\014\156\014\bk\003\005v\007\142\001\001\003v\000\000\000\000\001\001\tX\005x\004\001&\r\000\000\000\000\003\006\146\004\007\146\000\000\005z\003s\000\000\000\000\000\000\000\000\003s\000\000\000\000\003,\000\000\000\000\000\004\001\005n\003\001\003t\001\000\000\000\000\001\003t\003\000\000\000\000\000\000\005o\005\n#\000\000\005}\003v\000\000\001\027\000\000\004\004\159\005/\004\000\000\003-\004$\n\002\004\000\000\004\000\000\005n\005z\000\000\0050\000\000\005q\005u\bl\bm\004\000\000\t\t\005o\005\n\004&\005}\000\000\000\000\001'\001\145\000\138\000\000\003\005t\000\000\004\001/\0056\0059\000\000\005v\003\000\000\000\000\000\000\000\000\000\000\005q\005u\003\005x\000\000\005 \004\003\011\001\004\003&\005n\001\000\000\004\000\000\005/\003v\0019\000\000\005t\000\000\003v\003\005o\005\011H\005v\005}\0050\011\004\003\007\t\005z\001\000\000\005x\004(\005z\007\005 \000\000\000\000\000\000\004\000\000\007\000\000\000\000\005q\005u\001\149\000\000\b\132\0056\0059\003\003'\000\b\135\000\000\000\000\000\000\001@\003\000\000\000\000\003\000\028\005t\003\000\000\000\000\000\000\003&\007\005v\003p\003\000\000\004\005:\005n\012\158\000\000\004\005x\005n\000\000\000\000\003(\005<\000\000\003)\003q\005o\005\011p\007\005}\005o\005\012V\004l\005}\000\000\012\r\000\000\004\000\000\t\004\b\136\014\000\000\000\000\000\000\007\004\007s\000\000\005q\005u\t\003'\000\005q\005u\000\000\000\000\003\000\000\004n\003\001\027\007|\007\000\000\003\000\000\002X\005t\000\000\001\n\003p\000\000\005t\007\005v\n\000\n\001\001\t\000\000\005v\000\000\003'\000\003(\005x\001\n\003)\003q\003\005x\007\007\004q\000\000\002Y\003&\002d\000\000\000\000\011\142\000\000\003p\000\000\002[\000\000\007\004t\004\159\000\000\007\000\000\007\014\028\007\003(\000\000\003\003)\003q\003'\000\000\000\003\004\003\000\000\007\004\002i\002\150\000\000\000\000\002\000\000\001\012\004\003\004\000\000\003p\000\000\004\000\000\000\000\000\000\004\000\000\000\000\003'\000\000\000\001\r\003(\004\000\000\003)\003q\002\000\000\000\000\000\000\004\000\000\001\018\001b\001f\004v\001\r\003p\000\000\001\014\004\000\000\005/\004\159\001\016\005 \000\000\000\000\001\018\001\019\003(\001\020\000\138\003)\003q\0050\011\144\000\000\002_\t\000\000\004\004\004\004\003\000\000\001\020\000\138\004\004\004\004\000\000\004\159\000\000\000\000\000\000\000\000\004\000\000\0056\0059\000\000\003'\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\004\004x\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\003p\000\000\004\004\005:\005/\000\000\000\000\004\159\000\000\003'\000\004\003(\005<\004\003)\003q\0050\011\144\000\000\003\t\004\000\000\001\023\000\000\004\004\000\000\003p\000\000\004\002b\004\004\005/\004\159\000\000\000\000\000\000\001\023\004\003(\0056\0059\003)\003q\000\000\0050\t\000\000\t\t\000\000\004\000\000\000\000\004\002f\002^\001 \001%\004\003&\000\000\000\000\004\005\000\005\002\012\005:\004\001d\005/\0056\0059\000\000\006O\000\000\001Z\005<\000\000\000\000\000\000\012\002m\0050\t\001\024\t\t\012\000\000\001\027\003&\001\029\004\004\004\004\004\005:\005/\004\159\000\000\000\000\000\000\003'\000\004\000\000\005<\0056\0059\004\0050\t\004\n'\t\000\000\004\000\000\000\000\012\000\000\004\003p\000\000\000\000\000\000\000\000\003&\004\159\004\000\000\012\003'\000\005:\003(\0056\0059\003)\003q\000\000\000\000\004\000\000\005<\000\000\000\000\001\t\000\000\004\004\011\146\003p\000\000\002\157\001\n\003&\000\000\000\000\012\000\000\004\004\005:\005/\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\005<\000\000\004\000\000\0050\t\000\000\n\t\002\158\004\002\000\000\000\000\004\012\004\000\000\002\004\004\005/\004\000\000\002\000\000\003'\000\004\000\000\0056\0059\000\000\000\000\0050\t\000\000\011t\t\000\000\000\000\012\000\000\002\002\002\157\003p\002\000\000\006Y\003&\000\000\000\000\004\159\006]\000\000\000\000\005:\012\003(\0056\0059\003)\003q\001\r\000\000\000\000\005<\000\000\000\000\000\000\004\001\016\002\158\000\000\002\001\018\001\019\000\000\012\003&\000\000\002\004\159\000\000\001\n\000\000\005:\004\000\000\000\000\003N\001[\000\000\004\001\020\000\138\005<\000\000\000\000\000\000\000\000\004\000\000\002\000\000\000\000\002\003O\004\000\000\002\012\000\000\000\000\001\001\004\000\000\005/\001\001\000\000\t\022\012\000\000\000\000\001\001i\000\000\012\000\000\0050\011\144\000\000\003s\t\000\000\004\000\000\bC\000\000\004\000\000\000\000\000\000\004\004\001\005/\004\159\001\003t\001\004\000\000\001\bK\0056\0059\004\000\000\0050\t\000\000\012Z\t\001\r\002\000\000\003'\000\000\000\001\023\000\000\001p\014\023\000\000\003&\001\018\001b\001c\000\000\002\000\000\005:\000\000\000\000\0056\0059\003p\006\004\001 \001u\005<\000\000\004\001\020\000\138\004\000\000\000\000\003(\012\004\003)\003q\003&\002\002\t\023\000\000\000\000\004\005:\005/\003'\000\000\000\000\000\001\024\001\004\003R\005<\001\027\000\000\001\029\0050\t\004\012\156\t\004\000\000\002\003p\004\003v\000\000\000\000\000\000\000\000\003v\000\000\004\002\012\002X\003(\003'\000\003)\003q\0056\0059\004\004\000\000\001\001\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\003p\000\000\002\002\003&\001\023\002Y\004\002d\003s\000\000\005:\004\003(\000\000\002[\003)\003q\000\000\000\000\004\005<\001\004\159\000\000\001\003t\004\000\000\002\000\000\012\004\000\000\005n\004\012\004\000\000\005n\002i\t\030\000\000\002\136\002|\000\000\000\000\005o\005|\001\001\005}\005o\001d\001q\000\000\000\000\000\000\001e\004\001Z\004\012\000\000\004\000\000\004\004\004\003s\004\159\000\000\004\005q\005u\004\004\012\005q\005u\004\000\000\001\004\000\000\001\003t\004\004\005/\000\000\001\028\004\005t\000\000\000\000\012\012\005t\000\000\005v\002_\0050\t\004\159\000\000\t\004\000\000\000\000\005x\000\000\002\139\003v\000\000\t\031\000\000\000\000\000\000\000\000\000\000\000\000\012\003'\000\000\000\004\004\0056\0059\004\000\000\000\000\004\004\000\000\005/\012\004\000\000\000\000\004\000\000\003p\000\000\000\000\000\000\000\000\003&\0050\t\006\004\t\000\000\005:\003(\000\000\000\000\003)\003q\003'\000\000\000\000\000\005<\000\000\004\004\012\005/\006\000\138\003v\012\0056\0059\004\012\005n\002b\003p\000\000\0050\011\012\000\000\t\000\000\000\000\012\000\000\005o\004\003(\003&\005w\003)\003q\004\000\000\004\005:\000\000\004\000\000\002f\002^\004\0056\0059\000\000\005<\000\000\000\000\004\000\000\000\000\005q\005u\004\003'\000\000\000\000\000\001\028\000\000\000\000\000\000\003&\003'\000\000\000\002m\000\000\000\000\005:\004\005t\005n\012\003p\000\000\012\002\157\011\005<\004\159\000\000\006\003p\000\000\005o\004\003(\005x\005w\003)\003q\000\000\000\000\004\000\000\003(\001\001\003)\003q\004\000\000\004\000\000\002\158\004\002\000\000\004\006\005q\005u\006\002\000\000\000\000\003s\004\159\006\000\000\000\000\000\000\003T\000\000\003'\000\nY\014\000\000\001\005t\r\001\003t\006\r\000\006\012\002\002\003O\000\000\004\002\004\014f\005/\000\000\005x\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\0050\000\000\003)\014m\005;\000\000\000\000\004\004\004\001\001\001\000\000\000\000\000\000\004\004\001\004\159\000\000\000\000\000\000\004\000\000\005/\0056\0059\004\159\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\r\002\0050\rz\000\000\002\t\000\000\001\000\000\003&\001\003t\000\000\000\000\000\000\r\005\0127\000\000\000\000\000\000\014\000\000\000\000\000\000\000\000\003v\005<\0056\0059\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\004\004\003&\005/\000\000\000\000\000\000\001\n\004\159\005:\004\r\b\005/\000\000\000\000\003R\0050\r\142\001\005<\t\000\000\000\000\000\000\000\000\0050\012\000\000\000\000\r\001\001\000\000\000\000\000\000\000\000\r\n\r\012\002\000\000\000\000\004\0056\0059\004\000\000\005n\000\000\000\000\001\000\138\0056\0059\003v\000\000\000\000\000\000\001\001\005o\000\000\000\000\003&\rE\002\002\004\004\000\000\005:\000\000\003&\004\000\000\005/\000\000\014\003s\005:\005<\000\000\000\000\000\000\000\000\000\000\005q\005u\0050\005<\001\r\001\002\000\000\001\003t\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\005t\000\000\000\000\000\000\001\n\000\000\000\000\005v\0056\0059\000\000\001[\004\000\000\005n\001\020\000\138\005x\000\000\000\000\000\000\000\000\001\003,\000\000\000\000\000\005o\003&\000\000\000\000\012\146\001P\000\000\000\000\000\000\000\000\000\000\r\024\000\000\000\000\001\t\001\r\026\000\000\014\001g\001i\000\000\001\n\000\000\000\000\000\000\005q\005u\000\000\003-\000\000\n\002\004\000\000\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\001\001\n\r\022\005t\000\000\001\027\003v\001\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\001\r\000\000\000\000\000\000\005x\000\000\000\000\001\023\001p\000\000\000\000\000\000\001\018\001b\001c\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\n\000\000\000\000\000\000\001 \001S\001\n\000\000\001\020\000\138\000\000\001*\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\r\001[\000\000\000\000\000\000\000\000\000\000\000\000\001\016\004\001\024\005n\001\018\001\019\000\000\001\027\004\001\029\001U\002\157\001\n\000\000\001\r\000\000\005o\001\014\000\000\001.\012p\000\000\001\016\001\020\000\138\0012\001\018\001\019\001\154\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\001\150\002\005q\005u\000\000\001\020\000\138\012\151\002\000\000\000\000\000\000\001\r\000\000\000\000\001\014\001\023\000\000\001\r\000\000\001\016\001\014\005t\000\000\001\018\001\019\001\016\000\000\001\r\005v\001\018\001\019\004\002\t\000\000\001p\002\000\000\005x\001\018\001b\001c\001\020\000\138\000\000\000\000\t\000\000\001\020\000\138\000\000\000\000\000\000\001\r\001\001\000\000\000\000\001\020\000\138\001\023\000\000\000\000\001d\001q\001\018\001b\011\007\001e\001\n\001Z\000\000\n\000\n\001\003s\000\000\001[\000\000\000\000\000\000\001 \001S\001\023\000\000\001\020\000\138\000\000\001\000\000\000\000\001\003t\003&\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \001%\002\000\000\000\000\000\000\001\024\000\000\000\000\001\001i\001\027\002\001\029\001U\000\000\000\000\000\000\001\023\000\000\000\000\000\000\003'\000\001\023\000\000\bk\000\000\001\024\000\000\000\000\000\000\000\000\001\027\001\023\001\029\000\000\000\000\001 \001%\000\000\000\000\003p\000\000\001 \001%\000\000\000\000\000\000\001\r\000\000\000\000\000\000\000\000\000\000\003(\000\000\001p\003)\003q\001\023\001\018\001b\001c\000\000\000\000\001\024\000\000\000\000\bk\002\001\027\001\024\001\029\003'\000\003v\001\027\000\000\001\029\001\020\000\138\001d\001q\000\000\000\000\000\000\001e\000\000\001Z\000\000\000\000\001\001\003p\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bl\bm\003(\001d\bn\003)\003q\003s\006O\000\000\001Z\000\000\003'\000\001\145\000\138\000\000\000\000\002\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\004\159\002X\bl\bm\003(\000\000\b\134\003)\003q\005o\000\000\000\000\001\023\011\148\000\000\000\000\001\145\000\138\000\000\001\000\000\003'\000\000\000\000\000\000\000\000\000\001\000\000\002Y\000\000\002d\000\000\000\000\000\000\005q\005u\000\000\002[\000\000\000\000\003p\000\000\001\149\000\000\b\132\000\000\000\000\000\000\000\000\000\000\b\135\004\159\000\000\003(\005t\000\000\003)\003q\000\000\001d\001q\005v\002l\004\001e\005/\001Z\000\000\000\000\003v\000\000\005x\000\000\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\011\141\000\000\000\000\001\149\000\000\b\132\000\000\003'\000\000\000\000\000\b\135\004\159\000\000\000\000\000\000\000\000\002\157\000\000\000\000\000\000\b\136\0056\0059\000\000\000\000\001\003p\000\000\000\000\000\000\000\000\000\000\004\000\000\005/\003'\000\001\001\003(\002_\003&\003)\003q\002\158\000\000\002\0050\005:\000\000\004\0118\005n\002\000\000\003p\001\000\138\005<\000\000\000\000\004\159\003N\b\136\000\000\005o\003'\000\003(\n\004\000\000\003)\003q\0056\0059\004\000\000\005/\002\003O\000\000\000\000\002\000\000\000\000\000\000\003p\000\000\000\000\000\000\0050\005q\005u\003&\0111\000\000\000\000\000\000\000\000\003(\005:\000\000\003)\003q\000\000\000\000\000\000\002\000\000\000\000\005<\005t\000\000\000\000\000\000\000\000\0056\0059\005v\002b\000\000\000\000\000\000\000\000\000\000\004\000\000\005/\005x\000\000\004\159\000\000\000\000\000\000\001\000\000\003&\001\001\002\0050\000\000\000\000\005:\011\023\002f\002^\bk\000\000\000\000\000\000\001\001\005<\000\000\002X\000\000\003s\000\000\004\159\000\000\000\000\003P\000\000\000\000\000\000\0056\0059\000\000\000\000\001\003s\002m\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002Y\001\002d\003&\001\003t\001\004\159\000\000\002[\005:\004\003R\005/\000\000\000\000\000\000\000\000\000\000\000\000\005<\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\011\018\000\000\000\000\000\000\002i\002\000\000\002\002|\000\000\004\000\000\005/\bl\bm\000\000\000\000\b\137\000\000\000\000\000\000\000\000\0056\0059\000\000\0050\000\000\001\145\000\138\011\r\000\000\002\002\001\001\000\000\000\000\000\000\000\000\000\000\000\000\004\003&\005/\000\000\000\000\000\000\000\000\003v\005:\000\000\0056\0059\003s\003'\000\0050\000\000\002\005<\011\012\000\000\003v\000\000\000\000\002_\001\000\000\000\000\001\003t\003&\000\000\000\000\003p\000\000\002\139\000\000\005:\000\000\000\000\000\000\0056\0059\001\001\000\000\003(\005<\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\001\149\000\000\b\132\000\000\000\000\003&\000\000\003s\b\135\b\152\000\000\001\t\005:\002X\000\000\004\000\000\005n\000\000\001\n\001\000\000\005<\001\003t\000\000\000\000\000\000\000\000\004\005o\005n\001\001\011\n\000\000\000\000\000\000\000\000\000\000\000\000\002Y\000\000\002d\005o\000\000\000\000\002b\011\005\000\000\002[\000\000\003s\000\000\000\000\000\000\005q\005u\000\000\000\000\003v\b\136\000\000\000\000\000\000\001\000\000\000\000\001\003t\005q\005u\000\000\002f\002^\002n\005t\000\000\000\000\001\001\004\159\000\000\005v\000\000\000\000\001\t\000\000\b\153\b\154\005t\000\000\b\005x\001\n\000\000\000\000\005v\000\000\003s\002m\001\r\002+\000\138\000\000\000\000\000\000\005x\000\000\003\000\000\003v\001\001\018\001\019\001\003t\000\000\000\000\000\000\000\000\000\000\003'\000\004\000\000\005n\003\000\000\000\000\000\000\000\000\001\020\000\138\000\000\000\000\002_\000\000\000\000\005o\000\000\000\000\003p\005p\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\000\000\001\t\003(\003v\000\000\003)\003q\0050\000\000\001\n\000\000\n\005q\005u\000\000\000\000\000\000\000\000\000\000\002/\000\000\b\004\001\r\005n\000\000\000\000\b\000\000\000\000\000\000\001\016\005t\0056\0059\001\018\001\019\005o\000\000\005v\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005x\003v\000\000\000\000\003&\003\000\138\000\000\001\023\000\000\000\000\005:\000\000\002b\005q\005u\000\000\000\146\004\000\000\005n\005<\000\000\000\000\004H\000\000\000\000\000\000\001 \004J\000\000\b\000\000\005o\005t\000\000\000\000\n\000\000\002f\002^\005v\001\r\000\000\004\159\000\000\000\000\000\000\000\000\000\000\003\005x\000\000\000\000\001\018\001\019\001\024\000\000\004F\005q\005u\001\027\000\000\001\029\000\000\004\002m\005n\000\000\000\000\000\000\000\000\002\157\001\020\000\138\000\000\000\000\000\000\000\000\005t\005o\003'\000\001\023\n\000\000\005v\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\005x\000\000\000\000\000\000\002\158\003p\002\001 \001u\000\000\005q\005u\004\002\005/\002\157\003s\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\0050\000\000\001\005t\n3\001\003t\000\000\001\024\000\000\005v\002\000\000\001\027\000\000\001\029\002\158\000\000\002\000\000\005x\000\000\000\000\003'\000\002\0056\0059\001\023\000\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\003p\004)\000\000\003&\000\000\001 \004E\002\003p\000\000\005:\r\r\003(\000\000\000\000\003)\003q\000\000\000\000\005<\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\002\000\000\000\000\000\000\001\024\000\000\004F\003'\000\001\027\004\159\001\029\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\000\003v\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\000\000\003'\000\003p\000\000\000\000\000\000\000\000\000\000\002\003(\000\000\000\000\003)\003q\000\000\003(\000\000\000\000\003)\003q\003p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\004\004\159\005/\000\000\000\000\002\000\000\003p\000\000\004\159\000\000\004\000\000\005n\000\000\0050\000\000\000\000\000\000\n\020\003(\000\000\000\000\003)\003q\000\000\005o\000\000\000\000\000\000\n\n\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\002\000\000\000\000\000\000\000\000\003'\000\000\000\005q\005u\003'\000\000\000\004\159\002\000\000\000\000\003&\000\000\004\159\000\000\004\000\000\005/\005:\003p\002\002\005t\004\003p\005/\000\000\000\000\005<\005v\0050\004\159\003(\000\000\0051\003)\003q\003(\0050\005x\003)\003q\0053\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\000\000\000\000\004\159\000\000\000\000\0056\0059\000\000\000\000\000\000\000\000\000\000\004\000\000\005/\000\000\000\000\003&\004\000\000\005/\000\000\000\000\000\000\005:\003&\000\000\0050\000\000\000\000\000\000\0055\005:\0050\005<\000\000\004\005;\005/\000\000\000\000\000\000\005<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0050\000\000\0056\0059\005=\003'\000\000\000\0056\0059\000\000\003'\000\004\159\000\000\004\000\000\005/\004\159\000\000\000\000\000\000\003&\000\000\000\000\003p\0056\0059\003&\005:\0050\003p\000\000\000\000\005?\005:\002X\000\000\003(\005<\000\000\003)\003q\000\000\003(\005<\003&\003)\003q\000\000\000\000\000\000\000\000\005:\000\000\000\000\0056\0059\000\000\000\000\000\000\000\000\000\000\005<\002Y\000\000\002d\003'\000\000\000\000\000\000\000\000\000\002[\000\000\000\000\003&\004\000\000\005/\000\000\000\000\004\005:\005/\000\000\000\000\003p\000\000\000\000\000\000\000\000\0050\005<\000\000\000\000\005A\0050\002i\002\003(\005C\002\003)\003q\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\001[\0056\0059\000\000\003'\000\0056\0059\000\000\000\000\002y\000\000\004\159\000\000\000\000\003'\000\000\000\004\159\000\000\000\000\003&\000\000\000\000\003p\000\000\003&\000\000\005:\000\000\000\000\000\000\000\000\005:\000\000\003p\001\\\003(\005<\000\000\003)\003q\002_\005<\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\000\004\159\001\r\004\000\000\005/\000\000\000\000\000\000\004\001]\005/\000\000\003p\001\018\001b\001c\000\000\0050\000\000\000\000\000\000\005E\000\000\0050\000\000\003(\000\000\005G\003)\003q\000\000\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\000\000\002b\000\000\0056\0059\000\000\003'\000\004\159\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\003&\004\004\159\005/\000\000\000\000\003&\005:\000\000\003p\002f\002^\000\000\005:\003p\000\000\0050\005<\000\000\000\000\005I\000\000\003(\005<\000\000\003)\003q\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\002m\000\000\003'\000\000\000\0056\0059\000\000\000\000\001\023\000\000\000\000\000\000\003'\000\004\159\000\000\004\000\000\005/\000\000\003p\000\000\000\000\003&\000\000\000\000\000\000\004\000\000\005/\005:\0050\003p\003(\000\000\005K\003)\003q\000\000\012v\005<\012H\0050\000\000\000\000\003(\005M\000\000\003)\003q\003'\000\000\000\000\000\000\000\000\000\001d\0056\0059\000\000\000\000\001e\000\000\001Z\000\000\000\000\000\000\000\000\0056\0059\003p\000\000\000\000\000\000\004\159\000\000\000\000\003&\004\004\159\005/\003'\000\003(\005:\000\000\003)\003q\003&\000\000\000\000\000\000\000\000\0050\005<\005:\000\000\005O\000\000\000\000\000\000\003p\000\000\000\000\000\000\005<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\003'\000\003)\003q\0056\0059\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\012I\001\n\000\000\000\000\000\000\000\000\003p\004\159\001[\004\003&\005/\000\000\000\000\004\000\000\005/\005:\000\000\003(\000\000\000\000\003)\003q\0050\000\000\000\000\005<\005Q\0050\000\000\000\000\000\000\005S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001l\004\159\000\000\000\000\003'\000\0056\0059\000\000\000\000\000\000\0056\0059\000\000\000\000\004\000\000\005/\000\000\000\000\004\000\000\012f\000\000\003p\000\000\003&\004\000\000\005/\0050\003&\004\159\005:\005U\012g\000\000\003(\005:\001\r\003)\003q\0050\005<\000\000\000\000\005W\001]\005<\000\000\000\000\001\018\001b\001c\003'\000\0056\0059\000\000\000\000\000\000\012h\012i\000\000\000\000\004\004\159\005/\0056\0059\001\020\000\138\000\000\000\000\003p\000\000\003&\000\000\000\000\000\000\0050\003&\000\000\005:\005Y\000\000\000\000\003(\003&\000\000\003)\003q\000\000\005<\000\000\005:\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\000\000\005<\0056\0059\000\000\000\000\000\000\0050\000\000\000\000\000\000\005[\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\004\159\000\000\004\000\000\005/\005:\000\000\000\000\000\000\0056\0059\003p\003'\000\000\000\005<\000\000\0050\000\000\000\000\001\023\005_\000\000\000\000\003(\002\157\000\000\003)\003q\003&\002\157\000\000\003p\000\000\000\000\000\000\005:\000\000\000\000\000\000\000\000\003'\000\0056\0059\003(\005<\000\000\003)\003q\004\159\000\000\000\000\002\158\000\000\002\000\000\000\000\002\158\000\000\002\003p\002\003&\004\000\000\005/\002\001d\000\000\005:\000\000\000\000\001e\003(\001Z\003N\003)\003q\0050\005<\000\000\000\000\005^\003'\000\000\000\002\002\000\000\000\000\002\002\003O\000\000\000\000\002\000\000\003'\000\000\000\000\000\000\000\000\000\003p\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\159\005/\003(\003p\000\000\003)\003q\000\000\000\000\000\000\003&\000\000\001\001\0050\000\000\003(\005:\005a\003)\003q\004\159\000\000\000\000\000\000\000\000\000\000\005<\000\000\000\000\b\152\000\000\003s\002\000\000\000\000\000\000\000\000\002\000\000\0056\0059\000\000\002\000\000\001\000\000\000\000\001\003t\004\159\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\003&\0119\000\000\000\000\004\000\000\005/\005:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\000\000\005<\000\000\0050\000\000\000\000\000\000\005c\000\000\004\000\000\005/\001\000\000\000\000\001\003t\004\159\003R\000\000\000\000\000\000\001\001\0050\000\000\000\000\000\000\005e\0056\0059\004\159\000\000\b\153\b\154\000\000\002\b\004\000\000\005/\002\003s\000\000\000\000\000\000\000\000\002+\000\138\003&\0056\0059\000\000\0050\000\000\001\005:\005g\001\003t\003v\000\000\002\002\000\000\000\000\005<\002\002\000\000\003&\000\000\001\001\000\000\000\000\000\000\005:\000\000\0056\0059\004\000\000\005/\000\000\000\000\000\000\005<\000\000\002\000\000\000\000\003s\000\000\002\004\0050\005/\000\000\003&\005i\000\000\000\000\003v\000\000\001\005:\000\000\001\003t\0050\bk\000\000\000\000\005k\000\000\005<\002/\000\000\b\000\000\000\000\0056\0059\004\b\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\005o\000\000\000\000\003&\005w\001\001\003v\000\000\000\000\005:\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\005<\000\000\000\000\000\000\005:\003s\005q\005u\004\000\000\005n\000\000\000\000\000\000\005<\000\000\000\000\000\000\001\b\000\000\001\003t\005o\000\000\000\000\005t\005y\003'\000\000\000\bl\bm\005v\000\000\b\000\000\003v\000\000\000\000\000\000\000\000\000\000\005x\000\000\001\145\000\138\000\000\003p\005q\005u\004\000\000\005n\000\000\000\000\000\000\000\000\001\001\000\000\003(\000\000\000\000\003)\003q\005o\000\000\002X\005t\005\127\000\000\000\000\000\000\000\000\000\000\005v\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005x\000\000\001\001\000\000\001\005q\005u\001\003t\002Y\000\000\002d\000\000\000\000\004\000\000\005n\000\000\002[\000\000\000\000\003s\003v\000\000\000\000\005t\001\001\001\149\005o\b\132\000\000\005v\005\129\001\000\000\b\135\001\003t\000\000\000\000\000\000\005x\002i\001\001\003s\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\001\000\000\000\000\001\003t\003s\004\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005t\000\000\001\001\001\001\003t\005v\000\000\000\000\000\000\004\000\000\005n\b\136\000\000\000\000\005x\000\000\000\000\003v\000\000\000\000\003s\001\001\005o\000\000\000\000\002_\005\131\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\003v\000\000\005q\005u\004\000\000\005/\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\005t\005\133\000\000\003v\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\004\000\000\005n\000\000\000\000\005x\000\000\000\000\000\000\003v\000\000\0056\0059\000\000\000\000\005o\000\000\000\000\000\000\005\135\000\000\000\000\000\000\000\000\002b\000\000\001\001\000\000\000\000\004\003&\005n\000\000\000\000\000\000\000\000\000\000\005:\000\000\000\000\005q\005u\003v\000\000\005o\003s\000\000\005<\005\137\002f\002^\000\000\000\000\000\000\004\000\000\005n\001\n\001\000\000\005t\001\003t\003v\000\000\000\000\000\000\005v\000\000\005o\005q\005u\004\005\139\005n\000\000\002m\005x\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\005o\000\000\000\000\005t\005\141\000\000\000\000\000\000\005q\005u\005v\000\000\000\000\000\000\000\000\000\000\003s\000\000\000\000\004\005x\005n\000\000\000\000\000\000\000\000\005q\005u\005t\001\000\000\000\000\001\003t\005o\005v\000\000\000\000\005\143\000\000\004\000\000\005n\000\000\000\000\005x\005t\000\000\000\000\002\157\000\000\000\000\001\r\005v\000\000\005o\001\001\000\000\005\145\005q\005u\003v\005x\001\018\001b\011\015\000\000\000\000\000\000\000\000\000\000\b\152\000\000\000\000\000\000\003s\002\158\000\000\002\005t\005q\005u\001\020\000\138\000\000\002\005v\000\000\001\000\000\000\000\001\003t\001\001\000\000\005x\000\000\001\001\005t\000\000\000\000\000\000\000\000\000\000\000\000\005v\000\000\000\000\002\000\000\000\000\003s\002\000\000\000\000\005x\003s\003v\000\000\000\000\001\001\000\000\004\001\005n\000\000\001\003t\001\000\000\000\000\001\003t\001\001\000\000\000\000\005o\000\000\003s\000\000\005\147\000\000\000\000\000\000\000\000\000\000\b\153\b\154\000\000\000\000\t=\001\003s\000\000\001\003t\001\023\000\000\000\000\000\000\002+\000\138\005q\005u\000\000\001\000\000\002\001\003t\000\000\000\000\000\000\000\000\000\000\003v\000\000\000\000\002\004\000\000\005n\005t\000\000\000\000\000\000\000\000\000\000\002\005v\001\001\000\000\000\000\005o\000\000\000\000\000\000\005\149\005x\000\000\000\000\000\000\000\000\001d\000\000\000\000\000\000\000\000\006O\003s\001Z\000\000\003v\000\000\000\000\000\000\000\000\003v\000\000\005q\005u\000\000\001\000\000\000\000\001\003t\001\001\002/\000\000\b\001\001\000\000\000\000\000\000\b\004\005t\005n\003v\000\000\000\000\000\000\002\005v\003s\000\000\000\000\000\000\000\000\003s\005o\000\000\003v\005x\005\151\000\000\000\000\001\000\000\000\000\001\003t\001\000\000\000\000\001\003t\000\000\002\002\000\000\000\000\000\000\004\000\000\005n\005q\005u\004\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\b\005o\001\001\000\000\005\153\005o\000\000\002\005t\005\155\000\000\002\157\000\000\000\000\004\005v\005n\000\000\000\000\000\000\000\000\003s\003v\000\000\000\000\005x\005q\005u\004\005o\005n\005q\005u\005\157\001\000\000\000\000\001\003t\002\158\000\000\002\000\000\005o\001\001\005t\005\159\002\000\000\000\000\005t\000\000\005v\000\000\005q\005u\000\000\005v\000\000\003v\000\000\000\000\005x\003s\003v\000\000\000\000\005x\005q\005u\000\000\000\000\002\000\000\005t\000\000\001\000\000\001\t\001\003t\005v\000\000\000\000\000\000\004\001\n\005n\005t\000\000\000\000\005x\000\000\000\000\000\000\005v\000\000\000\000\001\001\005o\000\000\000\000\000\000\005\005x\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\003s\001s\000\000\000\000\000\000\004\003v\005n\005q\005u\004\000\000\005n\001\003s\002\001\003t\000\000\000\000\005o\000\000\000\000\000\000\005\005o\000\000\001\005t\005\001\003t\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005x\005q\005u\000\000\003v\001\r\005q\005u\000\000\001\001\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\005t\000\000\000\000\000\000\004\005t\005n\005v\003s\000\000\000\000\000\000\005v\000\000\000\000\001\020\000\138\005x\000\000\005o\000\000\001\005x\005\001\003t\000\000\000\000\002\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\003v\000\000\001\001\000\000\b\152\000\000\005q\005u\004\000\000\005n\000\000\003s\003v\000\000\002\002\000\000\000\000\000\000\000\000\003s\000\000\005o\000\000\001\005t\005\001\003t\000\000\000\000\000\000\005v\001\001\001\001\003t\000\000\000\000\000\000\002\005x\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\b\152\001\023\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005n\000\000\000\000\001\005t\000\000\001\003t\003v\001 \001u\005v\004\005o\005n\000\000\000\000\005\b\153\b\154\000\000\005x\tJ\000\000\000\000\001\001\005o\000\000\000\000\000\000\005\002+\000\138\000\000\000\000\000\000\001\024\000\000\005q\005u\000\000\001\027\000\000\001\029\003s\000\000\002\157\000\000\000\000\000\000\003v\000\000\005q\005u\000\000\000\000\000\000\001\005t\003v\001\003t\001\001\000\000\005v\b\153\b\154\000\000\000\000\to\004\005t\005n\002\158\005x\002\000\000\000\000\005v\002+\000\138\003s\002\000\000\000\000\005o\000\000\000\000\005x\005\001\001\003v\000\000\001\000\000\000\000\001\003t\000\000\002/\000\000\b\000\000\000\000\000\000\000\000\002\b\000\000\003s\005q\005u\004\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\004\001\005n\000\000\001\003t\005o\000\000\000\000\005t\005\001\001\000\000\000\000\005o\005v\000\000\000\000\005\000\000\000\000\000\000\000\000\003v\005x\002/\000\000\b\000\000\003s\005q\005u\004\b\005n\000\000\000\000\b\000\000\005q\005u\000\000\001\000\000\002\001\003t\005o\000\000\000\000\005t\005\000\000\000\012H\000\000\000\000\005v\000\000\005t\000\000\003v\000\000\000\000\000\000\000\000\005v\005x\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\005x\000\000\001\001\000\000\000\000\000\000\003'\000\000\000\b\004\000\000\005n\003v\000\000\000\000\005t\000\000\000\000\000\000\000\000\003s\000\000\005v\000\000\005o\003p\000\000\000\000\005\000\000\000\000\000\000\005x\001\000\000\000\000\001\003t\003(\000\000\000\000\003)\003q\000\000\000\000\002\000\000\004\000\000\005n\005q\005u\000\000\000\000\000\000\003v\000\000\000\000\000\000\000\000\001\001\005o\000\000\012I\000\000\005\000\000\000\000\000\000\005t\002\002\000\000\001\001\004\005v\005n\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\005x\005q\005u\000\000\005o\000\000\001\003s\005\001\003t\002\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\001\005t\000\000\001\003t\001\001\000\000\005v\000\000\005q\005u\004\000\000\005n\000\000\003p\003v\005x\000\000\000\000\004\004\159\012f\000\000\003s\000\000\005o\000\000\003(\005t\005\003)\003q\000\000\000\000\012g\005v\001\003'\000\001\003t\000\000\000\000\000\000\000\000\005x\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\b\152\000\000\003p\000\000\000\000\012h\012i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\005t\000\000\003)\003q\003v\000\000\000\000\005v\004\003&\005n\000\000\000\000\004\000\000\005/\000\000\005x\003v\000\000\000\000\000\000\000\000\005o\003'\000\000\000\005\0050\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\004\159\000\000\005q\005u\000\000\001\001\0056\0059\003v\003(\000\000\000\000\003)\003q\000\000\b\153\b\154\000\000\000\000\t\144\004\005t\005n\000\000\003s\000\000\003&\000\000\005v\002+\000\138\000\000\000\000\005:\004\005o\005n\001\005x\005\001\003t\004\159\005<\000\000\000\000\000\000\001\001\005o\000\000\000\000\000\000\006\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005q\005u\004\000\000\005/\000\000\003s\000\000\000\000\000\000\000\000\004\000\000\005n\005q\005u\000\000\0050\000\000\001\005t\006\017\001\003t\000\000\000\000\005o\005v\000\000\000\000\006\020\000\000\000\000\000\000\005t\000\000\000\000\005x\002/\004\159\b\005v\000\000\0056\0059\004\b\005/\000\000\000\000\000\000\005x\005q\005u\000\000\000\000\000\000\000\000\001\000\000\0050\000\000\000\000\003&\006\029\000\000\001\003v\000\000\000\000\005:\000\000\005t\000\000\000\000\000\000\000\000\000\000\000\000\005v\005<\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\005x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\004\000\000\005/\003&\000\000\001\000\000\003v\000\000\000\000\005:\000\000\006{\001\000\000\0050\000\000\000\000\000\000\006!\005<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005n\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\0056\0059\005o\000\000\001\000\000\006J\006|\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\001\000\000\000\000\003&\006\132\000\000\000\000\000\000\000\000\000\000\005:\005q\005u\004\000\000\005n\001\000\000\001\000\138\005<\000\000\000\000\000\000\001\000\000\000\000\000\000\005o\000\000\006\005t\006N\000\000\000\000\000\000\000\000\001\005v\000\000\006|\000\000\000\000\000\000\000\000\001\000\000\000\000\005x\001\001\000\000\003'\000\005q\005u\000\000\000\000\000\000\000\000\000\000\000\000\002\157\001\003'\000\006|\000\000\001\000\138\000\000\001\003p\006\005t\001\001\000\000\000\000\000\000\000\000\005v\000\000\000\000\003p\003(\000\000\000\000\003)\003q\002\158\005x\002\000\000\001\000\138\001\003(\000\000\002\003)\003q\000\000\002X\000\000\000\000\001\000\000\003N\006|\000\000\000\000\000\000\000\000\001\000\000\001\006\127\001\001\000\000\003'\000\000\000\002\003O\000\000\000\000\002\000\000\000\000\002Y\000\000\002d\000\000\000\000\000\000\001\000\138\000\000\002[\003p\000\000\000\000\001\000\000\001\000\000\000\000\001\027\000\000\001\005\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\002i\001\006\127\002\002|\000\000\000\000\001\000\000\000\000\000\000\004\159\000\000\000\000\000\000\005\000\000\002\000\000\000\000\002\003'\000\004\159\002\000\000\000\000\001\006\127\001\000\000\000\000\000\000\000\000\001\027\000\000\001\000\000\000\000\000\000\000\000\003p\000\000\011\024\000\000\003'\000\000\000\000\000\002\001\000\000\000\000\005\003(\001\000\000\003)\003q\000\000\001\027\002_\001\000\000\000\000\003p\000\000\000\000\000\000\000\000\001\006\127\002\139\000\000\000\000\004\003R\005/\003(\000\000\004\159\003)\003q\000\000\000\000\000\000\000\000\004\000\000\005/\0050\000\000\000\000\000\000\006\000\000\000\000\000\000\001\002\000\000\000\000\0050\001\027\001\001\006\000\000\000\000\000\000\002\000\000\001\000\000\003'\000\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\0056\0059\000\000\000\000\000\000\000\000\003p\000\000\003&\000\000\003'\000\002b\000\000\000\000\005:\004\004\159\005/\003(\003&\000\000\003)\003q\002\005<\000\000\005:\000\000\000\000\003p\0050\005\007T\000\000\007\b\000\000\005<\002f\002^\000\000\004\159\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\0056\0059\000\000\000\000\002\000\000\000\000\000\000\002m\001\000\000\000\000\006|\000\000\000\000\000\000\003p\001\000\000\000\000\003&\001\001\000\000\004\000\000\005/\005:\000\000\003(\002\002\003)\003q\000\000\000\000\000\000\005<\000\000\0050\001\000\138\000\000\007\017\000\000\000\000\000\000\001\t\004\000\000\005/\001\001\004\159\000\000\001\n\000\000\002\000\000\000\000\000\000\000\000\000\000\0050\000\000\0056\0059\007\022\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\000\000\000\000\001\003&\000\000\001\003t\0056\0059\000\000\005:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005<\000\000\007\\\000\000\000\000\000\000\000\000\003&\000\000\000\000\000\000\000\000\000\000\001\t\005:\004\001\005/\004\159\000\000\000\000\001\n\000\000\000\000\005<\bk\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\007\025\001\r\001\006\127\001\014\004\000\000\005/\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\000\000\003'\000\0050\000\000\0056\0059\007\031\000\000\000\000\000\000\000\000\000\000\001\000\000\001\020\000\138\000\000\001\027\007\001\003p\003v\000\000\000\000\003&\000\000\000\000\000\000\0056\0059\004\005:\005/\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\005<\000\000\000\000\000\000\0050\000\000\000\000\003&\007\"\000\000\001\r\bl\bm\001\014\005:\n7\000\000\000\000\001\016\001\001\000\000\001\018\001\019\005<\001\145\000\138\000\000\001\001\0056\0059\000\000\001\001\000\000\000\000\000\000\000\000\003s\000\000\001\020\000\138\000\000\004\000\000\005n\000\000\003s\000\000\003&\001\023\001\003s\000\000\001\003t\005:\000\000\005o\000\000\001\000\000\007\001\003t\001\005<\000\000\001\003t\001 \001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\159\000\000\005q\005u\000\000\003'\000\000\000\000\000\000\000\001\001\001\149\000\000\b\132\000\000\001\024\000\000\000\000\000\000\b\135\001\027\005t\001\029\tb\003p\000\000\000\000\000\000\005v\003s\000\000\000\000\000\000\001\001\001\023\000\000\003(\005x\000\000\003)\003q\001\000\000\000\000\001\003t\000\000\000\000\tc\te\tf\tg\003s\000\000\001 \001%\000\000\000\000\003v\000\000\001\001\004\000\000\005/\001\000\000\003v\001\003t\000\000\b\136\003v\000\000\000\000\000\000\000\000\0050\000\000\000\000\003s\007\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\000\000\000\000\000\000\001\000\000\000\000\001\003t\000\000\000\000\th\000\000\t\127\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\t\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\003&\005n\001\001\004\159\000\000\000\000\005:\004\003v\005n\001\001\004\005o\005n\000\000\005<\b\014\000\000\000\000\000\000\003s\005o\000\000\000\000\000\000\b\019\005o\000\000\000\000\003s\b\021\003v\000\000\001\000\000\000\000\001\003t\005q\005u\000\000\000\000\001\000\000\000\000\001\003t\005q\005u\000\000\000\000\000\000\005q\005u\000\000\001\t\000\000\000\000\005t\003v\000\000\000\000\000\000\001\n\000\000\005v\004\005t\005/\000\000\000\000\004\005t\005n\005v\005x\t\000\000\000\000\005v\000\000\0050\001\001\005x\b\023\005o\000\000\000\000\005x\b\025\000\000\bk\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\0056\0059\000\000\005o\000\000\005q\005u\b\027\001\t\000\000\001\003t\000\000\000\000\000\000\004\003v\005n\000\000\003&\t\000\000\000\000\000\000\005t\003v\005:\000\000\005q\005u\005o\005v\006\000\000\b\029\000\000\005<\001\r\000\000\000\000\000\000\005x\000\000\000\000\000\000\001\016\000\000\000\000\005t\001\018\001\019\001\001\000\000\000\000\005v\005q\005u\000\000\000\000\000\000\000\000\000\000\bl\bm\005x\000\000\np\001\020\000\138\000\000\003s\000\000\000\000\000\000\000\000\005t\001\145\000\138\000\000\004\000\000\005n\005v\001\000\000\000\000\001\003t\004\000\000\005n\000\000\005x\000\000\005o\001\001\003v\b\031\000\000\000\000\000\000\000\000\005o\000\000\000\000\000\000\b!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\000\000\000\000\000\000\001\005q\005u\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005t\000\000\001\001\000\000\001\023\001\149\005v\b\132\005t\001\001\000\000\000\000\b\135\000\000\005v\005x\000\000\000\000\000\000\004\003s\005n\000\000\001\026\005x\000\000\000\000\000\000\003s\000\000\000\000\000\000\003v\001\005o\000\000\001\003t\b#\000\000\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\001\024\001\001\000\000\000\000\001\027\000\000\001\029\000\000\005q\005u\000\000\000\000\000\000\b\136\000\000\000\000\000\000\000\000\001\001\003s\000\000\000\000\000\000\000\000\003v\000\000\000\000\005t\001\001\000\000\000\000\001\000\000\005v\001\003t\003s\000\000\000\000\000\000\000\000\000\000\004\005x\005n\000\000\000\000\003s\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\005o\000\000\000\000\001\b%\000\000\001\003t\000\000\000\000\000\000\001\t\000\000\003v\000\000\001\001\000\000\000\000\001\n\000\000\003v\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\004\000\000\005n\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005o\005t\000\000\001\b'\000\000\001\003t\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005x\000\000\003v\000\000\000\000\000\000\001\001\005q\005u\000\000\000\000\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\003v\000\000\004\000\000\005n\000\000\003s\000\000\005t\005o\000\000\003v\000\000\b)\000\000\005v\000\000\005o\001\r\001\000\000\b+\001\003t\000\000\005x\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\004\000\000\005n\001\020\000\138\000\000\000\000\000\000\000\000\005t\003v\000\000\000\000\000\000\000\000\005o\005v\005t\004\b-\005n\000\000\000\000\000\000\005v\nc\005x\000\000\000\000\004\000\000\005n\000\000\005o\005x\000\000\000\000\b/\000\000\000\000\000\000\005q\005u\000\000\005o\000\000\000\000\000\000\b1\000\000\000\000\nd\nf\ng\nh\001\001\000\000\000\000\005q\005u\005t\000\000\000\000\003v\000\000\000\000\000\000\005v\000\000\005q\005u\000\000\000\000\004\003s\005n\000\000\005x\005t\000\000\001\023\000\000\000\000\001\001\005v\000\000\001\005o\005t\001\003t\b3\000\000\000\000\005x\005v\000\000\000\000\000\000\001 \001S\ni\003s\n\128\000\000\005x\000\000\000\000\000\000\000\000\001\001\n\129\005q\005u\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\004\001\024\005n\000\000\003s\000\000\001\027\005t\001\029\001T\000\000\000\000\001\001\005v\005o\000\000\001\000\000\b5\001\003t\000\000\000\000\005x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\001\001\000\000\000\000\000\000\005q\005u\000\000\000\000\001\000\000\000\000\001\003t\000\000\003v\000\000\000\000\000\000\000\000\003s\001\001\000\000\000\000\005t\000\000\000\000\000\000\000\000\001\001\005v\001\000\000\000\000\001\003t\000\000\000\000\n\003s\005x\000\000\003v\000\000\000\000\000\000\000\000\000\000\003s\001\001\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\003s\003v\000\000\000\000\000\000\000\000\000\000\000\000\004\n\005n\000\000\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\n\000\000\005o\001\001\000\000\b9\000\000\003v\000\000\000\000\000\000\001\027\000\000\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\005q\005u\000\000\005o\003v\000\000\000\000\b8\001\000\000\000\000\001\003t\000\000\000\000\000\000\004\000\000\005n\000\000\005t\000\000\000\000\000\000\000\000\003v\000\000\005v\000\000\005q\005u\005o\000\000\000\000\003v\b;\000\000\005x\000\000\000\000\000\000\007\002\000\000\000\000\004\000\000\005n\000\000\000\000\005t\000\000\000\000\000\000\000\000\000\000\003v\005v\005q\005u\005o\001\001\000\000\b=\000\000\000\000\005x\000\000\004\007\027\005n\002\000\000\000\000\000\000\000\000\000\000\005t\002\000\000\003s\000\000\000\000\005o\005v\005q\005u\b?\000\000\004\000\000\005n\000\000\001\005x\000\000\001\003t\004\003v\005n\000\000\000\000\002\005o\005t\000\000\007 \bA\005q\005u\000\000\005v\005o\000\000\001\001\bD\000\000\004\000\000\005n\005x\000\000\000\000\000\000\000\000\000\000\000\000\005t\005q\005u\000\000\000\000\005o\003s\005v\000\000\bM\005q\005u\000\000\000\000\000\000\000\000\000\000\005x\000\000\001\000\000\005t\001\003t\003'\000\000\000\000\000\005v\000\000\005t\005q\005u\000\000\004\002\005n\005v\005x\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\005x\000\000\005o\000\000\005t\000\000\bP\000\000\003v\002\157\003(\005v\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\005x\000\000\000\000\001\001\000\000\000\000\005q\005u\000\000\000\000\000\000\001\001\000\000\000\000\002\158\007#\002\000\000\000\000\001\001\003s\000\000\002\000\000\005t\000\000\000\000\000\000\000\000\003s\000\000\005v\000\000\001\000\000\000\000\001\003t\003s\003v\000\000\005x\001\002\000\000\001\003t\003\014\004\000\000\005n\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005o\000\000\001\001\bS\000\000\002\002\000\000\000\000\000\000\001\001\000\000\004\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\003s\000\000\002\000\000\001\003'\000\001\003t\004\000\000\005n\000\000\001\002\005t\001\003t\000\000\000\000\000\000\000\000\005v\000\000\005o\003p\000\000\000\000\bV\000\000\003v\000\000\005x\000\000\000\000\000\000\001\001\003(\003v\000\000\003)\003q\000\000\000\000\000\000\000\000\004\003v\005/\005q\005u\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\bX\000\000\000\000\001\005t\000\000\001\003t\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005x\0056\0059\000\000\000\000\000\000\002\004\003v\005n\000\000\000\000\000\000\000\000\001\001\004\003v\005n\001\001\003&\005o\000\000\000\000\004\b[\005n\005:\000\000\000\000\005o\002\002\003s\b^\000\000\000\000\005<\003s\005o\000\000\004\159\000\000\t \000\000\000\000\001\005q\005u\001\003t\001\000\000\000\000\001\003t\005q\005u\002\000\000\000\000\003'\000\000\000\000\000\005q\005u\005t\000\000\000\000\000\000\004\003v\005n\005v\000\000\005t\000\000\000\000\000\000\004\003p\005n\005v\005x\005t\005o\000\000\000\000\000\000\t\000\000\005v\005x\003(\005o\000\000\003)\003q\t\000\000\000\000\005x\000\000\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\000\000\000\000\000\000\0050\005q\005u\000\000\n\014\000\000\000\000\000\000\003,\000\000\000\000\000\005t\000\000\001\001\004\003v\005n\005v\000\000\005t\003v\000\000\000\000\000\000\0056\0059\005v\005x\000\000\005o\000\000\000\000\003s\n\000\000\000\000\005x\001\001\003-\000\000\012\015\004\000\000\003&\001\000\000\000\000\001\003t\000\000\005:\000\000\000\000\000\000\005q\005u\003s\000\000\000\000\000\000\005<\000\000\004\159\000\000\000\000\000\000\000\000\003'\000\001\000\000\000\000\001\003t\005t\000\000\000\000\000\000\004\000\000\005n\005v\000\000\004\000\000\005n\000\000\003p\000\000\000\000\000\000\005x\000\000\005o\000\000\000\000\000\000\n\005o\000\000\003(\000\000\n\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\001\001\005q\005u\004\000\000\005/\004\000\000\000\000\000\000\000\000\000\000\003v\000\000\000\000\000\000\005t\000\000\0050\003s\000\000\005t\n\005v\000\000\000\000\000\000\000\000\005v\003'\000\000\000\001\005x\000\000\001\003t\003v\005x\000\000\000\000\000\000\bk\000\000\0056\0059\000\000\003'\000\003p\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\000\000\003&\003)\003q\003p\004\159\000\000\004\005:\t\003p\000\000\000\000\004\000\000\005n\000\000\003(\005<\000\000\003)\003q\t\003(\000\000\000\000\003)\003q\005o\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\n\001\000\000\000\000\000\000\005o\005q\005u\000\000\n\bl\bm\003v\000\000\n\144\001\n\000\000\003'\000\000\000\003&\004\000\000\005/\001\145\000\138\005t\000\000\001\001\000\000\005q\005u\005v\000\000\000\000\0050\003p\000\000\000\000\n\000\000\004\159\005x\000\000\000\000\000\000\000\000\003s\000\000\003(\005t\000\000\003)\003q\000\000\000\000\000\000\005v\000\000\004\159\001\0056\0059\001\003t\004\159\000\000\005x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005n\001\t\000\000\000\000\003&\000\000\000\000\000\000\000\000\001\n\000\000\005:\000\000\005o\000\000\000\000\001\149\n\b\132\001\r\000\000\005<\000\000\000\000\b\135\000\000\000\000\000\000\004\000\000\005/\001\018\001b\011\027\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\001w\0050\000\000\000\000\004\n\005/\000\000\001\020\000\138\004\000\000\005/\000\000\000\000\000\000\000\000\005t\000\000\0050\000\000\004\159\000\000\n\005v\0050\000\000\0056\0059\n\003'\000\003v\000\000\005x\b\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\003&\000\000\001\r\003p\0056\0059\000\000\005:\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\003(\005<\003&\003)\003q\000\000\000\000\000\000\003&\005:\003'\000\000\000\000\000\000\000\005:\000\000\001\020\000\138\005<\000\000\000\000\004\001\023\005/\005<\000\000\000\000\000\000\000\000\003p\001\n\000\000\004\000\000\005n\000\000\0050\000\000\000\000\000\000\n\000\000\003(\000\000\000\000\003)\003q\005o\000\000\000\000\000\000\011\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\0056\0059\000\000\003'\000\000\000\000\000\000\000\001d\000\000\000\000\005q\005u\006O\000\000\001Z\000\000\003p\000\000\000\000\003&\003'\000\003p\000\000\000\000\000\000\005:\004\159\000\000\003(\005t\001\023\003)\003q\000\000\003(\005<\005v\003)\003q\003p\000\000\000\000\000\000\000\000\000\000\000\000\005x\000\000\001\r\000\000\001 \001u\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\001\018\001b\014\015\000\000\000\000\000\000\003'\000\000\000\004\159\000\000\000\000\000\000\000\000\000\000\001\001\000\000\001\024\001\020\000\138\000\000\000\000\001\027\000\000\001\029\003p\000\000\000\000\000\000\004\000\000\005/\000\000\000\000\003s\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\0050\000\000\000\000\001\011\017\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\000\000\0056\0059\004\000\000\005/\000\000\000\000\000\000\000\000\001\001\000\000\004\159\000\000\000\000\000\000\000\000\0050\000\000\000\000\003&\011\020\000\000\000\000\000\000\000\000\001\023\005:\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005<\000\000\000\000\000\000\000\000\001\0056\0059\001\003t\000\000\000\000\000\000\000\000\000\000\004\000\000\005/\000\000\000\000\004\004\159\005/\000\000\000\000\003&\000\000\001\001\0050\003v\000\000\005:\011\030\000\000\0050\001d\000\000\004\011%\005/\006O\005<\001Z\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\r\0050\012H\0056\0059\0110\000\000\000\000\001\0056\0059\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\000\000\0056\0059\003&\005:\000\000\000\000\004\000\000\005/\005:\000\000\000\000\000\000\005<\000\000\004\003v\005n\000\000\005<\003&\0050\003'\000\000\000\0113\000\000\005:\000\000\000\000\005o\000\000\000\000\000\000\011=\000\000\000\000\005<\000\000\000\000\000\000\000\000\003p\000\000\000\000\000\000\000\000\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\003(\005q\005u\003)\003q\000\000\000\000\000\000\012I\000\000\001\001\003&\000\000\000\000\001\001\003v\000\000\005:\000\000\005t\000\000\000\000\000\000\004\000\000\005n\005v\005<\003s\000\000\000\000\000\000\000\000\003s\000\000\000\000\005x\000\000\005o\000\000\000\000\001\011V\000\000\001\003t\001\000\000\000\000\001\003t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\005q\005u\000\000\000\000\000\000\000\000\004\000\000\012f\000\000\000\000\000\000\000\000\000\000\000\000\004\003s\005n\000\000\000\000\005t\012g\000\000\000\000\000\000\004\159\r\005v\012H\001\005o\000\000\001\003t\011[\000\000\000\000\005x\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\012h\012i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\003s\000\000\000\000\000\000\003'\000\003&\003v\000\000\003'\000\000\000\003v\001\000\000\005t\001\003t\000\000\000\000\000\000\000\000\005v\000\000\003p\000\000\000\000\000\000\004\003p\005/\000\000\005x\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\003(\0050\000\000\003)\003q\011_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012I\000\000\000\000\000\000\003v\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\004\000\000\005n\000\000\000\000\004\000\000\005n\000\000\000\000\003s\000\000\000\000\000\000\000\000\005o\000\000\000\000\003&\011\136\005o\000\000\000\000\001\011\151\005:\001\003t\000\000\000\000\000\000\000\000\000\000\003v\000\000\005<\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\005q\005u\004\000\000\012f\000\000\004\000\000\005n\001\001\004\159\000\000\000\000\000\000\005t\004\159\012g\000\000\000\000\005t\005o\005v\000\000\000\000\011\154\000\000\005v\000\000\003s\000\000\000\000\005x\000\000\000\000\000\000\000\000\005x\000\000\000\000\000\000\000\000\001\012h\012i\001\003t\005q\005u\000\000\000\000\004\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\001\005o\005t\003v\000\000\011\003'\000\001\005v\004\000\000\005/\000\000\000\000\004\000\000\005/\000\000\005x\000\000\000\000\000\000\000\000\000\000\0050\003p\005q\005u\012\006\0050\000\000\000\000\000\000\012\b\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\005t\000\000\000\000\000\000\0056\0059\000\000\005v\000\000\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\005x\000\000\000\000\004\003v\005n\000\000\003&\000\000\000\000\000\000\000\000\003&\000\000\005:\003'\000\000\000\005o\005:\000\000\000\000\012\020\000\000\005<\000\000\001\000\000\000\000\005<\000\000\000\000\000\000\000\000\012\003p\003'\000\001\001\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\003p\001\000\138\000\000\003'\000\000\000\000\000\005t\000\000\004\159\000\000\004\003(\005n\005v\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\003p\005x\000\000\005o\000\000\000\000\bk\012A\003'\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003p\005q\005u\001\001\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\005t\004\000\000\005/\000\000\000\000\001\005v\003p\000\000\004\159\000\000\000\000\000\000\000\000\001\0050\005x\001\011\147\012E\003(\r\r\000\000\003)\003q\001\r\021\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\bl\bm\000\000\000\000\n\152\000\000\0056\0059\003'\000\000\000\000\000\000\000\000\000\001\145\000\138\000\000\000\000\001\004\159\r\022\000\000\000\000\001\027\000\000\001\003&\000\000\003p\000\000\000\000\000\000\000\000\005:\000\000\000\000\003'\000\004\000\000\005/\003(\000\000\005<\003)\003q\000\000\004\159\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\003p\rA\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\003v\000\000\003)\003q\0050\000\000\004\159\007\002\rC\0056\0059\000\000\000\000\004\001\149\005/\b\132\000\000\000\000\000\000\000\000\000\000\b\135\000\000\000\000\000\000\000\000\000\000\0050\003&\0056\0059\r\000\000\000\000\007\027\005:\002\000\000\000\000\000\000\004\000\000\005/\002\000\000\005<\000\000\000\000\000\000\003&\003'\000\000\000\0056\0059\0050\005:\000\000\000\000\r\000\000\004\159\000\000\004\000\000\005n\005<\000\000\002\004\003p\005/\007 \003&\b\136\000\000\000\000\000\000\005o\000\000\005:\0056\0059\003(\0050\000\000\003)\003q\r\004\159\005<\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\005q\005u\003'\000\005:\000\000\0056\0059\000\000\000\000\000\000\003p\000\000\000\000\005<\000\000\000\000\000\000\000\000\000\000\005t\004\003p\005/\003(\002\003&\003)\003q\000\000\000\000\000\000\000\000\005:\000\000\003(\0050\000\000\003)\003q\r\000\000\000\000\005<\000\000\000\000\000\000\003'\000\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\002\157\000\000\000\000\000\000\000\000\0056\0059\0050\000\000\000\000\003p\r\000\000\004\159\000\000\003'\000\000\000\007E\000\000\000\000\000\000\000\000\003(\000\000\003&\003)\003q\002\158\000\000\002\000\000\005:\0056\0059\003p\000\000\002\000\000\000\000\000\000\000\000\005<\002\000\000\003'\000\002\003(\000\000\000\000\003)\003q\003&\000\000\000\000\000\000\000\000\004\159\000\000\005:\000\000\002\002\000\000\003p\002\000\000\000\000\004\159\005<\000\000\000\000\002\002\003'\000\004\003(\005/\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\003p\014\001\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\004\159\000\000\000\000\000\000\0056\0059\000\000\000\000\004\002\005/\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\004\000\000\005/\000\000\0050\003&\004\159\000\000\014\r\000\000\000\000\000\000\005:\000\000\bk\0050\003p\000\000\000\000\014\017\000\000\000\000\005<\000\000\000\000\000\000\003'\000\000\000\003(\0056\0059\003)\003q\000\000\000\000\004\159\000\000\000\000\000\000\000\000\0056\0059\000\000\000\000\004\003p\005/\000\000\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\005:\000\000\003(\0050\003&\003)\003q\014.\000\000\004\159\005<\005:\002\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\005<\000\000\000\000\003'\000\000\000\000\000\0050\0056\0059\000\000\0143\000\000\000\000\000\000\bl\bm\002\002\011\000\000\000\000\004\003p\005/\000\000\000\000\000\000\003&\001\145\000\138\000\000\000\000\0056\0059\005:\003(\0050\000\000\003)\003q\0145\004\159\000\000\002\005<\000\000\000\000\003'\000\000\000\000\000\004\003&\005/\000\000\000\000\000\000\000\000\000\000\005:\000\000\000\000\0056\0059\000\000\000\000\0050\003p\000\000\005<\0147\004\159\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\003(\000\000\003&\003)\003q\000\000\000\000\000\000\000\000\005:\000\000\000\000\0056\0059\000\000\003'\000\003p\001\149\005<\b\132\000\000\000\000\000\000\000\000\004\b\135\005/\000\000\000\000\003(\000\000\003&\003)\003q\003p\000\000\000\000\000\000\005:\0050\000\000\000\000\000\000\0149\000\000\004\159\000\000\003(\005<\000\000\003)\003q\000\000\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\0056\0059\000\000\000\000\0050\000\000\002\157\000\000\014;\000\000\000\000\000\000\000\000\b\136\000\000\000\000\003p\000\000\000\000\000\000\003&\000\000\000\000\000\000\000\000\004\159\000\000\005:\000\000\003(\0056\0059\003)\003q\002\158\000\000\002\005<\000\000\000\000\000\000\003'\000\002\004\000\000\005/\000\000\000\000\002\003&\002\157\000\000\000\000\000\000\004\159\000\000\005:\000\000\0050\000\000\003p\000\000\014=\000\000\000\000\000\000\005<\002\002\003'\000\002\004\159\003(\000\000\000\000\003)\003q\002\158\000\000\002\000\000\000\000\000\000\0056\0059\000\000\002\004\003p\005/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\0050\003&\003)\003q\014?\000\000\000\000\000\000\005:\002\003\027\000\000\000\000\002\000\000\004\004\159\005/\005<\000\000\000\000\000\000\003'\000\000\000\002\0056\0059\000\000\000\000\0050\003'\000\004\014A\005/\000\000\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\000\000\003&\000\000\0050\000\000\000\000\003p\014C\005:\000\000\003(\0056\0059\003)\003q\000\000\004\159\000\000\005<\003(\000\000\000\000\003)\003q\000\000\002\000\000\000\000\000\000\0056\0059\003&\000\000\000\000\000\000\004\000\000\005/\005:\000\000\b\152\000\000\003'\000\000\000\004\159\000\000\000\000\005<\003&\0050\003'\000\000\000\014E\000\000\005:\000\000\000\000\002\000\000\000\000\003p\000\000\000\000\000\000\005<\000\000\000\000\000\000\000\000\003p\000\000\000\000\000\000\003(\0056\0059\003)\003q\004\000\000\005/\000\000\003(\002\002\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\0050\003&\000\000\000\000\014G\000\000\004\159\000\000\005:\002\000\000\000\000\003'\000\004\004\159\005/\002\005<\000\000\000\000\003'\000\000\000\b\153\b\154\0056\0059\rO\0050\000\000\000\000\003p\014I\000\000\002\002\000\000\002+\000\138\000\000\003p\000\000\000\000\000\000\003(\003&\000\000\003)\003q\000\000\000\000\000\000\005:\003(\0056\0059\003)\003q\000\000\000\000\000\000\002\005<\003'\000\000\000\000\000\000\000\000\000\004\004\159\005/\000\000\000\000\003&\000\000\000\000\000\000\004\004\159\005/\005:\000\000\003p\0050\000\000\000\000\000\000\014K\000\000\000\000\005<\000\000\0050\000\000\000\000\003(\014M\000\000\003)\003q\000\000\000\000\000\000\000\000\000\000\000\000\002/\000\000\b\0056\0059\000\000\000\000\000\000\b\000\000\000\000\000\000\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\003&\000\000\000\000\000\000\004\004\159\005/\005:\000\000\003&\000\000\000\000\000\000\004\004\159\005/\005:\005<\003p\0050\000\000\000\000\000\000\014O\000\000\000\000\005<\000\000\0050\000\000\000\000\003(\014Q\000\000\003)\003q\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\000\000\000\000\003'\000\000\000\000\000\0056\0059\000\000\004\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\000\000\004\003p\005/\005:\000\000\003&\000\000\000\000\000\000\004\002\157\005/\005:\005<\003(\0050\000\000\003)\003q\014S\000\000\000\000\005<\000\000\0050\000\000\003'\000\014U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\002\0056\0059\000\000\000\000\000\000\003p\002\000\000\000\000\0056\0059\004\004\159\005/\003'\000\000\000\000\000\003(\000\000\003&\003)\003q\000\000\000\000\000\000\0050\005:\000\000\003&\014Y\002\002\000\000\003p\002\005:\005<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005<\003(\000\000\000\000\003)\003q\0056\0059\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\004\159\000\000\003'\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\000\000\004\003p\005/\005:\000\000\000\000\000\000\000\000\000\000\000\000\003p\001\001\005<\003(\0050\002\003)\003q\014X\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\000\000\000\000\000\000\003s\000\000\004\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\001\000\000\000\000\001\003t\000\000\000\000\000\000\004\000\000\005/\003'\000\000\000\000\000\000\000\000\000\003&\004\159\000\000\000\000\000\000\000\000\0050\005:\000\000\000\000\014[\000\000\000\000\000\000\003p\000\000\000\000\005<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\003q\0056\0059\002\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\000\000\004\159\000\000\001\001\000\000\000\000\000\000\0050\003&\004\159\000\000\014]\000\000\000\000\000\000\005:\002\002\000\000\000\000\000\000\004\003s\005/\000\000\005<\000\000\000\000\000\000\000\000\003v\000\000\000\000\0056\0059\001\0050\000\000\001\003t\014_\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\005:\000\000\0056\0059\004\000\000\005/\003'\000\000\000\005<\000\000\000\000\004\004\159\005/\000\000\000\000\000\000\0050\000\000\000\000\003&\014a\000\000\000\000\000\000\003p\0050\005:\000\000\000\000\014g\000\000\004\000\000\005n\000\000\000\000\005<\003(\000\000\000\000\003)\003q\0056\0059\000\000\000\000\005o\003'\000\000\000\014o\0056\0059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\003v\000\000\000\000\000\000\003p\000\000\005:\000\000\003&\005q\005u\000\000\004\000\000\005/\005:\005<\003(\000\000\000\000\003)\003q\003'\000\000\000\005<\000\000\0050\000\000\005t\000\000\014r\002\157\000\000\000\000\000\000\005v\001\t\000\000\000\000\000\000\000\000\003p\000\000\000\000\001\n\005x\000\000\000\000\000\000\000\000\003'\000\0056\0059\003(\003'\000\003)\003q\002\158\000\000\002\000\000\004\004\159\005n\000\000\000\000\002\000\000\003p\000\000\003&\000\000\000\000\003p\000\000\003\005o\005:\000\000\000\000\014u\003(\000\000\000\000\003)\003q\003(\005<\000\000\003)\003q\002\002\001\t\000\000\002\000\000\000\000\000\000\000\000\000\000\001\n\005q\005u\000\000\004\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005t\000\000\001\r\000\000\004\000\000\005/\005v\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\005x\000\000\0050\001\t\004\159\000\000\014x\000\000\000\000\000\000\000\000\001\n\000\000\002\000\000\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\0056\0059\004\000\000\005/\004\159\000\000\000\000\000\000\000\000\004\159\000\000\000\000\000\000\000\000\000\000\001\r\0050\000\000\000\000\003&\014z\000\000\000\000\001\016\000\000\000\000\005:\001\018\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005<\001\t\000\000\004\001\t\005/\0056\0059\000\000\001\n\001\020\000\138\001\n\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\014}\000\000\000\000\000\000\003&\002\001\r\001\023\000\000\000\000\004\005:\005/\000\000\001\016\004\000\000\005/\001\018\001\019\004\005<\0056\0059\000\000\0050\000\000\001 \001u\014\128\0050\002\002\002\157\014\000\000\000\000\001\020\000\138\000\000\000\000\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\005:\000\000\0056\0059\000\000\000\000\001\024\0056\0059\002\005<\001\027\002\158\001\029\002\000\000\000\000\001\023\000\000\000\000\001\r\002\003&\001\r\000\000\000\000\005\003&\001\016\005:\003N\001\016\001\018\001\019\005:\001\018\001\019\001 \004+\005<\000\000\000\000\004.\000\000\005<\000\000\002\003O\001\001\002\001\020\000\138\001\t\001\020\000\138\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\001\024\001\023\001\t\000\000\000\000\001\027\000\000\001\029\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\001\001 \004\000\000\000\000\000\000\004\000\000\001\t\006\141\000\000\002\157\000\000\000\000\000\000\000\000\001\n\000\000\001\t\000\000\000\000\000\000\002\000\000\000\000\000\000\001\n\000\000\000\000\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\000\000\000\000\002\158\000\000\002\000\000\000\000\001\023\005\000\000\001\023\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003N\001\r\006\000\000\000\000\000\000\000\000\001 \001u\001\016\001 \003k\000\000\001\018\001\019\001\r\002\003O\001\t\000\000\002\003R\000\000\001\016\000\000\000\000\001\n\001\018\001\019\000\000\003v\000\000\001\020\000\138\000\000\001\024\000\000\000\000\001\024\002\157\001\027\001\r\001\029\001\027\002\001\029\001\020\000\138\000\000\001\016\000\000\001\r\000\000\001\018\001\019\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\002\158\000\000\002\002\002\001\020\000\138\000\000\000\000\002\002\000\000\000\000\000\000\000\000\001\020\000\138\000\000\003N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005n\002\001\t\000\000\007\004\002\003O\000\000\001\t\002\001\n\000\000\001\r\005o\001\023\007\018\001\n\000\000\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\001\023\000\000\000\000\000\000\000\000\000\000\001 \001u\000\000\003R\000\000\005q\005u\000\000\000\000\001\020\000\138\001\t\000\000\000\000\001 \006\149\000\000\000\000\006\152\001\n\001\023\000\000\000\000\000\000\000\000\005t\002\000\000\001\024\000\000\001\023\000\000\002\001\027\000\000\001\029\000\000\000\000\000\000\000\000\001 \006\149\001\024\000\000\006\000\000\000\000\001\027\000\000\001\029\001 \001u\002\002\002\157\007/\000\000\000\000\001\r\000\000\000\000\000\000\000\000\000\000\001\r\000\000\001\016\000\000\001\024\000\000\001\018\001\019\001\016\001\027\000\000\001\029\001\018\001\019\001\024\002\000\000\000\000\002\158\001\027\002\001\029\000\000\001\023\003R\001\020\000\138\002\000\000\000\000\000\000\001\020\000\138\000\000\000\000\000\000\003N\001\r\000\000\000\000\000\000\000\000\000\000\001 \003k\001\016\000\000\002\000\000\001\018\001\019\001\t\002\003O\000\000\000\000\002\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\138\000\000\001\024\000\000\002\002\000\000\001\027\000\000\001\029\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\001\t\002X\001\n\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\002\000\000\000\000\001\023\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\000\002\000\000\000\000\002Y\000\000\002d\000\000\000\000\000\000\000\000\001 \006\149\002[\001\007=\000\000\001 \006\149\000\000\001\t\007M\001\000\000\007\000\000\000\000\000\000\001\n\001\r\000\000\000\000\000\000\000\000\001\023\r\000\000\001\016\003\016\001\024\000\000\001\018\001\019\000\000\001\027\001\024\001\029\000\000\000\000\000\000\001\027\000\000\001\029\000\000\001 \007\000\000\003R\007\001\r\001\020\000\138\000\000\000\000\000\000\001\r\000\000\001\016\000\000\000\000\000\000\001\018\001\019\001\016\000\000\000\000\000\000\001\018\001\019\000\000\002\000\000\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\001\020\000\138\000\000\000\000\000\000\000\000\001\020\000\138\000\000\002_\000\000\000\000\000\000\000\000\001\000\000\002\002\000\000\000\000\001\r\000\000\001\000\000\000\000\000\000\001\001\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\138\000\000\001\023\000\000\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\001\001 \007\000\000\000\000\007\000\000\000\000\001\000\000\000\000\001\023\000\000\000\000\000\000\000\000\001\t\001\023\000\000\000\000\000\000\002b\000\000\000\000\001\n\000\000\000\000\000\000\000\000\001\024\000\000\001 \r\000\000\001\027\000\000\001\029\001 \012\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002f\002^\001\000\000\000\000\001\t\000\000\000\000\000\000\001\000\000\000\000\001\024\001\n\000\000\001\023\001\001\027\001\024\001\029\000\000\000\000\000\000\001\027\001\001\029\000\000\002m\000\000\001\001\000\000\000\000\000\000\001\r\001 \001$\000\000\000\000\000\000\000\000\000\000\001\016\001\000\000\000\000\001\018\001\019\000\000\000\000\000\000\001\000\000\000\000\000\000\001\001\001\000\000\001\r\000\000\000\000\001\027\001\024\001\001\020\000\138\001\016\001\027\000\000\001\029\001\018\001\019\000\000\001\000\138\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\001\020\000\138\001\000\000\000\000\001\r\001\001\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\001\001\018\001\019\000\000\000\000\000\000\000\000\000\000\001\001\000\138\000\000\001\001\000\000\000\000\000\000\011O\001\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\138\000\000\001\t\000\000\000\000\001\023\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\001\000\000\000\000\000\000\011P\000\000\011\134\011b\000\000\000\000\000\000\001 \001\139\000\000\000\000\000\000\001\023\000\000\001\000\000\001\001\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\001\001\t\000\000\000\000\001\t\001 \002\005\000\000\001\024\001\n\001\000\000\001\n\001\027\000\000\001\029\000\000\001\001\000\138\000\000\001\023\001\027\000\000\001\000\000\000\000\000\000\000\000\000\000\001\002%\001\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\001 \002\001\t\000\000\000\000\000\000\001\r\000\000\000\000\000\000\001\n\001\002\000\000\001\016\000\000\000\000\001\001\018\001\019\000\000\000\000\001\027\011c\001\000\000\000\000\000\000\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\000\000\001\020\000\138\001\000\000\000\000\000\000\001\001\027\000\000\001\000\000\000\000\000\000\001\r\001\001\001\r\000\000\001\000\000\000\000\001\016\000\000\001\001\016\001\018\001\019\000\000\001\018\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\001\020\000\138\000\000\001\020\000\138\000\000\004\000\000\011\128\000\000\000\000\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\011\129\001\001\018\001\019\001\000\000\001\027\000\000\001\000\000\000\000\000\000\001\001\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\138\000\000\000\000\000\000\011\130\011\131\000\000\000\000\000\000\001\000\000\001 \003i\000\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\000\005t\000\000\001\001\000\000\000\000\001\001\000\000\000\000\000\000\001\023\000\000\000\000\001\023\001\024\001\000\138\000\000\000\000\001\027\000\000\001\029\000\000\000\000\001\000\138\000\000\000\000\000\000\000\000\001 \003m\000\000\001 \004-\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\001\000\000\001\001\000\000\000\000\000\000\001\023\000\000\000\000\001\000\000\000\000\001\024\001\001\001\024\001\t\001\027\000\000\001\029\001\027\000\000\001\029\000\000\001\n\000\000\001 \004\153\000\000\000\000\000\000\001\t\001\000\138\000\000\000\000\000\000\000\000\001\001\n\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\001\001\000\000\000\000\001\024\000\000\001\000\000\000\000\001\027\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\004\001\000\138\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000\000\000\001\001\t\000\000\001\000\000\000\000\000\000\000\000\001\001\n\000\000\001\001\001\001\001\001\000\000\000\000\001\027\000\000\001\000\000\001\000\000\001\r\000\000\000\000\001\027\001\001\001\000\138\001\016\001\000\138\000\000\001\018\001\019\000\000\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\001\005(\000\000\001\018\001\019\000\000\000\000\001\020\000\138\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001\020\000\138\001\t\000\000\000\000\000\000\001\000\000\000\000\000\000\001\n\001\027\000\000\001\000\000\001\005\001\t\000\000\000\000\001\r\000\000\000\000\003(\000\000\001\n\003)\003*\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\027\000\000\001\001\020\000\138\000\000\000\000\000\000\000\000\000\000\001\005\000\000\001\005\001\023\001\000\000\000\000\001\000\000\000\000\000\000\000\000\001\001\000\000\001\000\000\000\000\001\023\000\000\000\000\001\000\000\001 \005\000\000\001\000\000\000\000\001\000\000\001\027\001\r\001\001\027\000\000\001\000\000\001 \005\001\016\000\000\000\000\000\000\001\018\001\019\000\000\001\r\000\000\001\t\000\000\001\024\000\000\000\000\004\159\001\016\001\027\001\n\001\029\001\018\001\019\000\000\000\000\001\020\000\138\000\000\001\024\000\000\000\000\001\023\000\000\001\027\000\000\001\029\000\000\000\000\000\000\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \005\000\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\001\001\000\000\001\001\001\000\000\001\001\001\000\000\000\000\000\000\001\001\001\024\004\000\000\005/\000\000\001\027\000\000\001\029\001\000\138\000\000\001\000\138\000\000\000\000\000\000\0050\001\000\138\000\000\000\000\000\000\001\r\000\000\001\023\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\000\000\001\023\000\000\000\000\0056\0059\001 \006'\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\138\001\t\000\000\000\000\000\000\001 \006e\000\000\003&\001\n\000\000\000\000\001\t\000\000\003,\000\000\000\000\000\001\024\000\000\001\n\000\000\000\000\001\027\000\000\001\029\001\t\000\000\000\000\000\000\000\000\000\000\001\001\024\001\n\001\000\000\001\t\001\027\000\000\001\029\001\000\000\000\000\000\000\001\n\000\000\003-\000\000\n\002\004\001\t\001\006t\000\000\001\006~\000\000\000\000\001\n\000\000\001\006\151\000\000\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\001\t\001\023\000\000\000\000\001\000\000\000\000\001\001\n\001\027\000\000\001\001\027\001\001\001\r\000\000\000\000\001\027\000\000\001\001 \006\001\016\000\000\000\000\001\r\001\018\001\019\001\t\000\000\000\000\000\000\000\000\001\016\000\000\000\000\001\n\001\018\001\019\001\r\000\000\000\000\000\000\000\000\000\000\001\020\000\138\001\016\001\024\000\000\001\r\001\018\001\019\001\027\000\000\001\029\001\020\000\138\001\016\000\000\000\000\004\001\018\001\019\001\r\000\000\000\000\000\000\000\000\000\000\001\020\000\138\001\016\011O\001\000\000\001\018\001\019\000\000\001\r\000\000\001\020\000\138\000\000\000\000\000\000\000\000\001\016\000\000\001\r\000\000\001\018\001\019\000\000\000\000\001\020\000\138\001\016\000\000\000\000\n\018\001\018\001\019\000\000\000\000\000\000\011P\000\000\011Q\011b\001\020\000\138\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\001\020\000\138\000\000\001\023\000\000\004\001\016\t\000\000\000\000\001\018\001\019\000\000\000\000\001\023\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\001 \006\000\000\000\000\000\000\001\023\001\020\000\138\000\000\001\t\000\000\001 \007\015\000\000\000\000\000\000\001\023\001\n\000\000\001\000\000\000\000\000\000\n\000\n\001\001 \007\020\001\001\024\000\000\001\023\000\000\000\000\001\027\000\000\001\029\001 \007\029\000\000\001\024\000\000\000\000\000\000\003&\001\027\001\023\001\029\000\000\001\000\000\001 \007Z\000\000\001\024\011c\001\023\001\000\000\001\027\001\t\001\029\000\000\000\000\000\000\001\024\001 \007\001\n\000\000\001\027\000\000\001\029\000\000\001\t\000\000\001 \007\000\000\001\024\000\000\000\000\001\n\000\000\001\027\001\023\001\029\000\000\000\000\001\t\000\000\000\000\000\000\000\000\001\024\000\000\000\000\001\n\000\000\001\027\001\r\001\029\000\000\000\000\001\024\001 \bu\000\000\001\016\001\027\001\001\029\001\018\001\019\000\000\000\000\000\000\000\000\001\004\000\000\011\128\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\138\001\024\011\129\000\000\000\000\000\000\001\027\001\001\029\001\000\138\000\000\000\000\000\000\000\000\001\000\000\000\000\001\r\001\001\000\000\000\000\000\000\000\000\000\000\001\016\000\000\011\130\011\131\001\018\001\019\001\r\000\000\000\000\000\000\000\000\000\000\001\000\138\001\016\000\000\000\000\000\000\001\018\001\019\000\000\001\r\005t\001\020\000\138\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\001\018\001\019\000\000\000\000\001\020\000\138\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\t\001\023\001\020\000\138\000\000\000\000\000\000\000\000\001\n\000\000\000\000\001\000\000\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\001 \bx\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\b\000\000\000\000\000\000\000\000\001\n\000\000\001\t\001\000\000\000\000\000\000\002Y\000\000\002d\001\n\000\000\001\024\000\000\001\023\000\000\002[\001\027\000\000\001\029\000\000\000\000\001\001\b\000\000\000\000\001\027\001\023\001\000\000\001\t\000\000\000\000\001 \t\011\000\000\000\000\000\000\001\n\000\000\002i\001\001\023\000\000\002~\000\000\000\000\001 \tC\001\001\000\000\001\r\001\001\001\027\000\000\001\000\000\000\000\001\016\001\024\001 \tN\001\018\001\019\001\027\000\000\001\029\000\000\001\t\000\000\001\000\138\000\000\001\024\000\000\000\000\001\n\000\000\001\027\001\r\001\029\001\020\000\138\000\000\000\000\000\000\000\000\001\016\001\024\001\r\000\000\001\018\001\019\001\027\000\000\001\029\000\000\001\016\000\000\002_\000\000\001\018\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\138\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\001\020\000\138\000\000\000\000\000\000\000\000\001\016\000\000\003,\000\001\018\001\019\000\000\000\000\000\000\001\t\000\000\000\000\000\000\003'\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\001\001\020\000\138\000\000\001\t\000\000\000\000\000\000\000\000\000\000\001\r\001\023\001\n\003-\000\000\n\002\004\000\000\001\016\000\000\001\t\142\001\018\001\019\003(\000\000\001\003)\0037\000\000\002b\001 \t\148\000\000\001\000\000\000\000\000\000\000\000\000\000\001\023\001\020\000\138\001\000\000\003,\000\000\000\001\000\000\001\023\001\000\000\001\027\000\000\001\002f\002^\000\000\001\024\001 \n;\000\000\000\000\001\027\000\000\001\029\000\000\000\000\000\000\001 \n\150\000\000\000\000\000\000\000\000\000\000\001\r\003-\001\023\n\002\004\000\000\002m\000\000\001\016\000\000\000\000\001\024\001\018\001\019\000\000\000\000\001\027\001\r\001\029\000\000\000\000\001\024\001 \n\156\000\000\001\016\001\027\004\001\029\001\018\001\019\001\020\000\138\000\000\000\000\000\000\000\000\000\000\004\159\001\000\000\000\000\001\023\003,\000\000\000\000\000\001\001\020\000\138\001\024\001\001\000\000\000\000\001\027\001\001\029\000\000\000\000\000\000\000\000\001 \014\007\001\000\000\n\b\000\000\001\001\001\000\138\000\000\000\000\000\000\000\000\003-\000\000\n\002\004\003,\000\000\000\000\000\000\000\000\000\000\000\001\000\138\000\000\001\024\004\004\t\000\000\001\027\000\000\001\029\000\000\000\000\000\000\000\000\004\000\000\005/\000\000\t\000\000\000\000\001\023\000\000\000\000\000\000\003-\000\000\003.\004\0050\003'\000\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000\000\001 \014\n\007\n\000\n\001\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\001\031\000\000\001\000\000\000\000\003(\003&\000\000\003)\003Z\004\001\024\t\000\000\000\000\000\000\001\027\003&\001\029\001\000\000\004\001\001\000\000\t\001\003a\001\024\000\000\000\000\000\000\000\000\001\027\000\000\001\029\000\000\000\000\000\000\001\000\000\000\000\003,\000\000\000\000\000\003,\000\000\000\000\000\001\n\000\n\001\003,\000\001\027\000\000\001\004\000\000\012\133\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\003&\001\027\000\000\001\003-\000\000\004\004\003-\000\000\004\004\000\000\000\000\004\003-\t\004\004\000\000\000\000\000\000\000\000\000\000\000\000\004\159\000\000\001\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003v\000\000\001\001\000\000\000\000\000\000\000\000\004\000\000\t\000\000\n\000\n\001\000\000\000\000\000\000\001\000\000\000\000\001\005\000\000\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\001\000\000\000\000\001\006\t\001\001\000\000\000\000\000\000\000\000\004\000\000\005/\n\000\n\001\000\000\004\007\002\000\000\000\000\004\000\000\001\001\000\000\0050\000\000\004\004\000\000\005n\000\000\000\000\003&\000\000\000\000\007\002\001\000\000\000\000\001\006#\000\000\005o\000\000\007\027\000\000\002\007\002\000\000\000\000\0056\0059\000\000\002\001\000\000\000\000\001\007%\000\000\000\000\000\000\000\000\007\027\000\000\002\001\001\005q\005u\003&\003v\002\000\000\000\000\007\027\000\000\002\002\004\007\002\t\007 \004\002\t\000\000\000\000\005t\003v\004\000\000\t\000\000\t\000\000\000\000\002\t\001\000\000\007 \001\007G\000\000\t\000\000\000\000\007\027\002\002\000\000\000\000\007 \000\000\000\000\000\000\002\000\000\000\000\n\000\n\001\000\000\000\000\n\000\n\001\000\000\003v\000\000\000\000\000\000\n\000\n\001\000\000\000\000\004\000\000\005n\000\000\002\003&\000\000\002\000\000\003&\003v\007 \000\000\003'\000\005o\003&\000\000\004\000\000\005n\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\005o\000\000\002\000\000\000\000\000\000\000\000\000\000\005q\005u\000\000\000\000\000\000\003(\000\000\000\000\003)\007\001\001\000\000\007u\003v\004\000\000\005n\005q\005u\005t\003(\000\000\005\003)\007\000\000\002\000\000\000\000\005o\000\000\007x\004\000\000\005n\000\000\000\000\005t\000\000\000\000\000\000\002\001\007\127\000\000\001\b\016\005o\000\000\000\000\005\000\000\002\000\000\000\000\005q\005u\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\002\005q\005u\005t\007\131\004\000\000\005n\005\000\000\000\000\000\000\002\000\000\002\002\005\000\000\000\000\000\000\005o\005t\002\004\159\000\000\000\000\002\002\005\000\000\000\000\000\000\000\000\002\000\000\000\000\005\000\000\002\004\159\000\000\002\000\000\000\000\000\000\002\005q\005u\005\000\000\000\000\005\000\000\002\000\000\000\000\005\000\000\002\002\002\003v\000\000\000\000\000\000\002\005t\000\000\000\000\000\000\002\003'\000\002\005\000\000\005\000\000\002\005\000\000\002\000\000\001\001\002\002\004\002\005/\002\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\011O\001\000\000\0050\004\003(\005/\000\000\003)\011\022\000\000\002\000\000\000\000\002\005\000\000\001\005\0050\001\0115\003,\000\t\005\000\000\004\000\000\005n\0056\0059\000\000\002\011P\000\000\011S\011b\000\000\000\000\000\000\000\000\005o\000\000\000\000\000\000\0056\0059\000\000\000\000\003&\000\000\000\000\002\002\000\000\003-\000\000\012\131\004\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\005q\005u\000\000\000\000\000\000\002\002X\000\000\002\003'\000\000\000\002\002\000\000\t$\000\000\001\001\000\000\005t\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\004\159\000\000\000\000\000\000\000\000\002Y\t'\002d\000\000\000\000\002\000\000\003v\003(\002[\002\003)\r\138\000\000\000\000\000\000\001\000\000\000\000\001\r\148\t.\000\000\011c\t3\003(\000\000\000\000\003)\r\002\000\000\002X\000\000\002i\000\000\002\002\002\130\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\003'\000\002\000\000\000\000\002\000\000\000\000\002\002\000\000\004\002Y\005/\002d\002\000\000\000\000\000\000\000\000\000\000\002[\000\000\004\000\000\005n\0050\000\000\002\002\000\000\002\002\003(\000\000\002\003)\r\005o\004\000\000\011\128\000\000\000\000\000\000\000\000\002i\002_\000\000\000\000\002\142\004\159\0056\0059\011\129\002\003'\000\002\003v\000\000\004\000\000\t\005q\005u\000\000\000\000\004\159\000\000\000\000\000\000\003&\003'\000\000\000\t\000\000\000\000\000\000\011\130\011\131\000\000\000\000\005t\000\000\000\000\000\000\000\000\003(\000\000\000\000\003)\r\000\000\000\000\000\000\000\000\000\000\000\000\005t\000\000\n\000\n\001\003'\000\003(\002_\000\000\003)\014\003\000\000\000\000\000\000\000\000\004\000\000\005/\000\000\000\000\000\000\000\000\003&\004\004\159\005n\002b\000\000\000\000\000\000\0050\000\000\004\002\157\005/\000\000\000\000\003(\005o\000\000\003)\0140\000\000\000\000\000\000\000\000\000\000\0050\000\000\000\000\000\000\000\000\002f\002^\000\000\002\157\0056\0059\000\000\000\000\000\000\002\158\000\000\002\005q\005u\000\000\000\000\000\000\000\000\002\000\000\002\157\0056\0059\000\000\003&\000\000\000\000\002m\004\159\000\000\000\000\002\158\005t\002\002b\000\000\004\000\000\005/\000\000\002\003&\000\000\002\002\157\004\159\000\000\002\002\158\000\000\002\0050\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002f\002^\000\000\002\157\000\000\002\000\000\000\000\000\000\002\000\000\000\000\002\158\000\000\002\002\157\004\159\0056\0059\000\000\000\000\002\002\000\000\000\000\000\000\0033\002m\000\000\000\000\000\000\002\158\004\002\005/\000\000\000\000\003&\000\000\000\000\002\000\000\000\000\002\158\002\002\002\0050\000\000\004\003H\005/\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0050\002\002\000\000\000\000\004\157\000\000\002\157\000\000\0056\0059\000\000\000\000\002\000\000\000\000\004\006\015\005/\002\000\000\000\000\000\000\000\000\000\000\000\000\0056\0059\000\000\003&\000\000\0050\000\000\000\000\000\000\002\158\000\000\002\002\157\000\000\000\000\000\000\000\000\002\002\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\000\000\0056\0059\002\000\000\000\000\002\000\000\000\000\000\000\002\158\000\000\002\002\000\000\000\000\000\000\006\027\002\002\000\000\003&\000\000\000\000\000\000\002\002\158\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\002\157\007k\000\000\000\000\002\002\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\007\000\000\002\000\000\002\002\002\157\000\000\000\000\000\000\002\002\158\000\000\002\002\000\000\002\157\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\002\157\000\000\002\002\000\000\002\000\000\002\002\158\000\000\002\000\000\000\000\000\000\000\000\002\000\000\002\002\158\002\002\002\002\011\"\000\000\000\000\000\000\002\002\158\002\002\002\000\000\002\002\000\000\000\000\002\002X\000\000\000\000\000\000\002\000\000\000\000\000\000\012\025\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\r\000\000\000\000\000\000\002\000\000\003\022\002\000\000\000\000\002Y\000\000\002d\000\000\000\000\000\000\000\000\000\000\000\000\002[\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\024\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000\000\000\002\000\000\000\000\000\000\002\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002_\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002b\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002m")) + ((16, "\004\tV\000E\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000W\026\000\000L\000\023\002\138\000\132\006H\000\000\000\000\000\000\011,\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\005&6>\000\000\000\000;z\001 \000\000\000\000\000\000\000\000\000\000\022\138\0052I\000\000\0017\000\000\000\000\000\000\127\135\135\003\028\000\000\023\140\000\000\000\000\000\000\011,\000\000(\bF\003\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\007\030\000*\002\000\000\000\000\000\000\000\000\021\000\000\r \003\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\000\000\005\000\001\000\000\0008\001\\\000@\000\000\000\000\000\000\000\000\000\000\000\000w\000\000\001\000\000\000\000\000\152\000\000\000\000\000\000\000\000\000\000\001t\000\000\000\000\000\000\000\000\000\000\002.\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\003\004n\000\000\000\000\000\000\000\028\029$\000\000\000$\000\000\004\005\012N\128\003\000\000\006\b\000\153\000\000\000\000\000\000\004l\0003\000\000\000\000\000\000\000\000\000\000\000wv\000\000\024|\000\t\006\b\005\158\006V;\001\012\005d\000\000M\027X\000\000*\144\007P\006\132\006^\027\132\001\006&\000\000\000\000\000\000\000\000\n\150\007\006`(\000\000\000\000\007V\000\000*\027\030<\007a\000\000\000\000\000\000\000\000\0068\000\000\000\000\000\000\000\000\136F\006\000I T\000\000\023\140\000\000\000\000\000\000\000\000\007\000\000\bJ\007\000\000\000\000\000\000\000\000\000\000\000\004*\t\000\000\000\000\000\000w\005\nnS*\002\000\000\000;\000\000+&\t\144\n\n(\n\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000w\006P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rP\000\000\001\000\000\000\000\019\000\000\000\000\000\000\011x\000\000\000\000\000\000\000\000\012\000\000+\158\000\000\000\000\000\000,\b\000\000\000\000\000\000,\130\000\000\rl\002\158\000\000\000\000\000\000\000\000\r\000\012\000\000\000\000\000\000\000\000\000\000\001B\014r\000\000\000\000\000\000\000\000\014\000\000\000\0009\r\r\000\000\000\011\006\b\000\000\019\000\000\000\000xH\000\000\015D\000\000\000\000\000\000\000\000\015\016\022QB\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\000\015T\016&\002\000\000\000\000\000\000\000\000>6\000\000\000\000\000\000\000_\000\000@\000\000\000\000\000\000\000\000\000\006\000\000\017\138x\152\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\007\132\000o\000\000\000\000\000\000\017\012\000\000\000\000\000\000\017\000\000\000\000\000\000,\018\014\019X\018\020\000\000\000\000\000\000\000\000%X\000\000\000\000\000\000,\000\000\000\000\004B\000\000\003\152\021\132\000\000\000\000\000\000\000\000\014\021\000\000\000\000\000\000\000\000\023`\000\000\000\000\000\000\024Z\000\000\000\000\017X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021z\000\000\000\000\133\000\000\000\000\000\000\023\144\000\000\000\000\000\000\000\000\000\000\026F\000\000\000\000\000\000x\000\000\000\000\000\000\027\000- \136P\000\000\000\000\000\000\000\000\025\000% \156\000\000\000\000-0\028\026\bP\005\146\136Z\000\000\000\000\000\000\000\000\003D\136r\137\018\b\b\000\000\024T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\th\006\028\021`\000\000\000\000\000\000\000\000\001y\030\000\000\026L\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001f\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\026\028\004\014\000\137\000\000y@\000\000\000\000\000\000\004^\000\000\000\000\000\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\007\000\000\000\000\000\000\bj\000\000\000\000\b\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\027,\000\000\000\000\000\000\000\000B\001\003\001T\026p\005\024\027\004\000\000\000\000\000\000\000\000\000\000\005\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\024\132\000\000\0042\000\000\000\000\012\136\000\000\028\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000c\156\000\000\000\151\000\000eZ\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\000\000\029&eZg\024\029N\000\000\000\000\002\\\000\000\000\000\000\000\005\001\000\000\000\000\000\000y\152\000\000\000\000\000\000\000\000\000\000\029V:\012\028\134\011\028\148\000\000\000\000\000\000\000\000\000\000\007\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\132!*\000\000\027\150\000\000\000\000'<\000\000\030\"\000\000\001\000\000\000\000y\000\000h\000\000\029\128\000\000\000\000\029\000\000\000\151j\148\000\000\000\000\000\000#x\000\000\000\000\000\000\004L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\154\000\000\000\000F4\000\000\000\000%\158\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\029\000\000\000\000\000\000\000\000\030h\000\000\000\000\000\000\000\000\004\"\000\000\000\000\000\000\000\000\000\000\000\0005\024\000\000A\000\000\000\000\000\000\000\000\000\000O\000\000WJ\000\000\000\000\000\000\000\000\000\000\000\000-\000\000 \137@\029\012\000I\000\000\000\000\000\000\000\000\000\000\000\000\005\137\000\000\000\000\000\000\000\000-\tx\000\000lR\000\000.\022\t\b\137\005\000\000\000\000\000\000\004v\000\000\000\000\000\000!\130\000\000\004\136\000\000\000\000\030\006\028\000\000\n\020\t<-\030\018\0226\000\000\030\\\nD/\022\nl\000\000n\016\000\000/\154\t\158\b\000\000\000\000\000\000/\000\0000\002\138\026\0050\014\011T\000\000\000\0000j0\130\1380\003D\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\030\n\030\020!\0306\029~\000\000z\020\000\000t\0306z@\000\000\000\000\000\0000\00501d\003D1\000\000\030\024d\r\136\t\148\030`\029\000\000\000\000\030P\000\000\029z\td\015:\030B\t\029\0056\000\000\000\000\012~28\0022%\000\000\030z\000\000\000\000\000\000\030\158\000\000\000\000\000\000\000\000\002*t\000\0002L\006\b\003\148\000\000*\004X\000\000\bR\000\000\nN\000\000\n\n\000\000\011\000\000\000\000\016\006\000\000\000\000\016\020\000\000\0164\000\000\017\014\000\000\000\000\018\146\000\000\019\024\000\000\000\000\020|\000\000\000\000\020\000\000\020\000\000\021\\\000\000\006P\022B\000\000\023H\000\000\006\b\023\000\000*\024\018\000\000\024\000\000\025\000\000\016L\026^\000\000\027\022\000\000\000\000\027\024\000\000\000\000\027\134\000\000\028$\000\000\028\000\000\000\000\028\000\000\030d\000\000\000\000\030\152\000\000\000\000\030\000\000\030\000\000\031:\000\000\0009V\142\000\000zl\000\000\030|\000\000\0316\029\000n\030(\012\148\0044\005\000\000\031<\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\000\000\003\128\000\000\000\000\000\000\000\000\000\000\004N\000\000\000\000\005B\0022\b\000\000\000\000\006$\030\000\000\000\000\000\000\022B\000\000\000\000\007\006\000\000\b\004\030\000\000\000\000\000\000\n\000\000\000\000\030F\012\148\030J\000\000\000\000\000\000\029\000\000\000U\031\146\000\000 (\000\000\000\000 |\000\000\000\000 \000\000 \000\000 \000\000\007\136\030\n\000S\000\000\000\000\b\156\030\014\001\144\000\000\t\000\000\015J\000\000\000\000\004\138\015\030\016\015\000\000\019\030,\016\158\000\000\0180\000\000\000\000\018X\000\000\000\000\000\000\000\000\000\000\000\000\0312\030\000\000\000\000\030H\r4\018P\031\000\000\000\000z\144\000\000\n~\007\"o\000\0002\000\000\031\024\014\n\000\000\000\000\000\000\000\001<3 \000\000\000\000]*\138F\000\000\138T\000\000\0043\136\000\000\000\000w\138x\000\000\000\000\000\000\000\000\000\000\000\000\031\025d\015\000\bF\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030`\000\030\000\000\0244\003\000\000\000\025&\024\031.\n\028\030\000@\012\007tJ\000\000z\000\000\031@\000\000\031\001\\\030\012\000\000\000\000\017@\000\000 \000\000\000\000\000\000\000\000\000\000\000\030\140\006j!\0002\000\000\000\000\031\144z\000\000\000\000\000\000\000\000\000\000!^\000\000\000\000!|\000\000\000\000!\000\000\"\002\000\000\"R\000\000\020\030\015\000\000\000\000\021,\030\018\000\000\022J\000\000\022\000\000\000\000\019F\021\150\030\022\000\000\022Z\030\0230\000\000\023b\000\000\000\000\023\156\000\000\000\000\000\000\000\000\030\rx\029\022\015\000\000\000\000\000\000\017,\000\000\000\017.\000\015\000\000-\154 B\000\000{@\000\000\011\016\007z\021\000\000\000\0004\"\000\000\000\000\000\0004^\000\0004\158\000\000\nr\000\000\000\000\000\0004\000\0005\018\000\0005\000\0006J\000\0006\000\0006\000\0007\006\000\0007\024\000\0007`\000\0007\000\0008f\000\0008\000\0008\000\0009T\000\0009\000\0009\000\000:Z\000\000:\142;\014\000\000\000\000;\030\000\000;\142\000\000;\000\000<\\\000\0004\000\000>\150\000\000>\000\000?\n\000\000?\022\000\000?J\000\000?\000\000@\002\000\000@f\000\000@\000\000A\000\000\000A\000\000A\000\000B@\000\000BP\000\000B\000\000C\006\000\000C\022C\000\000\000\000D\014\000\000D\000\000D\000\000E\028\000\000{\000\000{\031|&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000E.\000\000\n\031\000\000\r\132\n5\031\000\031E\000\000\000\000\000\0008x\031\br\000\000\000\000\031R4\000\000\000\000\031\0124\000\000\000\000\031\000\000\031\012:\000\000t\031\031\000\000\000\000|R\000\000F\018\000\000\000\000|\144\000\000F|\000\000\000\000F\000\000\000\000\000\000|\000\000G4\000\000\000\000GJ\000\000\000\000\000\000\011J\007\138\003DG`\000\000\000\000\000\000\b4G\000\000\000\000\000\000H\022\000\000\000\000\000\000\000\000\000\000\017\000H6\000\000\000\000\t\150\000\000\000\000\n\000\000\000\000\011\130\000\000\000\000\n&\011\t\006\138\003DH\000\000\000\000\000\000\r`\012>q\140 \026I\020\000\000\000\000In\000\000\031l\031\000\000\000\000\0150\000\000\142\000\000I\154\031\012\000\000\000\000I\000\000\139\134\003D \000\000}\n\000\000\r\030 \000\000\000\000\000\000\000\0056!\000\004^\000\000\000\000\000\000!^\012\000\000\000\000!|\rL\000\000\000\000!\r\000\000\"\002\014\000\000\"R\0152\000\000\000\000\000\000\000\000\017\000\000JL\000\000@\000\000J\128\000\000\000\000\011\000\000\014\\\000\000\031\154\t\026\000\000\000\000 \031t\000\000\000\000\000\000 H\t\000\000\000\000\000\000\014\144\r\030\014}&\000\000\000\000\000\000\000\000\005\bF \"\000\000!\002\000\000\000\000\000\000\000\000}H\000\000\000\000!\b\000\000\000\000K\018\000\000!\014\000\000\000\000K4\000\000\000\129\000\000\015t\017\000\000\000\000~\030\000\000\000\000\000\000\000\000\000\000\b\rh\000\000\000\000\000\000~\\\000\000!\016\000\000\000\000K`\031\140\n\000\000\000\000~p\000\000\000\000!\024\000\000\000\000K\158\000\000\nl\000\000\000\000\000\000\000\000\000\000\031K n\000\000\000\000\000\000\000\000\000\000\000\000\011P\000\000uD\000\000~\000\000\000\000\000\000\031\014\140\000\000!(\000\000\000\000Ln\000\000!*\000\000\000\000L\000\000\011\152\000\000ub\000\000\000\000 \132\003`\000\000\000\000\019\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \012L\130\000\000\000\000\000\000\000\000\000\000\014\136\000\000u\154\000\000~\000\000\000\000\000\000\031\014\154\000\000!T\000\000\000\000L\000\000!d\000\000\000\000MT\000\000\016,\000\000u\000\000\000\000 \006V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0288\000\000\000\000\000\000\tR\016\"\000\000\000\000\016p\000\000\000\000\014\000\000\000\000\006\152\027<\017\128\002\012\000\000\000\000\000\000\b\000\000\031\001\015 \152\000\000\000\000\127\020\000\000\000\000\000\000 \000\000\000\000\000\000\127@\000\000\000\000\000\000!dM\000\000\000\000M\000\000\000\000\000\000\012^\024R\005(\017!,3\012,\127r \rN@\000\000\000\000\000\000\128h!\000\017d\000\000 \000\000!\b\018:\000\000 \000\000!\022\019(\000\000v\020 \000\000\127\000\000NX\000\000\000\000\128N\000\000N\000\000\000\000N\000\000\000\000\000\000\128Z\000\000O\134\000\000\000\000O\000\000\000\000\139\003D!0\026\b\018\000\000\000\000\000\000\000\000\129\n\000\000\028L\014\132\000\000\000\000\000\000\028\000\000\129\022\000\000\028\000\000!\014\000\000\000\000\031\000\000!\018\000\000\000\000 |\000\000!$\000\000\000\000\000\000v~\000\000\000\000\000\000\015\158\016t\000\000\018!b7\000\000\139\003D!J#!8\000\000v\000\000\000\000\018*\000\000\000\000\000\000P\026\000\000\005Pj!\022\000\000\128\019\000\000\000\000\019\000\000\000\000\000\000!D\000\015\158\000\000\0188\000\000\000\000\000\000\000\000\142\000\000\004\130\000\000!H\000\000\000\000\000\000\016\002\144Cz\011\000\000G\016N\000\000\000\000\000\000\000\000\000\000\006\014\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\017\128\000\000\000\000\000\000\019\020\000\000\000\000\000\000\140d\005\018P\000\000\000\000\000\000Qf\000\000\000\000\000\000\000\000\000\000!f$\0212\019T\000\000\000\000\000\000\000\000\129\000\000&P\017\000\000\000\000\000\000&\000\000\130<\000\000'\142\000\000!F\000\000\000\000'\000\000!H\000\000\000\000)H\000\000!Z\000\000\000\000\000\000v\000\000\000\000\000\000\019\138\018H\000\000\140n\005!z)!h\000\000w\014\000\000\000\000\019\000\000\000\000\000\000P\158\000\000\017Pj!F\000\000\129\144\020<\000\000\021\014\000\000\000\000\000\000!p\002\019\138\000\000\020\000\000\000\000\000\000\000\000\142\000\000\tn\000\000!\128\000\000\000\000\000\000!R\000\000\000\000\0192\000\000\000\000-T\000\000\000\000\000\000\000\000\000\000\130~\018\000\000!\148\000\000\019\000\000!\156\000\000\020\128\130\136\021\000\000\130\022\014\000\000!\158\000\000\022\128\000\000!\000\000\023\156\000\000\000\000!\000\000\024\014\000\000\000\000\005\154\020\000\000\000\000\021\144\000\000\000\000\006\"\000\000Q\154\000\000\140|\003D\000\000Q\000\000RJ\000\000R|\000\000R\000\000SX\000\000S\000\000T\028\000\000T\144\000\000T\000\000T\000\000UR\000\000U\000\000V8\000\000Vr\000\000V\000\000W\028\000\000W(\000\000W\146\000\000X\018Xv\000\000\000\000X\000\000Y2\000\000Yn\000\000Y\000\000\000\000Y\000\000\000\000\n\000\000\000\000\000\000\003DZ*\000\000\000\000Z\142\000\000\022&Z\000\000\000\000[\002\000\000[\000\000\000\000[\000\000\000\000\\\\\000\000\000\000\011L\000\000\022T\019&\000\000\019\007v\000\000\019\000\000\031\150\000\000\000\000\000\000\000\000\017\136\022v!,\000\000 \130!\000\000\130\000\000!~\000\000\0238\000\000\000\000\023J\000\000\000\000\000\000\"\128\000\000\000\000\031\000\000\000\000#h\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\t\002\000\000\000\000\000\000\000!\000\"\004\002\b\017z\000\000\000\000\000\000\000\000\000\000\023\023!r\000\000!\b\131&!\000\000\131,\000\000!\000\000\025,\000\000\004\000\000\000\000\000\000\000\000\000\000\007`\000\000\000\000\000\000\b\024\000\000\000\000\000\000\025B\000\000\000\000\000\000\"\000\000\000\000\000\000\000\000#z\000\000\000\000(\000\000\000\000\000\000\000\021\019\022\019-\b\025\000\000\000\000\000\000\000\000\000\000\rF\000\140\000\000\014\000\000\000\000\000\000\015\000\000\000\000\012N\000\000\000\000&V\"\004\nD\000\000\000\000!&\000\000\139\006 \012F\000\000\000\000\t\016T\018j\000\000\018\000\000\021^\000\000\000\000\007x\t\017N\011\146\000\000\r\006\017\134\014*\000\000\015n\000\000\000\000\019\022\000\000\000\000\000\000\"@!\000\000\000\000\"0!Z\026\006\000\000\000\000\020\150\"rU\000\000\022\019\"\000\000\131\000\000\023<\000\000\018\004\000\000\023\022\015\000\000\006\000\000\000\000\000\000\019\132\000\000\000\000\020\012\134\000\000\000\000\\\000\000\000\000\021XZ\022\000\000\\\150\023F\000\000\000\000\000\000\r4\000\000\000\000\000\000\011\142\000\000\000\000\000\000\019\000\000-\000\000\000\000\000\000\000\000\019\014f/\000\000#\b\000\000\131\000\000\025J\"D\000\000\000\000\000\000!\128\000\000\023\024J\000\000!\023`\030(\000\000\000\000\000\000\018H\024\000\000\000\000\025D\000\000\000\000\019(\000\000\000\000!\000\000\020d\000\000\003\140\025\000\000\000\000\000\025\n\000\000\000\000\007\000\000\000\000\000\0008N\000\000\000\000\000\000\000\000\002\".\000\000\000\000\024/\000\000\000\000\000\000\000\000\025&\004\156\000\000\025\000\000\000\000\000\000\026,\000\000\000\000\005v\000\000\000\000\006P\"j\014\000\000\000\000!\142\011\138\000\000\"\"<\000\000\000\000!\026\1400$\000\000\000\000\000\000#<\000\000\132:\000\0003\000\000#B\000\000\132p\000\000\025l\000\000!\000\000\025(\025\020|\000\000\t\000\000\000\000\012\"`\000\000\000\000\000\000\026\t\000\000\000\000\000\000\000\000\000\000\000\000\006P\000\000\000\000\000\000\000\000\000\000\000\0008\000\000#T\000\000\132\134\000\000\025\000\000!\000\000\026F\000\000\"$\000\000\0268\000\000\012d\026\142\000\000\000\000\026\000\000\000\000\014\b\000\000\000\000\000\000@r\000\000\000\000\000\000\000\000\020\020\"l\000\000\000\000\026<\128\000\000\000\000\000\000\000\000\027\n\n\000\000\027d\000\000\000\000\000\000\027t\000\000\000\000\015\000\000\000\000\022\"\015\138\000\000!\015H\000\000\000\000!\026\000\000#n\000\000\132\000\000>\000\000#v\000\000\133\026\000\000\026\012\000\000!\000\000\026\015\002\000\000\000\000\023<\"\142\000\000\000\000\000\000\027v\017l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000\000\003\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\"\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\000\025\026\000\000\000\000\000\000\000\029n\000\000\000\000\000\000\"\136&`\"\000\000#n\000\000\"\"\158\000\000\000\000\000\000\000\000\019\"\000\000\000\000\000\000\003\000\000\000&\000\000\0066\"^\\\"d\"\026\000\000]8\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\027\028\"r]\"t#\004\000\000#\014\000\000]#\018\027f\"\136^~\"\146#$\000\000#.\000\000\000\000\000\000\000\000\000\000\nr\000\000\135-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\150\n\019\000\000\000\000\000\000\015L\000\000\000\000\000\000\000\000\000\000\000\000\030\016\000\000\000\000\000\000\"\000\000\000\000\025\130#0\000\000\000\000\000\000\th\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\030\132\000\000\000\000\000\000#\022\000\000\000\000\026p#2\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\027\136_\014\000\000\000\000_v\000\000_\134\000\000\000\000`<\000\000\000\000`L\000\000\000\000\000\000\000\000\000\000`\000\000\027`\000\000\000\000a4\000\000aD\000\000\000\000a\000\000\000\000b\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000br\000\000\000\000\000\000\000\000\000\000\133`\000\000#6\000\000\000\000#H\000\000\000\000\000\000b\138\000\000R\000\000b\000\000\"Jc\002\000\000\140\146\005\000\000\000\000\000\000\133#l\020:\000\000#X\000\000#p\021Z\000\000#^\000\000#~\025\n\000\000\142#\140\000\000c\000\000\"#*\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000#~\000\000\000\000c\000\000\"|d0\000\000\140\158\003D\000\000\000\000\000\000#\026dH\000\000\000\000\000\000\133#\026\000\000#\142\000\000#\027\026\000\000#\000\000#\027\028\000\000#\028\031\000\000\000\000\000\000\000\000\031>\000\000\000\000\000\000\000\000\"\000%\000\000\000\000\000\000\000\000\000\000\141\026\000\000\000\000d\000\000\000\000\000\000\027d\000\000\000\000\000\000ev\000\000\000\000\000\000\000\000\000\000\030\025\025\000\015\000\000\000\000\000\000\000\000\000\000\000\000\031H\000\000\000\000\000\000#\138\000\000\000\000\027#\000\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000\014\018\000\000\000\000\000\000\000\000e\134\000\000\000\000\000\000\000\000\000\000\000\000#'&\000\000\000\000\000\000\000\000\003D\000\000\000\000e\000\000\000\000\000\000f\006#\000\000\000\000\000\000\000\000\n\020\031\146\027.\000\000\000\000 (\027\000\000\000\000 |\027\000\000\000\000 \028l\000\000 \028r\000\000 \028\134\000\000\000\000\000\000\000\000'#\0066#fn\000\000\000\000\000\000\000\000#$j\000\000\000\000\000\000\000\000\004\004\000\000\000\000\r\000\000\000\000\000\000$\024#\000\000\015.\000\000\000\000\021X\000\000\015j\000\000\000\000\020\150\021\000\000$\016\015\150\000\000\022L\000\000$\022\017(\000\000$\022\017T\000\000( \000\000\000\000\027\156\027D\000Mn\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\015\158\000\000\030\000\000(z\000\000\000\000f~\000\000g4\000\000\000\000\000\000\000\000\000\000$\016\000\000\000\000\000\000\000\000\000\000\000\000gD\000\000\000\000\000\000#\143($:\000\000\017\144\017\000\000\018.\000\000\000\000\000\000$B#\000\000\019\138\000\000\000\000\022\156\000\000\019\000\000\000\000$,\019\000\000\022\148\000\000$0\020\144\000\000$0\021\000\000(\132\000\000\000\000\000\000#\154#\000\000\000\000\028ng\000\000\000\000\000\000g\000\000\000\000\000\000\000\000\000\000\031\026l\030|\000\016\000\000\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000#\156\000\000\000\000\027$6\000\000\000\000\000\000\023~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$<\000\000\000\000\000\000\000\000\000\000\000\000###\000\000\000\000\000\000\000\000\000\000\000\000\135\141>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000###\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\"##\000\000\000\000\000\000\000\000\000\000$\n\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000$\140\000\000\000\000\000\000\000\000\"\000\000C\154\007\132#\020\000\000,#B\000\000#L\000\000#X\000\000\028 $<\000\000$\128\000\000\000\000%\018\000\000\000\000%6\000\000%@\000\000%\128\000\000\000\000%\000\000%\000\000\000\000&\024\000\000\000\000&X\000\000&\140\000\000&\146\000\000\017X&\000\000'\030\000\000\007\132(\024\000\000,(Z\000\000(~\000\000(\000\000\028r(\000\000)\b\000\000\000\000)~\000\000\000\000)\000\000)\000\000)\000\000\000\000*|\000\000+t\000\000\000\000+\156\000\000\000\000+\000\000+\000\000,\006\000\000\0128\023\154\000\000\000\000\000\000\016>\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\n\000\011:\000\000\000\000\r,$\142\000\000\000\000\000\000&\000\000\000\000\020\000\000\rV$\148\000\000\000\000\000\000\022\146\000\000\000\000\000\000#\001z\000\000\000\000\000\000\000\000\000\018j\000\000\000\000\000\000\000\000\000\000h,\000\000h<\000\000\000\000\000\000\000\000\t\150\000\000\n\000\000\000\000\019\000\000O\030\000\000\000\000\000\000\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003D\005\n\000\000\014f\000\000\000\000\000\000\000\000\000\000$J$\012#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$R$\024#\000\000\003D)\b$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\004\005\000\000\000\000$\000\000\000\000\000\000\141\014\003D\011\000\000\000\000\000\000\000\000\000\000\002F\000\000\000\000\000\000wb\000\000\000\000\000\000(\000\000\000\000\000\000 p\000\000\000\000\000\000\001\026\021\1412\005$\020t\000\000#\003\014\023D\024\018\000\000\000\000\016\023N\024 \000\000\024\000\000\025D\000\000\000\000\024\018\023\025\000\000\019@\023\026&\000\000\026B\000\000\000\000\027&\000\000\000\000\000\000\028t~\000\000\000\000\000\000$d$,#\000\000\028\129\000\000$r$2#\000\000#\000d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$$\n\028\000\000\023\140\000\000\000\000h\000\000i\002\000\000\000\000\000\000ij\000\000\017\141\005\030\000\029\006\028\141\005i\130\000\000\0294\028$N#*\000\000\029:\000\000\143\158\000\000i#i\000\000\142`\005%\144\000\000\134\018\000\000\026\020\000\000\029\000\000j\000\000d\156\000\000j\000\000\000\000\027\000\000\028)\146\028##\000\000\000\000-\000\000\000\000\000\000\134\029\000\000\000$\000\000\0298\000\000$\000\000\029`\135\030\029\000\000\1358\029\000\000$\000\000\029\000\000$\000\000\029\000\000\000\000$\000\000\029\000\000\000\000\b\000\027\000\000\000\000\027\000\000\000\000\n\004\000\000k(\000\000\142p\005\000\000k@\000\000k\000\000k\000\000ln\000\000l~\000\000l\000\000l\000\000mf\000\000mv\000\000n,\000\000n<\000\000n\000\000n\000\000o$\000\000o4\000\000o\000\000o\000\000pb\000\000pzp\000\000\000\000p\000\000q\000\000q\000\000r \000\000\000\000\000\000\000\000\000\000r8\000\000\000\000\000\000\000\000\000\000\005r\000\000\000\000r\000\000\029Rsf\000\000\000\000sv\000\000s\000\000\000\000s\000\000\000\000t^\000\000\000\000\024\000\000\000\000\000\0248\019\000\000\024\000\000\000\000\000\000\0252\000\000\000\000\020\000\000\000\000*$\021\000\000$\024\r\018\000\000\000\000%\016$@\029\030\000\000\018 \148\000%\000\000\135\b\000\000\030z\000\000\029\0182\000\000\000\000\000\000\026\022\000\000\000\000\027*\021\024\000\000\000\000tn\000\000\000\000\rr\000\000\000\000\000\000\000\000\002\142\000\000\000\000\000\000\003 \000\000\000\000\004\022\000\000\000\000\000\000\000\000"), (16, "\0027\0028\005\024\000\t\t\001s\000\000\002T\004\005\028\t'\003i\t \000\014M\004\014R\002\001W\003\tK\002\001\000\012\001\t \012\t\012C\n\003\r\014\146\0029\tK\004\002:\003\0142\t\014h\000\002\143\012\014~\000;\004\128\000\000\014\129\014\132\r\001\005\016\001\001\001\000\t'\014\001+\001\000\000\004\004\152\004\153\004\153\007\031\000\003\000\000\000\000\003j\004Z\001\000\001t\004\\\007\014g\012\t(\t)\012\001|\n\011\000\014\135\000\0143\012D\002\146\002\149\001Z\012\tQ\001\000\002\155\006\143\006\144\001\0027\0028\001\001_\001\001\r\tQ\014\138\001\128\011\001\tR\001a\000\t\012\0038\002o\001\134\001\001\003\007\001a\000\tR\012\t(\t)\012\001\139\n\011\r\006\143\006\144\0029\000B\005\030\002:\003\007\"\001\001\000\0039\012\012\b\006\t\137\r\t\012\012\t\001h\004\000\001\141\006U\000\000\004\t\137\001\012\t@\t\000J\000\007#\0007\tC\007(\t\151\011>\002\014\000\004\007)\005\012\b\001\007\001\012\001\136\000>\012\001s\001h\000\012\005\001|\007*\002^\012\004]\012\001d\005\001\000\000\002\002\002\001\006T\b\002\001\001h\t@\002\004\003k\001h\001h\tC\005\005\012\b\000\003l\001+\tD\015\\\004^\007\001h\001h\002\b\r\005\004`\002\005\015\141\001\t\155\005\015\142\015\143\000\015\145\015\147\002\012\t#\001\001\015\149\015\150\b\006\001\001\001\005\003m\001\019\014\003n\015\151\001t\001\002\000\002\001\137\000W\012\001|\t\tD\002\t \002\011l\003D\tH\011>\011n\000N\tK\004\002\005\012\b\001\006T\t\t\002\002\014f\002\002\t\133\001\143\005\004\157\tL\004\153\012\006U\002\012\000\001\134\n4\bg\003:\015\b\001\015\003a\000\b\002\006T\bh\001\146\r\149\r{\015\002\002\143\bi\005\005\001h\000\003l\001+\015\015\\\t\156\n5\014\155\n8\n9\b\r\b\002\001h\000\000\015\141\004\001\141\005\000W\015\001i\015\145\015\001\012\b\134\002\001h\015\149\015\150\000\tQ\001\130\b\004\005\003m\003\002\003n\015\151\002\t(\t)\002\001\019\003\002\154\002\149\007\027\tR\b\142\000\n:\002\155\nQ\000Z\001\000\007\031\000\006\143\006\144\001\nR\015\000:\b\016\b\150\000A\b\016\002\002\001\003l\001+\015\015\\\t\004\0007\005c\015\015\003b\002i\b\137\t\137\015\141\015\001h\015\tV\015\005d\015\145\015\bH\002\143\002\015\b\019\015\149\015\150\015\002\001\022\r{\001\131\003m\011;\003\003n\015\151\b\138\bI\002\0146\001h\001\136\003\005j\005m\004\015\002l\001\001|\001\001h\006=\bM\002\002\tC\bO\007\"\b\149\b\155\b\153\002w\000\003k\002\002\000\002\b\136\003\001h\002\002\149\b\154\n>\n\130\014\157\003#\002\155\001s\015\002\000\015\001\148\015\007#\tW\tX\007(\b\024\tY\n\015\015\b\016\007_\002\001h\002\003\000\002w\000\007`\003$\002\004\006U\005c\015\015\007*\n?\007a\000W\n\131\004\003l\001+\015\015\\\005d\001\141\002\002\007\005\002\029\003;\n\132\002{\015\015\141\002\012\003\012\015\004Z\015\145\015\001h\004\\\003\003\000\015\149\015\150\n.\005j\005m\t\144\015\003m\001t\002\003n\015\151\b\137\000\011>\002r\001|\002\000\002\015\002\b\016\000\003k\002{\002\t\127\003\003\137\001+\001h\001h\t\130\004\002s\005c\015\015\001h\b\138\015\002\001\002\0027\0028\006>\b\005d\001h\002\030\001\134\014\014\002u\003A\001\015\b\015\003L\015\b\140\001\002\t\000\t\002\014\151\000W\007\025\015\n1\t\005\t\006\002s\005j\005m\001h\015\0029\0009\004R\002:\t\007\000h\004S\003\t\131\0027\0028\001\141\b\001\136\004\004Z\003\003k\012\004\\\003\001|\002\b\001h\r\003\134\012\019\002\b\n\t\000\t\002\n\136\000\015\005\007\026\t\005\t\006\004_\002\002\143\003\000\0029\b\000\003%\002:\t\007\004\002\003\002\t\027\002\t\158\007\027\002\001\nJ\003\134\003\002\002\015\t\159\b\016\0147\002\002\004^\012\021\012\016\001h\012\012\b\011\004`\004\001h\005c\015\015\000\000W\001h\r\n2\003\0027\0028\014\b\005d\003 \002\149\002\001\141\t\027\000Q\t\158\002\155\015\b\003\000]\000r\002\002\t\159\t\000\t\002\n\136\007\004\000\000\t\005\t\006\003\005j\005m\007\015\0029\nN\000\002:\t\007\007\014\001h\003\tj\002\002\b\001\t\002\t\003)\003k\004p\004e\002\000\r\002\001h\0026\003\004\000J\005\t\t\006}\014\153\015\007\000\000\002\001h\b\002\000\005\004W\nJ\000\001h\b@\000\004^\0027\0028\001h\t\027\000\t\158\004`\t\001^\t\b\006\011e\b\b\r\t\159\007\012\001W\012\005\005\004\t\005\t\t\000\b\014\007\027\b\016\0027\0028\001h\b\0071\0029\005\003\002:\014y\005\001h\004S\006U\b\b\001\nO\007\027\002\006U\0072\t\000\t\002\n\136\001\158\002\007\t\t\005\t\006\nP\006\143\006\144\005\005\0029\t\000J\002:\t\007\007\028\000\001\b\b\002\007\002\002\002\006\145\007D\b\001\136\002\143\b\005\004{\t\r\140\t\001|\007\007\027\nx\000J\007\001Z\b\r\b\028\b\026\001\004\t\005\t\t\0126\0072\001_\001`\0027\0028\b\027\b\002\143\0058\005\005/\001\004\t\027\007d\t\158\004b\003\b\001h\004m\012\001a\000\t\159\t\000\t\002\n\136\002\0035\002\149\007\t\005\t\006\bA\007F\002\155\005\005\0029\t\002\002:\t\007\b\001h\b\003\0027\0028\nO\b\006T\001\016\001\002\002\000\005\001\141\001\026\011\137\b\001h\001\021\007\027\007\0110\0128\t\000\t\002\n\136\b\006\143\006\144\t\t\005\t\006\001H\001)\004\007I\005\0029\007\004Z\002:\t\007\n\129\004\\\t\007F\t\027\001h\t\158\005\t\004V\t\001d\007\001h\003k\t\159\007\n\139\0027\0028\007\b\004\0059\005\t\t\t\004\001\014T\001\002\b\b\027\005\005\004\005\003\t\000\t\002\n\136\006U\001h\001h\t#\t\005\t\006\t\027\007G\t\158\001\158\b\0029\002\133\005\002:\t\007\t\t\159\006\001e\003q\001+\005\005\004\150\t\001j\001h\000\000\t \001/\t$\n\137\tH\005H\tI\001h\tK\002\003\006U\004S\005\rm\t\tp\t\006U\001#\007\027\b\002l\002\001\003r\tL\014]\004\004\t\005\t\t\t\027\n.\t\158\002w\000\002\001h\002\004\005\n\005\t\159\001\005\011\002\b\001h\t\004u\002\015R\002\001\136\0019\004\t\004\t\002\002\001|\0025\002\001?\003\002\002\005\005\004\t\005\t\t\003\001<\002\000J\004^\003H\002\001h\tQ\003\005\004`\000\000\005\002\004\002\006\005T\000\007\027\004w\006\002\002\143\tR\n3\002{\006\tt\t\001?\001;\004\001\000\005\005\t\t\t\003\002\006\002\007\004\001\014\003\012\015U\0027\0028\003}\b\002\004\004\155\005\t\t\005\006U\007\005\001\141\b\t\137\001h\007\027\002\003K\005\t\000\t\002\014\150\001h\002\006P\t\t\005\t\006\003N\0027\0028\002\b\0029\006<\003\002:\t\007\004p\007\023\001h\007\031\000\b\004[\005\005\004\t\011S\t\000\t\002\011\143\004\128\001\006U\002\t\005\t\006\011\133\004\130\003\011T\001h\0029\000J\005\002:\t\007\002?\004\n2\tN\007\027\tO\001h\011\002I\004\005\015\002\006\001h\t\001h\003w\t\027\006\t\158\011U\011V\015V\003\b\146\002\007T\006\001\t\159\006F\004\131\007\025\006\0027\0028\004\158\b\004\128\002\002\b\136\003k\006\n\012\011\005\016\t\011\142\b\t\027\007\"\t\158\003\002\002\t\000\t\002\t\004\128\003|\t\159\000\t\005\t\006\005\t\002\002\t\0029\000\b\147\002:\t\007\004\159\001D\004\153\n.\007\030\007#\001\002\007(\003\005\017\001\000\004t\004\007_\003l\001+\001h\003\000\002\003\143\007W\007c\007\027\004\000\t\t\t\t\007*\004\007a\000\nJ\005k\003\012\014\007\006T\004\015R\005\t\t\011>\003\006\t\027\004b\t\158\003m\001h\006U\003n\003\005\b\137\t\t\159\t\006U\003\b@\006T\003\152\006\030\0027\0028\005T\b\003\004\nw\005\t\t\001Q\004\000\001\b\003\005\005\b\138\t\005\t\000\t\002\t\004\0027\0028\006\143\006\144\t\005\t\006\011\004\000\005l\n\128\0029\006U\005\002:\t\007\000\b\149\001h\t\007\027\003\015W\005\005\007X\t\006\000\004Z\t\005\001h\004\\\006I\0029\006\143\006\144\002:\014`\t\001T\t\014%\005\000\003\004\006U\0027\0028\007\027\b\t\004\003\005\t\t\001h\004\t\t\001S\b\t\027\n\t\158\001h\001h\005\t\000\t\002\t\007Z\000\t\159\n2\t\005\t\006\001X\0027\0028\003\b\0029\006\000\002:\t\007\001\000\002\006U\001h\b\011\005\005\003\t\001h\t\000\t\002\014\149\006\nO\014%\001h\t\005\t\006\004\006K\005c\003\bA\0029\015V\005\002:\t\007\014c\002\003\002\007\027\005d\011 \011\ry\011\030\002\n\011\006\t\t\029\006\t\027\006+\t\158\006O\006\000\006\004\007\004\153\t\t\159\t\t\000\005j\005m\006!\003k\004|\003\001\006\0140\004\006\005\t\t\001\000\t\027\004\t\158\003\t\030\003k\003\002\005\006\000\t\159\005n\004Q\003k\003\004}\004\004^\005\003\001h\005p\006\004Q\004`\006\004X\014\023\000\b\019\001h\005\b#\003\005\005\002\t\002\004\b$\t\144\005\b\002\002\002\t\001h\006\006\b'\t\001h\t\014)\005\003\n\005\005\014\015\001p\007\027\002\014\017\004\001\005\t\t\t\t\t\005^\002\t\151\002\004\006\005\005\006\t\002\t\006\n\011>\006\006U\014\023\0027\0028\001h\b\006_\004\b\023\005\t\t\002\006-\t\151\006\b\000J\005\005\001V\t\005\t\000\t\006\006\003\006\001W\t\005\t\006\002\003l\001+\007\019\015\\\0029\002\005\002:\t\007\nY\005\001h\006v\007\027\015\141\001h\005\005\006\t\t\157\015\145\015\t\001x\003\002\002\015\149\015\150\b\0027\0028\007\n\003m\002\005\003n\015\151\006\"\006b\002\002\007\027\t\006\000\t\002\014\014\003\006\t\t\n|\006\015\t\027\006w\t\158\012\006W\007\001h\001\136\014\018\0029\003\002\t\159\002:\003\006'\001|\004\001Z\0149\012\012\nb\011\140\007\004\001]\002\001\132\001\136\001_\001`\015\005\015\003\005\001|\n?\014\019\007\t\147\001h\015\007\006\014\021\002\b*\001h\001a\000\014\"\001h\002\002\t\011\007\006\158\t\156\012\007\005\012\001h\002\004\006\001\138\004\001V\011\145\n\014,\012\002\t\144\004\t\030\001W\n4\001h\002\007\007\t\006\128\t\t\156\006\143\006\144\0074\001\141\003\000\002\012\012\006\003\004\006\005\t\t\004\b@\t\b#\n5\n\133\n8\n9\014\001\141\005\b)\015\t\144\b\016\n\006=\003\006\004\006\006U\b'\006*\005\001d\002\004\004\128\005c\015\015\004\t\004\nU\007J\006\005\005\004\t\005d\001h\012\001g\t\001s\015\001h\006\132\002\n:\004\nQ\001Z\005T\001\144\004\005\005\012\001h\n\134\0027\0028\007\027\001_\001`\005j\005m\004\015\005\nV\001e\t\012\003\000\002\001h\001\149\001j\001h\n4\003\n\001a\000\006\003k\001\153\014\012\0027\0028\006\001h\t\0029\005\005\002:\003\007\031\000\003\006\015\005T\012\012\n5\011\141\n8\n9\003\0027\0028\004\004\128\007\138\005\001t\012\001\155\002\t\007T\012\0029\001|\006\136\002:\003\t\150\006d\004\003\005\012\012\n\004\000\bA\012\001\011r\007m\012\014e\0029\012\n\130\002:\003\007\139\001\n:\007\nQ\012\012\012\001d\n\001\134\002\tV\nR\005\t\030\001h\005T\0058\004\005/\004\153\001\012\n\007\"\012\006\158\001m\n\135\003\000\002\001h\007Q\012\012\012\n\131\t\007Y\002\007O\002\011\148\012\001\000\012\001\141\002\n\132\014\t\144\007#\n\003k\007(\001e\012\003\007P\007n\001h\007+\001j\006\158\004\003\002\002\007\005\003\012\012`\006\139\006\006\004\000\012\007*\t\003\005.\000\005/\tW\tX\004\n\n\n\001h\004\001\005\012\006U\003\001\000\002w\000\n\130\t\003\007T\003\005\012\001\t\012\000\003\001\004\t\154\004\001\0059\003\001h\004\004\005\012\001h\001\000\003\012\002\t\007X\005\005\006\142\005\014\015\002\030\001h\012\014\017\n\131\004\003*\005\012\n\0046\b\019\004\007\t\030\n\005\n\132\007\031\000\005\0027\0028\012\012\005\005\004\001\001h\002{\rK\t\127\005\n\t\001h\001h\t\130\006\006\007\003\0027\0028\007\005\005\005\002\t\012\004\t\144\012\007\001h\0029\001\002\005\002:\003\007\004\005\003\t<\012\012\005\004\001\002\000\012\003l\001+\012\004\004\014\0029\b\022\004\002:\003\001h\000J\005\001\000\012\012\003\007\004\006\t\131\003\007\"\tV\003\000\002\003\003\001h\r\023\003\001h\001h\012\003\003m\012\n\003n\003\006\143\006\144\004\b\006\005T\r\025\r5\012\007S\001h\003\007#\003\006\014\020\007(\012\007X\t\012\005\011\b\014\007@\b\016\002\007\004\004\005R\005U\001\012\003\007d\004\004\b@\002\n\002\011\007*\b\001\003l\001+\n\001\014\019\001\r\027\001h\007V\r!\007\014\021\bk\003\001h\001h\002\012\000\tW\tX\r&\003\tY\t}\012\012\007\130\b\002\007\r\023\b\130\n4\001\002w\000\003m\006\000\003n\003\012\014\t\004\007\r\025\r\026\001\007\004\b\b\r\b\025\b\026\001\004\001h\005\012\n5\011\139\n8\n9\012\t=\t\b\027\014\015\007\n\005\014\017\004\004\012\007\t \004\n\005\005\012\003\001h\007n\tK\007\r\027\006\143\006\144\r!\004\004\005\r'\002\015\b\016\012\005\005\014=\r&\004\015R\002{\t\t\127\n:\004\nQ\005c\r*\t\130\007\143\n \006\006\143\006\144\nR\005\005\005\004\005d\004\007\012\r/\005T\005T\t\t\b\003\t\003\006+\005\001\001h\bN\000\005\005\014\003\006\002\016\007\006\012\007\139\005j\005m\002\019\b\132\b#\001\000\006\147\005\bF\001h\b\b.\tQ\007d\n\004\t\131\t\t\006\003k\b'\r'\015\b\016\003l\001+\r2\006\143\006\144\tR\0053\n#\005/\014\004\004\005p\005c\r*\006\006\000\001V\014\026\t\003\003l\001+\007\003\005d\001W\001V\r\023\r/\003k\n\130\007\003\003m\007\028\001W\003n\003\007\t\t\137\003\007\148\r\025\r \007\001\014\019\n \r\023\001h\005j\005m\001i\014\021\003m\003l\001+\003n\003\014\000J\t \005=\t!\r\025\r%\004\011\007\001\tK\n\131\003k\001\b?\006+\000W\003\007\139\r2\001h\001h\014X\r\027\n\132\r\023\r!\bv\007d\005p\015V\003m\001h\b\006\003n\003\001h\r&\003\n$\001h\r\025\r)\001Z\t\r\027\012\012\r!\001h\b\014\001]\b\016\001Z\t\001_\001`\n%\bG\r&\004\001]\000\014\004\128\001_\001`\005G\b\001\003l\001+\004\130\015\tF\004\r\001a\000\001\000\007\tG\r\027\004\b\133\r!\001a\000\001h\tQ\007Z\003\t\030\004\b\bH\r&\b\002\007\r\023\012\012\007\153\001h\001h\003m\003\tR\003n\003\r'\014\b\016\bI\007\r\025\r.\014\007\004\b\r\b2\b\026\011'\004\n\005c\r*\bt\bM\t\144\007\027\r'\bO\b\016\b\027\001h\bR\007\139\005d\015\007d\003\r/\t\137\001h\004\001\005c\r*\b\154\003\n$\001d\t\r\027\bu\001h\r!\n \001h\005d\007\001d\n\r/\005j\005m\r'\r&\b\016\007\031\000\001m\001\002\001?\015\bv\004\000\007\004\001l\005c\r*\001\003k\005j\005m\003\002\004\004\004\r2\007Z\b\005d\005\003\002\005\r/\t\144\001e\005p\002\003\002\001h\003k\001j\001\005,\001e\002\003\r2\005\001h\014\015\001j\003l\001+\014\017\005j\005m\005p\t\nu\001h\0027\0028\003\002\006\002\b\139\015\003\012\015\011\004\128\b\129\r'\003\b\016\015\003k\nU\0051\007\"\001h\r\023\003\r2\004\016\003\004\003m\005c\r*\003n\003\006+\005p\003\t\030\0029\r\025\r1\002:\003\005d\t\t\000W\r/\011\007\139\007#\002\007\001\007(\t'\012\012\003\015\002\b\007_\007d\012\002\n\002\011\0027\0028\001W\n*\002\005j\005m\012\005;\004\019\t\144\007*\015\007a\r\027\014\b\r!\002\012\000\0056\003\001\001h\0121\004\021\003k\002\r&\012\n$\0027\0028\r2\012\0029\003l\001+\002:\003\003\001h\t \005p\t\136\012\b\015\007d\006\158\tK\004\003\b\131\014*\0054\003\003\t\006\n\003\004\000\t(\t)\r\023\0029\n\011\003\002:\003\003m\t\144\004\023\003n\003\001h\003\001\000\001Z\r+\002\005\014\019\012\003\001h\012\007\139\012\000\014\021\001_\001\003\147\002\015\0055\bE\005/\012\r'\001h\b\016\002\143\003\007d\005?\015\005E\003\000\002\001h\001a\000\004\002\018\005c\r*\t\141\t\143\002\r\027\003\004\r!\005\t\011\tQ\005d\014\015\012\012\r/\014\017\r&\001h\003\006\005\005\005\012s\005\000\n\002\016\tR\001\012\t@\001h\b\002\019\003\t\tC\005j\005m\004\r#\0027\0028\t\024\b\001h\005\005\t \007Z\t\138\t \012\t\t\t\tK\005\003k\tK\005=\0057\003\005/\t\137\r2\004\005\005\004\026\001d\ty\0027\0028\005\005p\0029\012\006T\002:\003\005\n&\t-\005\012\r^\005B\r'\003\b\016\tD\000\003\005=\001h\b\004\003\005\003\006w\004\t\005c\t\002\002\0029\005\005\002:\003\005\005\014n\t\144\005\005d\n\005=\001\r,\t8\000\005D\003\148\n\001\007d\005\002\t;\000\n\022\tQ\001h\012\tQ\0141\005\005\0027\0028\001h\005j\005m\005\005\011\005=\0027\0028\011>\tR\b\002\006\tR\000\n\005A\t'\005\002\003\003\t\003k\002\005\014\019\003\003\001h\r2\t\001W\014\021\0029\005\003\002:\003\001\005p\005C\0029\007d\005\002:\003\t\137\003\001h\t\137\n\022\003\t\144\002\000\002\003\004\028\0027\0028\012\012\002\014\014\012\012\r\001\005F\014\014\011>\001h\005\015\001h\014\tz\003\002\n&\014\004\002\005\n&\002\003\n\027\t(\t)\002\025\0029\011\012\002\002:\003\005\005\r\003\n&\005\015\r\001\000\001h\n\028\001Z\012\012\012\t]\004\n\022\005\001\001h\000J\003\001_\001\001\r\005\005\014\003\005\005\014Z\001h\005\0027\0028\003\004\031\014\014\012\001a\000\005\002\003\005\002\012\012\t\144\005\b\005\t\003\005\005\004\"\002\001h\001h\n\022\005\014\016\014\0027\0028\003\0029\002\014\002:\003\001\n\016\t@\005\t\144\nB\003\nC\tC\004\005\005\n+\003\004\003\n\004\no\005\005\015\004\007\005\005\0129\0029\005\005\002:\003\005\005\011\150\b\005\004\nB\011\018\nF\007\014\014\001d\004\001h\n\017\002\002\n\029\005\005\001h\015\tl\tr\007\012\005\005\007\014\tD\n\017\b\031\tx\tr\t'\004\n\152\005\005\004$\003\002\002\002\007\005\005\002\003\003\005\005\011t\005\005\005\n\148\012\0027\0028\001\001\t\144\005\n\001\004\001\015\026\002\003\005\n\152\002\014\002\n\031\005\005\003\003\nB\002\nI\004\011\127\004\001h\012]\004\t\141\t\142\012\005\0029\004\t\144\002:\003\005\n\152\003\002\003`\006w\005\003\012\005\n\152\004\t(\t)\006w\004\011\011\005\n\017\005\t\t\002\001h\n-\005T\014\001\000\n0\005\005\011\019\011\005\003l\001+\003\015\nB\014\nM\001?\014\nv\n\"\003\004\005T\005\002%\002\002\012\140\002\004&\003\005\005\006\000\002\005\005\012b\002.\005\002\002\001h\003m\006\002v\003n\003\012\004\006\005\002\0027\0028\002\002\003\005\003\nb\nc\005\005\014\nt\014\004\005\001\002\t@\002\002z\003\0027\0028\tC\014\002\005\011\nB\005\n\127\002\t\144\n\0029\n\005\002:\003\t\n\000J\003\003\002\006\002\015%\005\003\012\003\003\005T\0027\0028\001h\015%\006\0029\003\003\002:\003\002\002\002\002\153\002\004\004)\005\n\002\n\003\014\002\143\002\004\002\tD\015%\001?\005\005\rM\006\005\0029\006\003\005\002:\003\002\143\003\000\002\b#\015\0027\0028\003\014\142\002\001h\n\156\004\003\012\n\157\002\005\005\006\004\b'\003\n\001h\n\003\b\007\003\006\003\n\n\n\n\012&\b\002\143\005\006U\0029\012\0115\002:\003\005\007\014\004\002\005c\n\159\003\005\002\143\005\012\012\002\011@\012+\002\007\005d\012\137\014\144\007\011\030\004+\004.\007\006\n\012'\002\000\005\002\002\n\t\144\012\012\003\007\002\n\002\002\143\0120\0125\005j\005m\003\004\002\005\011J\012'\004\003\003\003\003l\001+\002\005\012m\r\005\005\r\144\003k\005\011\012\156\004\004\005\005n\003\014\003\000\002\003\0041\012'\012'\003\005p\rX\005\005\r\132\011\005\005\005\003m\001h\002\003n\003\002\004\006\000\004\012W\005\r\003\006\005\002\005\000J\005T\015\002\003\005\005\005\001?\005\005\rh\005\005\tV\003\000\002\002\000\003\002\015)\005\015)\0027\0028\003\005\003\014\002\001?\003l\001+\005\003\005\005\012\159\004\012\005\015\001\003\006\005\003\nb\014\015)\003\015\b\015O\0043\003\005\005\012\128\005\005\0029\015Q\000J\002:\003\005\015\007\003\003m\015\012\006\003n\003\015%\004\005\002\015)\rB\002\007\007\000J\005\005\003\002\015T\r\006U\tW\tX\002\n\002\011\011\006\nb\015\002\015)\007\006\003'\002\006\005\002w\000\0027\0028\002\007N\005\002\012\000\001h\007\002\003\011\002\007\015\n\005\003\018\007\012\002\006\012\003\003l\001+\012\015\0045\015)\000\003+\007\012\004\0048\005c\007\0029\003\002\003B\002:\003\003\021\003\006U\003\015)\003G\005d\011\001h\004\011\030\001W\007\007\015)\006U\003\003m\0027\0028\003n\003\003h\003\005\015)\003\140\002{\007\t\127\015)\007\007\005j\005m\t\130\007\003\149\006U\003\006T\006U\002\015\015N\011\0150\015\007\003\007\003\007\003\0029\003k\007\002:\003\014\025\011\002\005n\002\022\014\027\004\011\005\015\007\003\0153\005p\004\003\005c\003\022\003\003\003\005\005\011\023\003\005\003\003\003\025\005d\011\001Z\t\131\011\030\002\016\003\014\023\007\031\000\001h\0157\002\019\003\001_\001\001\004\005\005\005\003\004K\003\0027\0028\n\017\005j\005m\0027\0028\015I\003\003\001a\000\004Y\004P\015\028\004U\005\004\003\rH\004n\003\004x\005\003k\004\003\002\004\127\003\004\129\005n\004\134\005\004\0029\005\003\002:\003\0029\005p\015=\002:\003\004\151\003\004\156\004\005\005\011x\005\005\003\000\002\004\004\005c\014\015@\007\"\004\004\015\004\004\0027\0028\004\015D\005d\011 \004\re\011\030\005\005\t'\011R\003\015H\003\006\011\015\004:\004\015M\001d\003\003\007#\t'\004\007(\005\004\005\003\005\005j\005m\n\026\005\t\0029\004\005\002:\003\005\005\011\154\004=\005\005\007\005\r\005\003\007*\005\019\005\027\003k\004@\004\003\005-\003\0052\005n\003\005<\005@\005K\005Z\005\003\005\005\005p\001\005\003l\001+\003\003\148\004\001\005\005\005\004B\005\005\003\t(\t)\002\005\t*\006\000\005T\006\006\003\004\005\006\b\006\012\t(\t)\001\000\tB\006\014\006\020\005\006\019\003m\003l\001+\003n\003\003\001\000\006\\\006`\002\004\002\005\006a\003\004\004D\005\002\006k\006p\003\006u\005T\003\005\005\012>\006\005\005\005\012f\003\005\003m\003\002\005\003n\003\014\014\006\000J\006\006\006\003\006\003l\001+\006\005\005\006\006\006\005\005\006\004\136\001\006\t@\006\007\022\003\007\t\007\014\tC\003\007\029\002\005\001\003\t@\004\005\005\005\007'\tC\007C\003m\005\004\003n\003\0076\005\003\005\005\rQ\005\005\007;\003\003\002\007H\002\b\159\002\007h\000J\003\003\r\006\004\002\015\007u\003\003l\001+\007y\004\005\005\007\004\003\tD\007\131\007\135\007\142\007\145\003\002\002\007\147\005\024\003\012\007\150\004\138\003\tD\007\152\007\005\005\028\007\156\007\007\012\132\007\005\007\004\003m\005c\007\003n\003\007\007\005\007\007\003l\001+\007\007\005d\012\137\003\b\005\011\030\b\012\bC\004\bX\b]\bg\bd\007\004\141\002\005\024\bo\003\bq\bh\007\004\b~\005c\005\028\b\141\bi\005j\005m\002\005\024\003m\004\b\148\003n\003\005d\012\137\007\005\028\011\030\003\000\002\003\017\003\004\144\004\146\b\003k\000W\004\b\b\b\007\005n\b\134\b\007\005\024\t.\004\148\007\005j\005m\005p\t0\t2\005\028\003\006\004\t9\005c\004\t?\007\003\003\tP\005\029\tS\b\142\003l\001+\003k\005d\011 \005T\012\031\011\030\t\134\005n\003\003l\001+\t^\t`\005\024\b\150\tb\b\016\005p\tv\003\003l\001+\005\028\002\t|\t\005\030\t\005j\005m\003\t\b\137\003m\004\t\003n\003\t\t\t\003\005 \bH\003m\t\012\018\003n\003\003k\003\000\002\004\005\024\005c\003m\005n\005#\003n\003\b\138\bI\005\028\n\n\n\015\n\019\005p\005d\011\003l\001+\011\030\n\024\005\030\n(\n=\nT\bM\003\006\nX\n[\bO\n\\\b\149\b\152\b\153\005&\n_\005\030\ne\003\011\nk\005\024\005j\005m\nq\004\b\154\005c\n{\n\144\005\028\n\150\003m\n\154\n\003n\003\n\n\n\005d\011\n\003k\011\030\005\030\n\002\004\n\005n\n\005(\011\004\011\016\003l\001+\011\029\011\031\004\005p\011#\011(\0119\003l\001+\0113\005j\005m\0118\004\011:\t'\011E\011C\011D\003\002\005\024\002\011F\tV\011Q\005\030\011O\003\002\005\028\003k\011M\003m\011N\005*\003n\003\005n\011P\011\128\011\003m\011\005\024\003n\003\002\005p\005\024\003\028\002\011\005\028\004\005\024\005c\011\005\028\011\011\011\004\012\002\005\028\004\005\030\005c\012\004\005d\011 \012\b\011$\011\030\012\012\r\004\012\r\005c\012\022\005d\011 \012\027\011\"\011\030\012#\012*\012-\012/\t(\t)\005d\011 \tE\011|\011\030\005j\005m\tW\tX\0122\0124\t\129\0127\001\000\005\030\005j\005m\012B\012n\002\012\135\002w\000\003l\001+\003k\005j\005m\004\012\148\012\012\005n\004\002\005c\003k\004\012\000J\r\bg\005p\005n\003\012\012\003k\005d\011 \bh\011\158\011\030\005p\005n\012\012\bi\003m\012\r\007\003n\003\r\005p\r6\r\020\r\029\r\r\030\r4\005\030\r3\r7\r\005j\005m\005\024\r9\rY\000W\001\rn\t@\ru\rv\005\028\b\134\r\137\tC\002{\004\t\127\005c\005\030\001V\003k\002\t\130\005\030\004\r\138\005c\005n\001W\005\030\005d\011 \r\012j\011\030\005\024\b\142\005p\r\005d\011 \007\rU\011\030\005\028\r\r\014#\002\002\014-\0145\014k\b\150\014l\b\016\014v\005j\005m\007\014w\014|\014\143\014\014\014\005j\005m\tD\004\014\b\137\014\014\001W\007\002\t\131\003k\007\014\001\bH\007\014\005n\014\003k\015\t\015\017\015\022\000W\015/\0155\005n\005p\007\002\0159\b\138\bI\015B\015F\015K\005p\015\001Z\015\005\024\015\001\001\r\015\001]\015\bM\005\028\001_\001`\bO\001V\b\149\015+\b\153\000\000\005\024\002\000\000\002\001W\005\024\004\000\000\005c\005\028\002\b\154\003\000\005\028\0027\0028\005\030\000\000\000\000\r\005d\011 \000\000\r\153\011\030\001Z\003\002\000\000\000\0031\002\000\000\001\000\000\003\005\024\001_\001\001\000\000\000\000\bH\000\000\n\005\028\000\000\005j\005m\0029\005\030\000\000\002:\003\000\000\000\000\005\024\001a\000\000\000\bI\0027\0028\000\000\t\005\028\003l\001+\003k\000\000\005\024\n\011\b\n\n\005n\bM\000\000\000\000\005\028\bO\001Z\t\000\001\ba\005p\000\000\003\001d\001]\000\000\002\r\001_\001`\000\000\0029\bQ\000\000\002:\t\007\003m\000\000\000\000\003n\003\002\000\000\001m\001\r\005\022\005\024\003\000\r\003l\001+\n\000\000\n\005\028\000\000\005\030\000\000\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\001d\000\000\003\003\001e\000\000\000\000\005\030\000\000\001h\005\024\001j\005\030\r\000\000\t\000\000\003m\000\000\005\028\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\r\000\000\002\005\024\000\000\000\000\005\024\000\000\000\000\000\000\002\005\030\005\028\000W\r\005\028\003\001\001\003\000\000\004\001\001d\001\000\000\000\000\000\000\000\000\002\002\005\030\004\003m\005\000\000\003n\003\000\000\000\000\002\000\000\002\001m\001\005\030\003\005\005\002\000\000\005\n\000\000\005\024\000\000\r\002\000\000\000W\000\000\000\000\000\000\005\028\000\000\000\000\000\000\003\007\000\000\003l\001+\004\000\000\001e\005\005\005\024\000\000\001h\004\001j\005\000\000\t\004\005\028\005c\005\030\r\000\000\003\bH\000\000\n\005\005\000\000\000\000\000\000\005d\011\028\000\000\005\011\030\003m\000\000\n\003n\003\bI\000\000\000\000\005\000\000\r\000\000\000\000\r\007\027\005\030\004\005\005\0027\0028\bM\005j\005m\000\000\bO\000\000\002\000\000\bP\004\000\000\005c\bH\000\000\000\000\000\000\tV\005\000\000\003\005\030\bQ\003k\005\030\005d\011.\000\000\000\000\011\030\005n\bI\000\000\000\000\0029\t\000\000\002:\003\000\000\005p\r\000\000\000\000\0027\0028\000\000\bM\000W\003l\001+\bO\005j\005m\000\000\bR\000\000\000\000\000\000\004\000\000\005c\000\000\r\000\000\003\000\000\004\bQ\000\000\003\000\000\005\030\003k\005d\012\134\000\000\005\024\011\030\0029\005n\000\000\002:\003\003m\002\005\028\003n\003\000\000\005p\tW\tX\000\000\005\030\t\132\003q\001+\001i\000\000\000W\005j\005m\003l\001+\000\000\002w\000\000\000\000\000\005\024\000\000\003\000\002\000\000\003l\001+\000\000\000\000\005\028\000\000\003\003k\000\000\003\000\000\bH\000\000\005\024\005n\004\003r\005c\011W\004\000\000\003\005\028\003m\005p\003\006\003n\003\007\028\bI\005d\012\005\024\001i\011\030\003m\000\000\005\024\003n\003\000\000\005\028\000\000\000\000\000\000\bM\005\028\000\000\000\000\bO\000\000\003\014\bV\000\000\000\000\004\005j\005m\000\000\002{\000\000\t\127\bH\000\000\000\000\bQ\000\000\t\130\004\002\005\000\000\r\006\000\000\000\000\000\000\003k\000\000\006\bI\005\024\000\000\005\005n\000\000\000\000\005\000\000\000\000\005\028\000\000\000\000\000\000\005p\000\000\bM\000\000\000\000\002\bO\002\004\005\030\b[\r\000\000\000\000\002\004\005\005\000\000\004\000\000\005\000\000\bQ\004\000\000\005c\004\t\131\r\0027\0028\003\002\006\002\005\000\000\003\012\005\005\005d\000\000\000\000\005\030\005o\012\000\000\005\024\014^\r\000\000\000\000\003\000\000\r\005\005\028\000\000\000\000\000\000\000W\005\030\005\005\000\000\000\000\0029\005j\005m\002:\003\000\000\004\005\024\011S\000\000\000\000\005\024\000\000\004\005\030\005c\005\028\005\000\000\005\030\005\028\011T\003k\000\000\012\004\001V\005c\005d\r2\000\000\002\014\r\005\001W\0027\0028\000\000\005p\005d\014{\0158\005\024\011\030\000\000\000\000\000\000\011U\011V\000\000\015J\005\028\000\000\000\000\005j\005m\003\000\000\003l\001+\000\000\015\000\000\005\030\000\000\000\000\005j\005m\003k\000\000\0029\bH\000\000\002:\003\003k\000\000\000\000\000\000\015\145\0027\0028\005n\000W\000\000\006\n\003\003k\000\000\bI\000\000\r\005p\003m\005n\001W\003n\015\151\000\000\000\000\000\000\003\001\000\000\005p\bM\000\000\005\024\002\bO\000\000\000\000\001Z\b`\001V\0029\005\028\r\002:\003\001]\r\005\030\001W\001_\001`\bQ\000\000\000\000\000\000\000\000\001\001\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\015\000\000\005\030\004\000\000\005\005\030\r\000\000\000\000\000\000\003\000\000\003\000\000\bH\000\000\003\006\005\000\000\001Y\000\000\014F\000\000\000\000\000\000\000\000\001Z\001V\000\000\000\000\000\000\000\000\bI\004\001\000\000\001W\005\030\001_\001\001\000\000\000\000\000\000\005\005\000\000\000\000\bM\000\000\000\000\000\000\bO\000\000\001Z\003\bp\001[\001a\000\000\000\000\000\001]\000\000\000\000\005\001_\001`\000\000\bQ\000\000\014\001\005\004\001d\005\000\000\000\000\000\000\001w\001V\000\000\005\000\000\005\024\000\000\001a\000\005\001W\000\000\000\000\r\142\005\028\001m\001\004\003\005c\000\000\015\000\000\005\030\000\000\005\024\000\000\000\000\000\000\000\000\000\000\005\024\005d\000\000\005\028\001Z\005\005\001[\004\005\028\005\000\000\001]\000\000\001e\000\000\001_\001`\000\000\001h\000\000\001j\001{\005\000\000\001d\005\rk\005j\005m\000\000\001V\005\024\005\000\000\000\000\001a\000\000\000\000\000\001W\005\028\000\000\005\000\000\000\000\000\000\005\024\000\000\003k\005\005\000\000\001d\000\000\000\000\005\028\001Z\000\000\000\000\001[\000\000\000\000\000\000\000\000\001]\015\000\000\000\000\001_\001`\005\000\000\001m\001r\001\001\000\000\005\000\000\001\000\000\001\001\127\000\000\014\003\001W\000\000\005\001a\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001W\001e\000\000\014\006\0027\0028\001h\001\001j\014\t\000\000\001d\003l\001+\005\030\000\000\001Z\000\000\000\000\001[\001\001\000\000\000\000\001]\003\t'\000\000\001_\001`\000\000\001m\001r\003\005\030\000\000\001\001\000\000\0029\005\030\014\011\002:\003\000\000\000\000\000\000\003m\001a\000\003n\003\000\000\000\000\000\000\000\000\014\r\000\000\000\000\000\000\000\000\001e\001Z\000\000\001d\000\000\001h\000\000\001j\000\000\001\000\000\005\030\000\000\001_\001\001\000\000\001Z\n\000\000\000\000\000\000\000\000\001m\001r\001\005\030\000\000\000\000\001_\001\001\000\000\001a\000\000\000\003l\001+\000\000\t(\t)\0027\0028\t\140\000\000\n\n\n\n\001a\000\002\000\000\001e\001\000\000\000\003\001h\tV\001j\000\000\003\000\000\001d\003\003l\001+\000\000\000\000\000\000\003m\000\000\004\003n\003\0029\000\000\000\000\002:\003\002\000\000\002\001m\001r\000\000\003\000\000\000\000\002\000J\n\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\n\003n\003\000\000\000\000\003\002\006\002\001d\000\000\003\012\000\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\000\000\001\000\000\t@\001d\000\000\004\000\000\005\tC\000\000\tW\tX\000\000\004\n\001\005c\000\000\000\000\000\000\000W\005\000\000\000\000\000\000\012\139\002w\000\000\000\005d\000\000\000\000\000\000\012\131\000\000\000\000\004\000\000\001\001\000\000\003\000\000\001\000\000\001\000\000\007\005\005\002\000\000\000\000\000\000\001\001\005j\005m\000\000\001\000\000\001\000\000\000\000\tD\007\004\000\000\000\000\005\012\001\n\003l\001+\000\000\000\000\005\003k\000\000\000\000\000\000\007\000\000\000\000\005n\007\005\000\000\000\000\b\158\000\000\000\000\000\000\003\005p\002{\000\000\t\127\bH\004\000\000\005c\007\t\130\004\006\n\005\003m\000\000\000\000\003n\003\n\000\000\005d\000\000\bI\000\000\012!\005\000\000\000\000\000\000\011Y\000\000\n\000\000\000\000\002\004\000\000\005c\bM\000\000\000\000\000\000\bO\007\027\003l\001+\015.\005j\005m\000\000\005d\000\000\005\005\012\026\000\000\000\000\000\000\000\000\bQ\000\000\003\000\002\000\000\t\131\003\000\000\000\000\003k\000\000\000\000\000\000\000\000\005\000\000\005n\000\000\005j\005m\003m\005\000\000\003n\003\000\000\005p\000\000\000\000\000\000\003\006\005\003l\001+\000\000\000\000\000\000\003l\001+\003k\000\000\004\t'\0027\0028\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\005p\000\000\003\000\000\t'\000\000\000\000\000\000\003\000\000\000\000\003m\000\000\000\000\003n\003\003m\000\000\000\000\003n\003\000\000\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\t'\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\004\000\000\005c\004\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\t(\t)\000\000\005d\n\b\000\000\003\011\0029\000\000\000\000\002:\003\000\000\000\000\001\000\000\000\t(\t)\0029\000\000\nA\002:\003\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\001\000\000\000\000\000\000\000\004\003l\001+\000\000\000\000\004\0027\0028\t(\t)\000\000\003\na\003k\000\000\000\000\004\000\000\005c\000\000\005n\000\000\003\001\000\000\000\000\000\003\000\000\000\000\005p\005d\000\000\000\000\000\000\011\003m\000\000\000\000\003n\003\0029\000\000\000\000\002:\003\001\000\000\t@\000\000\000\000\000\000\000\000\000\000\tC\000\000\000\000\003\005j\005m\0027\0028\000\000\004\001\005c\t@\000\000\004\003\005c\000\000\tC\000\000\004\000\000\005\000\000\005d\003k\000\000\003\011\005d\000\000\000\000\005n\011\000\000\005\000\000\000\000\001\011\t@\0029\005p\000\000\002:\003\tC\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\tD\005j\005m\000\000\000\000\000\000\000\000\005\005\000\000\000\000\004\000\000\005\004\000\000\000\000\003k\tD\003\0027\0028\003k\004\005n\005\005\000\000\005\005n\011\000\000\000\000\000\000\005p\005\000\000\000\000\005\005p\000\000\003\005\000\000\000\000\005\tD\000\000\000\000\000\000\000\000\000\000\000\000\005\005\0029\000\000\000\000\002:\003\000\000\001V\000\000\000\000\000\000\005\005\000\000\000\000\000\000\001W\001V\000\000\003\005\000\000\000\000\004\000\000\005c\001W\005\004\000\000\005\000\000\005\000\000\000\000\000\000\000\000\005\005d\005\000\000\000\000\011\005\000\000\000\000\000\000\011\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\001V\004\000\000\005\000\000\003k\000\000\003\000\000\001W\005\003m\005n\001Z\003n\003\005\005\000\000\000\000\011\004\024\005p\001Z\000\000\001_\001`\005\000\000\000\000\000\000\004\024\000\000\000\000\000\000\001_\001`\000\000\003l\001+\000\000\000\000\000\000\005\005\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\000\003\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\004\005\005\003m\000\000\000\000\003n\003\000\000\000\000\000\000\005\000\000\000\000\000\000\005\000\000\001Z\000\000\011\0027\0028\000\000\000\000\000\000\001]\000\000\000\000\004\001_\001`\000\000\000\000\000\000\000\000\007\132\000\000\000\000\000\000\000\000\000\000\003\005\005\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\001d\000\000\000\000\0029\000\000\000\000\002:\003\000\000\000\000\001d\005\003\007\000\000\002\004d\000\000\005\000\000\001m\004f\002\000\000\000\000\000\000\004E\000\000\005\000\000\001m\004a\000\000\000\000\000\000\000\000\000\000\000\000\004\004\003\002\005c\000\000\000\000\007\003l\001+\t'\000\000\000\000\001e\000\000\004b\000\000\005d\001h\000\000\001j\011\136\000\000\001e\000\000\004b\000\000\000\000\001h\003\001j\000\000\000\000\000\000\000\000\000\000\000\000\001d\003l\001+\000\000\000\000\000\000\003m\005j\005m\003n\003\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\001m\001\003\005\022\000\000\000\000\000\000\004\003k\005c\002\000\000\000\000\003l\001+\005n\003m\000\000\000\000\003n\003\000\000\005d\000\000\000\000\005p\011i\t(\t)\000\000\001e\ni\000\000\000\000\003\001h\000\000\001j\000\000\000\000\000\000\000\000\001\000\000\000\003l\001+\000\000\003m\005j\005m\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\004\007\005\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\003l\001+\004\005\002\000\000\005n\011_\000\000\003m\000\000\000\000\003n\003\000\000\000\000\005p\002\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\004\000\000\002\003m\002\000\000\003n\003\001\000\000\t@\002\003\000\002\000\000\000\000\tC\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\003S\000\000\000\000\004\004\000\000\005c\005\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\003l\001+\000\000\005d\000\000\000\000\000\000\005e\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\004\004\005c\003\000\000\000\000\000\000\000\000\tD\000\000\000\000\000\000\005j\005m\000\000\005d\000\000\003m\000\000\005g\003n\003\000\000\000\000\000\000\000\000\002\004\002\000\000\002\000\000\004\003k\005c\002\000\000\000\000\000\000\000\000\005n\000\000\005j\005m\000\000\000\000\000\000\005d\000\000\000\000\005p\005i\000\000\003\002\006\002\001*\001+\003\012\000\000\000\000\000\000\003l\001+\003k\004\000\000\005c\000\000\000\000\000\000\005n\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\005d\005p\000\000\003\005o\000\000\000\000\000\000\000\000\000\000\000\000\004\014r\005c\rC\000\000\003k\003m\000\000\000\000\003n\003\000\000\005n\000\000\004\005d\005j\005m\002\005q\003l\001+\005p\000\000\000\000\000\000\000\000\002\000\000\003l\001+\000\000\000\000\000\000\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\005j\005m\005n\003\000\002\006\011\000\000\000\000\003\000\000\000\000\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\000\000\003k\003m\003l\001+\003n\003\000\000\005n\000\000\000\000\003\006\003l\001+\000\000\004\000\000\005c\005p\000\000\006\n\000\000\000\000\000\000\003\rD\000\000\000\000\000\000\000\000\005d\004\000\000\003\005s\000\000\000\000\000\000\003m\000\000\000\000\003n\003\002\000\000\000\000\000\000\003m\003l\001+\003n\003\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\003k\000\000\004\000\000\000\000\003m\000\000\005n\003n\003\004\004\ra\000\000\000\000\000\000\004\005p\005c\000\000\003\006\000\000\000\000\000\000\000\000\rb\000\000\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\005u\000\000\000\000\007\132\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\004\000\000\000\000\000\000\000\000\rc\rd\000\000\000\000\004\000\000\005j\005m\000\000\000\000\000\000\000\000\003\004\000\000\005c\007\000\000\002\000\000\000\000\003k\004\000\000\005c\002\003m\003k\005d\003n\003\000\000\005w\000\000\005n\000\000\000\000\005d\000\000\000\000\004\005y\000\000\003\002\005p\000\000\000\000\007\000\000\003l\001+\n4\000\000\000\000\000\000\005j\005m\000\000\004\002\005c\000\000\000\000\000\000\005j\005m\000\000\004\000\000\005c\003\000\000\000\000\005d\000\000\000\000\003k\005{\n5\n7\n8\n9\005d\005n\003m\003k\005}\003n\003\002\000\000\002\005n\005p\003l\001+\000\000\000\000\002\000\000\005j\005m\005p\004\000\000\005c\000\000\002\000\000\005j\005m\000\000\tV\004\000\000\003\003\002\006\002\005d\000\000\003\012\003k\005\127\003l\001+\n:\000\000\nQ\005n\003m\003k\000\000\003n\003\000\000\000\000\nR\005n\005p\000\000\000\000\000\000\000\000\000\000\003\005j\005m\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\003m\000\000\000\000\003n\003\000\000\000\000\000\000\003k\000\000\003l\001+\000\000\004\000\000\005n\000\000\000\000\004\000\000\005c\000\000\002\000\000\000\000\005p\000\000\002\tW\tX\000\000\003\n\142\005d\000\000\000\000\000\000\005\129\000\000\000\000\000\000\000\000\006\003\002w\000\003m\000\000\000\000\003n\003\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\004\000\000\005j\005m\000\000\000\000\003l\001+\000\000\001W\n\130\000\000\000\000\000\000\003l\001+\001\000\000\004\006\n\005c\000\000\000\000\003k\003\006\000\000\000\000\003\000\000\004\005n\000\000\000\000\005d\000\000\003\000\000\005\131\000\000\000\000\005p\003m\002\000\000\003n\003\001\000\000\000\000\003m\000\000\n\131\003n\003\002{\000\000\t\127\000\000\000\000\000\000\005j\005m\t\130\004\n\132\005c\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\004\000\000\001h\000\000\005d\000\000\000\000\003k\005\133\003l\001+\000\000\000\000\001Z\005n\000\000\000\000\000\000\004\000\000\005c\001\000\000\003\006\005p\001_\001\001\000\000\000\000\003\005j\005m\005d\000\000\003l\001+\005\135\000\000\000\000\000\000\000\000\000\000\t\131\003m\001a\000\003n\003\000\000\000\000\000\000\003k\000\000\004\002\003\000\000\000\000\005n\005j\005m\004\004\000\000\005c\000\000\000\000\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\000\000\005d\000\000\000\000\003k\005\137\000\000\000\000\002\000\000\002\005n\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\005p\003l\001+\000\000\000\000\000\000\000\000\005j\005m\003l\001+\000\000\000\000\000\000\003\002\003&\000\000\000\000\003\012\004\000\000\005c\003\000\000\001d\000\000\000\000\004\003k\005c\003\000\000\000\000\004\005d\005n\003m\000\000\005\139\003n\003\000\000\005d\000\000\003m\005p\005\141\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\001*\001+\000\000\000\000\004\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\001\000\000\000\000\000\000\002\001\000\000\001\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\014q\000\000\rC\000\000\000\000\004\005n\005c\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\005d\003l\001+\000\000\005\143\000\000\003q\001+\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003\000\000\000\000\000\000\005d\005j\005m\000\000\005\147\000\000\000\000\000\000\000\000\000\000\003m\000\000\000\000\003n\003\003r\000\000\011W\004\002\000\000\000\000\003k\000\000\000\000\000\000\000\000\005j\005m\005n\000\000\003l\001+\000\000\000\000\000\000\000\000\000\000\000\000\005p\rD\000\000\003l\001+\000\000\000\000\003\000\002\003k\004\004\005c\003\000\000\000\000\005n\000\000\004\000\000\005c\000\000\000\000\000\000\003\005d\005p\003m\000\000\005\146\003n\003\000\000\005d\000\000\003\006\000\000\005\149\003m\000\000\000\000\003n\003\000\000\tV\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\0027\0028\004\000\000\005j\005m\000\000\004\004\000\000\ra\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\003\000\000\rb\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\005d\005p\0029\000\000\005\151\002:\003\000\000\000\000\005p\000\000\000\000\000\000\r\155\000\000\000\000\000\000\rc\rd\000\000\000\000\0027\0028\000\000\000\000\004\000\000\005j\005m\tW\tX\000\000\004\n\005c\000\000\004\004\003k\011S\000\000\000\000\003\000\000\002w\000\000\000\005d\003k\000\000\000\000\005\153\011T\000\000\000\000\005n\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\005p\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\000\000\011U\011V\004\000\000\000\000\000\000\000\000\000\000\000\000\004\003\005c\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\004\003k\005c\005n\005d\000\000\0029\000\000\005\155\002:\003\000\000\000\000\005p\002{\005d\t\127\000\000\000\000\005\157\000\000\000\000\t\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\005j\005m\003\004\000\000\005c\000\000\000\000\000\000\000\000\003k\004\001W\005\000\000\000\000\000\000\005n\005d\003\000\000\003k\005\159\000\000\000\000\000\000\005\005p\005n\000\000\005\000\000\000\000\0029\000\000\t\131\002:\003\005p\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\0027\0028\000\000\000\000\003\000\000\005\005\000\000\000\000\000\000\003l\001+\000\000\000\000\000\000\000\000\000\000\004\003k\005\003\000\000\000\000\000\000\000\000\005n\005\000\000\000\000\000\000\000\000\003\005\005\0029\005p\005\002:\003\000\000\000\000\000\000\001Z\005\000\000\003m\000\000\000\000\003n\003\001i\000\000\000\000\000\000\001_\001\001\0027\0028\005\005\000\000\000\000\0027\0028\000\000\004\000\000\005\000\000\000\000\000\000\003\000\000\001a\000\000\000\000\000\003\000\000\005\005\000\000\tV\003\005\000\000\005\000\000\0027\0028\000\000\0029\000\000\000\000\002:\003\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\005\005\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\0029\000\000\000\000\002:\003\005\000\000\000\000\004\000\000\000\000\004\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\005\001d\000\000\000\000\005\0027\0028\tW\tX\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002w\000\000\000\000\000\003\005\005\003\000\000\0027\0028\000\000\004\003\005\000\000\000\000\000\000\0029\000\000\000\000\002:\003\004\000\000\005c\005\005\000\000\001\003\005\000\000\005\001\000\000\001\000\000\005d\003\000\000\000\000\005\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\002{\004\t\127\005\000\000\000\000\005\004\t\130\005\n\003\000\000\005\000\000\000\000\005\003k\000\000\000\000\005\000\000\005\005\005n\0029\005\000\000\002:\003\000\000\000\000\000\000\004\005p\005\003\n\n\n\n\000\000\000\000\005\005\000\000\001W\000\000\005\005\005\000\000\005\001\000\000\001W\000\000\000\000\000\000\0027\0028\000\000\003\t\131\005\000\000\000\000\0027\0028\000\000\005\005\000\000\000\000\000\000\005\005\005\000\000\000\000\003\005\000\000\001\n\000\000\n\005\003\000\000\000\000\000\000\000\000\000\000\0029\n\005\002:\003\004\000\000\005\0029\005\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\003\005\005\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\001Z\004\000\000\005\000\000\000\000\000\000\000\000\001\001Z\000\000\000\000\001_\001\001\000\000\005\005\005\000\000\005\001_\001\006\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\005\0027\0028\001a\000\005\005\005\000\000\0027\0028\000\000\000\000\004\000\000\005\000\000\005\000\000\003\000\000\002\003\n\000\000\000\000\005\003\005\000\000\003\000\000\005\005\000\000\000\000\0029\000\000\000\000\002:\003\000\000\000\000\005\0029\000\000\000\000\002:\003\000\000\000\000\002\000\000\002\000\000\005\005\000\000\000\000\000\000\002\000\000\000\000\000\000\n\0027\0028\000\000\000\000\000\000\000\000\001d\000\000\0027\0028\000\000\005\n\003U\000\000\001d\000\000\004\005\005\000\000\003\000\000\000\000\007\027\004\000\000\005\005\003\000\000\000\000\005\000\000\000\000\0029\005\000\000\002:\003\005\000\000\000\000\0029\005\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\001\000\000\003\005\005\001\000\000\001\000\000\001\003\005\005\000\000\003\148\000\000\001\000\000\000\000\003\000\000\002\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\002\005\005\0029\000\000\000\000\002:\003\000\000\005\000\000\005\000\000\0027\0028\000\000\000\000\000\000\000\000\005\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\003\004\003\005\000\000\002\000\000\000\000\003\004\003\005\000\000\000\000\0029\000\000\005\002:\003\000\000\005\000\000\0029\002\005\002:\003\003E\005\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\007\132\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\003\002\004\000\000\000\000\000\000\000\000\002\002\005\004\002\005\005\007\000\000\002\005\005\004\000\000\005\000\000\002\000\000\005\005\005\000\000\000\000\005\000\000\000\000\002\005\005\002\000\000\005\000\000\000\000\003\002\000\000\000\000\000\000\007\000\000\003\0027\0028\000\000\000\000\000\000\005\005\003\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\004\000\000\005\000\000\003\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\005\005\005\0029\005\000\000\002:\003\000\000\005\002\007\005\0029\000\000\000\000\002:\003\000\000\r\005\000\000\000\000\002\n\002\011\000\000\002\000\000\005\005\000\000\004\002\005\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\002\012\000\000\000\005\000\000\000\000\005\005\000\000\000\000\000\000\005\000\000\005\000\000\005\002\002\000\000\000\000\000\000\000\000\000\000\005\000\000\0027\0028\000\000\000\000\000\000\005\005\000\000\b\018\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\000\000\002\000\000\003\000\000\003\000\000\000\000\005\000\000\000\000\000\000\003\000\000\003\005\005\0029\002\000\000\002:\003\000\000\005\000\000\005\0029\0027\0028\002:\003\000\000\000\000\005\002\015\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\002\000\000\003\000\000\014\014\000\000\000\000\000\000\002\022\014\022\000\000\003\000\000\000\000\000\000\000\000\0029\000\000\000\000\002:\003\000\000\004\000\000\005\0029\000\000\003\006\002:\003\000\000\004\000\000\005\000\000\000\000\000\000\005\002\016\000\000\014\023\005\000\000\001h\000\000\002\019\005\000\000\0027\0028\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\005\005\000\000\003\000\000\003\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0029\000\000\005\002:\003\000\000\000\000\000\000\000\000\005\000\000\005\000\000\001W\000\000\000\000\000\000\000\000\005\005\003\0027\0028\000\000\000\000\000\000\000\000\000\000\005\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\005\000\000\003\000\000\000\000\000\000\000\000\004\000\000\005\000\000\000\000\000\000\005\000\000\000\000\0029\005\000\000\002:\003\000\000\005\000\000\000\000\000\000\005\000\000\000\000\002\000\000\002\000\000\000\000\0027\0028\000\000\000\000\002\000\000\005\005\000\000\004\000\000\005\000\000\003\000\000\005\005\001Z\004\000\000\005\003\003\002\000\000\005\000\000\003\021\005\005\001_\001\011\000\000\005\005\0029\005\005\002:\003\000\000\000\000\000\000\005\005\0027\0028\000\000\000\000\001a\000\005\005\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\003\000\000\000\000\003\000\000\000\000\005\000\000\000\000\000\000\004\000\000\005\005\0029\005\000\000\002:\003\000\000\002\000\000\005\005\000\000\005\0027\0028\000\000\005\000\000\000\000\005\000\000\000\000\003\022\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003.\003\0027\0028\000\000\000\000\005\005\000\000\000\000\003\000\000\003\000\000\001d\0029\000\000\000\000\002:\003\004\000\000\005\003\000\000\000\000\0029\005\000\000\002:\003\000\000\000\000\000\000\005\005\000\000\0029\000\000\006\024\002:\003\000\000\000\000\005\000\000\000\000\0027\0028\000\000\000\000\000\000\002\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\005\005\001\007\132\000\000\000\000\003\003\148\000\000\001\000\000\004\000\000\005\000\000\000\000\000\000\003\000\002\000\000\0029\005\000\000\002:\003\000\000\005\000\000\005\000\000\006\029\003l\001+\007\000\000\002\000\000\000\000\005\000\000\003\000\000\002\000\000\000\000\003\006\000\000\0027\0028\000\000\000\000\003\003\005\005\000\000\004\000\000\005\000\000\003\002\000\000\003\000\000\007\000\000\003m\000\000\003\003n\003\005\000\000\000\000\005\006 \000\000\000\000\000\000\000\000\000\000\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\0027\0028\000\000\004\000\000\005\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\005\005\000\000\003\006&\000\000\002\004\005\005\000\000\005\000\000\000\000\000\000\006)\000\000\0029\005\000\000\002:\003\005\000\000\000\000\000\000\0061\005\005\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\005\005\003l\001+\000\000\000\000\000\000\000\000\000\000\000\000\005\005\005\003\004\000\000\005\005\b\021\000\000\000\000\005\000\000\003\000\000\000\000\000\000\005\005\005\000\000\000\000\005\0066\000\000\000\000\000\000\003m\005\005\003n\003\000\000\000\000\000\000\000\000\002\0027\0028\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\004\000\000\005c\000\000\000\000\000\000\003\000\000\003\003l\001+\000\000\000\000\003\000\002\005d\004\005\005\006:\000\000\000\000\0029\000\000\005\002:\003\000\000\000\000\000\000\003\005\000\000\000\000\005\006B\000\000\000\000\000\000\003l\001+\003\006\005j\005m\003m\001*\001+\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\003\000\000\000\000\003k\004\000\000\000\000\000\000\000\000\004\005n\005\000\000\000\000\003m\000\000\000\000\003n\003\005\005p\014i\000\000\rC\005\000\000\005\000\000\006S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\0027\0028\000\000\004\000\000\005c\000\000\004\005\0029\000\000\000\000\002:\003\000\000\005\000\000\000\000\005d\000\000\000\000\003\006[\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0029\000\000\004\002:\003\000\000\000\000\000\000\rD\000\000\005j\005m\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\003k\006^\000\000\000\000\004\000\000\005c\005n\000\000\000\000\000\000\001V\000\000\000\000\000\000\000\000\000\000\005p\000\000\005d\001W\000\000\000\000\006h\005\005\000\000\000\000\001V\000\000\003\000\000\000\000\000\000\004\000\000\005c\001W\000\000\000\000\004\000\000\ra\000\000\000\000\005\005j\005m\000\000\005d\002\004\000\000\005\006l\000\000\rb\003\000\000\000\000\002\005\000\000\000\000\005\006\000\000\000\000\000\000\003k\000\000\000\000\000\000\000\000\000\000\000\000\005n\000\000\005j\005m\000\000\000\000\006\002\004\rc\rd\005p\000\000\000\000\000\000\000\000\000\000\002\005\001V\000\000\004\000\000\005\000\000\003k\001Z\000\000\001W\001[\006\003k\005n\000\000\001]\000\000\005\000\000\001_\001`\006\149\000\000\005p\001Z\000\000\000\000\001[\004\000\000\005\000\000\001]\000\000\000\000\000\000\001_\001`\000\000\001a\000\000\000\006\005\005\005\002\007\006\153\000\000\006\000\000\000\000\000\000\000\000\002\b\000\000\001a\000\002\n\002\011\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\005\005\005\000\000\000\000\000\000\000\000\002\007\002\012\000\006\000\000\005\000\000\000\000\002\b\000\000\001Z\000\000\002\n\002\011\005\000\000\000\000\002\004\001]\000\000\000\000\005\001_\001`\000\000\000\000\002\005\001V\000\000\000\000\000\000\005\002\012\000\000\000\000\000\001W\000\000\000\000\001d\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\006\002\004\001m\001r\000\000\000\000\000\000\000\000\000\000\000\000\002\005\000\000\007\012\000\000\000\000\000\000\001V\000\000\000\000\001m\001r\002\015\000\000\000\000\000\000\001W\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\000\000\002\022\006\000\000\000\000\000\000\000\000\002\007\000\000\001e\006\000\000\002\015\007\017\001h\002\b\001j\001Z\000\000\002\n\002\011\000\000\001d\000\000\000\000\001]\000\000\000\000\0079\001_\001`\002\016\002\022\006\000\000\001V\001h\000\000\002\019\002\012\000\000\000\001m\001\001W\000\000\000\000\000\000\002\007\001a\000\006\000\000\000\000\000\000\006\002\b\000\000\000\000\000\000\002\n\002\011\002\016\001Z\006\000\000\001[\001h\000\000\002\019\000\000\001]\001e\003l\001+\001_\001`\001h\t'\001j\002\012\000\003q\001+\000\000\000\000\000\000\007>\000\000\003l\001+\000\000\000\000\000\000\003\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\003\003n\003\000\000\000\000\000\000\002\015\003r\000\000\011W\004\000\000\001Z\000\000\003m\001[\001d\003n\003\000\000\001]\000\000\000\000\000\000\001_\001`\002\022\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\001\000\000\003l\001+\000\000\t(\t)\001a\000\012\002\015\000\000\007%\000\000\003l\001+\000\000\000\000\000\000\002\016\001\000\000\000\003\001h\001d\002\019\000\000\000\000\001e\002\022\006\000\000\000\000\001h\003\001j\003m\001V\000\000\003n\003\000\000\000\000\000\000\001m\001r\001W\004\003m\000\000\000\000\003n\003\000\000\000\000\000\000\004\000\000\000\000\002\016\000\000\000\000\000\000\004\001h\000\000\002\019\000\000\000\000\000\000\003l\001+\000\000\000\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\000\000\001d\000\000\000\000\000\000\000\000\001\000\000\t@\003\003l\001+\000\000\r\147\tC\000\000\000\000\000\000\000\000\000\000\000\000\001m\001r\003m\000\000\000\000\003n\003\004\000\000\005c\003\000\000\000\000\000\000\000\000\000\000\004\000\000\011S\000\000\004\001Z\005d\004\003m\005c\007x\003n\003\001]\001e\011T\004\001_\001`\001h\000\000\001j\005d\000\000\000\000\000\000\007{\tV\000\000\000\000\000\000\000\000\tD\005j\005m\000\000\000\000\001a\000\000\000\000\000\000\000\011U\011V\000\000\003l\001+\000\000\000\000\005j\005m\000\000\r\000\000\003k\000\000\000\000\000\000\000\000\000\000\000\000\005n\000\000\003k\000\000\000\000\003\004\000\000\005c\003k\005p\000\000\004\000\000\000\000\000\000\005n\000\000\004\003m\005c\005d\003n\003\000\000\007\137\005p\002\000\000\003l\001+\000\000\000\000\005d\004\000\000\000\000\007\000\000\000\000\tW\tX\000\000\000\000\014P\000\000\000\000\000\000\005j\005m\003\000\000\000\000\001d\000\000\002w\000\002\000\000\002\005j\005m\002\004\000\000\003m\000\000\002\003n\003\003k\000\000\002\005\000\000\001m\001\004\005n\005c\000\000\000\000\000\000\003k\000\000\000\000\003[\000\000\005p\000\000\005n\000\000\005d\000\000\000\000\000\000\007\000\000\000\000\004\005p\005c\000\000\000\000\001V\001e\000\000\000\000\004\000\000\001h\000\000\001j\001W\005d\000\000\007\000\000\007\005j\005m\000\000\000\000\000\000\000\000\000\000\002{\000\000\t\127\000\000\001V\000\000\000\000\000\000\t\130\000\000\000\000\000\000\000\000\001W\003k\005j\005m\000\000\000\000\000\000\000\000\005n\000\000\000\000\002\002\007\000\000\004\006\000\000\007\005p\000\000\002\b\000\000\000\000\003k\002\n\002\011\000\000\000\000\0027\0028\005n\000\000\004\000\000\005c\000\000\000\000\000\000\000\000\000\000\005p\000\000\000\000\bz\002\012\000\000\000\005d\000\000\003\t\131\007\001Z\000\000\000\000\001[\000\000\000\000\000\000\000\000\001]\000\000\000\000\0029\001_\001`\002:\003\000\000\000\000\000\000\000\000\000\000\001V\005j\005m\000\000\004\001Z\005c\000\000\001[\001W\000\000\001a\000\001]\003l\001+\002\001_\001`\005d\000\000\000\000\003k\007\000\000\000\000\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\000\000\003\000\000\001a\000\005p\0027\0028\000\000\003\000\002\000\000\005j\005m\002\015\003m\000\000\000\000\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\003k\002\022\006\000\000\003\006\0027\0028\005n\0029\000\000\003\002:\003\000\000\000\000\000\000\000\000\005p\000\000\000\000\001Z\001d\000\000\000\000\000\000\000\000\003\000\000\001]\000\000\000\000\002\016\001_\001`\000\000\000\000\001h\000\000\002\019\000\000\0029\001m\001r\002:\003\000\000\000\000\001d\000\000\000\000\000\000\002\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\001m\001r\004\000\000\001e\000\000\004\000\000\005\001h\000\000\001j\000\000\000\000\002\003\002\000\000\000\000\003l\001+\005\000\000\002\000\000\b9\000\000\000\000\003\0029\001e\000\000\002:\003\000\000\001h\000\000\001j\000\000\000\000\003\003\002\006\002\000\000\000\000\003\012\000\000\000\000\005\005\0027\0028\000\000\000\000\003m\000\000\000\000\003n\003\000\000\003\000\000\001d\000\000\000\000\004\001W\005c\000\000\005\000\000\003\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\005d\000\000\001m\001\b=\0029\005\000\000\002:\003\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\005j\005m\000\000\b\000\000\001e\000\000\000\000\000\000\003\001h\000\000\001j\001\000\000\000\000\004\000\000\005\000\000\000\000\003k\0027\0028\000\000\000\000\005\005\005n\000\000\000\000\005\000\000\000\000\004\b\000\000\001Z\005p\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\001_\001\011\000\000\006\005\005\000\000\000\000\0029\005\005\002:\003\000\000\000\000\005\003\000\000\0027\0028\001a\000\000\000\004\000\000\005\000\000\002\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\001V\005\005\003\000\000\000\000\b\000\000\000\000\001W\000\000\005\004\000\000\005c\000\000\000\000\0029\003\000\002\002:\003\000\000\000\000\000\000\000\000\000\000\005d\000\000\005\005\b\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005\003\006\000\000\000\000\000\000\005\000\000\000\000\000\000\005j\005m\003\005\005\003\000\000\001d\b\000\000\000\000\000\000\000\000\005\000\000\000\000\0029\000\000\000\000\002:\003\003k\000\000\000\000\000\000\000\000\000\000\000\000\005n\000\000\000\000\005\005\001Z\000\000\000\000\000\000\000\000\005p\0027\0028\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\000\000\003\000\000\005\000\000\000\000\0027\0028\001\000\000\005\003\000\000\003\148\000\000\001\001a\000\000\000\004\005\005\000\000\000\000\000\000\0029\000\000\003\002:\003\000\000\001\000\000\000\000\005\0027\0028\000\000\b\000\000\000\000\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\003\000\000\000\000\000\000\000\000\005\005\000\000\004\000\000\005\000\000\000\000\000\000\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\005\000\000\000\000\005\b\000\000\000\000\000\000\0027\0028\005\000\000\000\000\000\000\001d\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\003\000\000\000\000\000\000\003\001m\001\000\000\000\000\004\000\000\005\000\000\000\000\0029\000\000\000\000\002:\003\005\003\000\000\000\000\000\000\005\000\000\005\000\000\b\000\000\000\000\005\000\000\000\000\000\000\001e\005\000\000\0027\0028\001h\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\006\"\000\000\002\000\000\000\000\000\000\004\000\000\005\002\000\000\005\0029\000\000\000\000\002:\003\000\000\005\000\000\000\000\005\004\000\000\005\b\000\000\003\002\005\000\000\000\000\006'\000\000\0027\0028\000\000\000\000\005\000\000\000\000\003\b\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\004\000\000\005\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\005\005\005\000\000\0029\005\b\002:\003\000\000\000\000\000\000\005\000\000\000\000\000\000\001V\000\000\000\000\003\000\000\005\005\001*\001+\001W\000\000\002\005\005\005\0027\0028\0029\000\000\003\002:\003\005\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\003\000\000\005\000\000\000\000\005\b\r\157\000\000\rC\000\000\000\000\000\000\000\000\0029\005\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\005\005\0027\0028\000\000\000\000\000\000\000\000\0027\0028\003\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\005\001Z\003\002\000\000\002\000\000\005\003\001]\000\000\005\000\000\001_\001`\b\0029\005\003\002:\003\000\000\0029\000\000\000\000\002:\003\000\000\000\000\000\000\003\000\002\000\000\001a\000\002\000\000\002\005\005\0027\0028\000\000\rD\002\000\000\000\000\000\000\000\000\000\000\000\000\003\004\000\000\005\000\000\000\000\000\000\003\006\005\000\000\003\003]\000\000\000\000\000\000\005\005\000\000\000\000\000\000\b\000\000\000\000\000\000\0029\005\000\000\002:\003\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\005\000\000\000\000\000\000\b\000\000\000\000\003\0027\0028\004\000\000\ra\003\001d\000\000\000\000\000\000\004\005\005\000\000\000\000\000\000\000\000\rb\005\005\005\003\002\000\000\000\000\005\001m\004G\005\b\000\000\000\000\004J\000\000\000\000\0029\000\000\005\002:\003\005\000\000\000\000\000\000\rc\rd\000\000\005\000\000\000\000\0027\0028\005\005\000\000\000\000\001e\005\003\000\000\000\000\001h\004\001j\005\003k\000\000\006\"\004\002\005\003\000\000\005\000\000\000\000\002\005\000\000\000\000\005\b\000\000\005\000\000\0029\000\000\b\002:\003\005\000\000\000\000\000\000\003\002\0027\0028\000\000\006'\000\000\002\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\004\003\005\000\000\005\000\000\002\002\000\000\0029\005\005\002:\003\000\000\005\000\000\005\000\000\b\000\000\005\000\000\0027\0028\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000\000\000\000\000\000\000\005\005\003\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\0027\0028\000\000\000\000\000\000\0029\000\000\000\000\002:\003\005\004\000\000\005\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\005\005\000\000\000\000\b\000\000\000\000\000\000\t\0029\000\000\000\000\002:\003\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\0027\0028\000\000\004\002\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\005\000\000\000\000\003\b\005\000\000\000\000\0029\000\000\000\000\002:\003\003\000\002\005\003\0029\0027\0028\002:\003\000\000\000\000\000\000\000\000\000\000\005\005\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\003\006\000\000\000\000\000\000\005\003\000\000\005\b\000\000\000\000\000\000\0029\000\000\005\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\005\003\000\000\000\000\b\000\000\005\000\000\000\000\0029\003\000\000\002:\003\000\000\004\005\005\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\005\005\000\000\005\000\000\0027\0028\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\003\000\000\005\000\000\000\000\000\000\000\000\003\000\000\005\000\000\005\005\0029\000\000\000\000\002:\003\004\005\005\0029\000\000\000\000\002:\003\000\000\004\000\000\005\000\000\000\000\005\005\000\000\000\000\000\000\b\000\000\005\000\000\000\000\005\000\000\000\000\000\000\t\001\000\000\000\000\005\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\004\000\000\005\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\005\t\t\000\000\000\000\000\000\000\000\000\000\005\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\003\003l\001+\000\000\000\000\005\005\005\003\0027\0028\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\005\000\000\003\000\000\t\012\005\000\000\000\000\003m\000\000\000\000\003n\003\000\000\000\000\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\0027\0028\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\000\000\005\000\000\005\000\000\003\000\000\t\015\005\000\000\000\000\005\000\000\000\000\005\t\018\000\000\000\000\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\0027\0028\006\"\000\000\002\000\000\004\000\000\000\000\005\000\000\002\000\000\003\003\000\000\005\005\000\000\000\000\000\000\003\000\000\000\000\005\000\000\005\0029\000\000\003\002\002:\003\000\000\006'\005\0029\000\000\000\000\002:\003\000\000\000\000\000\000\000\000\000\000\003q\001+\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\004\000\000\005c\000\000\003\000\000\000\000\000\000\004\000\000\005\003r\000\000\011W\004\005d\000\000\000\000\0029\t\020\000\000\002:\003\005\002\000\000\000\000\t\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\003\000\000\0027\0028\000\000\005\005\000\000\003\000\000\0027\0028\000\000\004\000\000\005\000\000\000\000\003k\000\000\000\000\000\000\000\000\003\000\000\005n\005\000\000\005\t\000\000\003\t\026\005\000\000\005p\000\000\0029\000\000\000\000\002:\003\000\000\005\000\000\0029\000\000\000\000\002:\003\000\000\000\000\000\000\004\000\000\005\005\002\000\000\000\000\003\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\004\000\000\005\000\000\000\000\005\000\000\005\000\000\000\000\000\000\t\005\003\000\002\005\000\000\000\000\000\000\0112\000\000\011g\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\003l\001+\000\000\003\006\005\005\000\000\004\000\000\011S\000\000\000\000\000\000\003\004\003\005\005\000\000\000\000\000\000\003\011T\003\005\005\000\000\0029\000\000\005\002:\003\005\0117\005\003m\000\000\000\000\003n\003\000\000\000\000\005\000\000\000\000\001*\001+\000\000\000\000\011U\011V\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\003k\000\000\000\000\003\000\000\000\000\000\000\005\004\000\000\005\r\135\000\000\rC\005\003\004\0029\005\000\000\002:\003\000\000\005\005\000\000\000\000\011B\000\000\0029\000\000\005\002:\003\000\000\011H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\0027\0028\000\000\000\000\005\005\004\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\000\000\005\005\000\000\0029\000\000\000\000\002:\003\005\000\000\005\003m\000\000\000\000\003n\003\000\000\000\000\005\rD\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\004\003\005c\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\011L\000\000\000\000\000\000\005d\000\000\000\000\000\000\011c\001*\001+\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\004\000\000\ra\000\000\000\000\000\000\003\004\003\005\005\rq\000\000\rC\003\rb\004\005\003k\004\0029\005\005\002:\003\005n\011\005\0029\000\000\000\000\002:\003\000\000\005\005p\000\000\000\000\011\000\000\000\000\000\000\rc\rd\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\003k\000\000\000\000\003\000\000\000\000\000\000\005\004\000\000\005\000\000\000\000\000\000\005\003\004\003m\005c\005\003n\003\000\000\005\005\000\000\005\011\000\000\0029\000\000\005d\002:\003\rD\011\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\003l\001+\000\000\000\000\005\005\003\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\000\000\005\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005\003m\000\000\000\000\003n\003\000\000\000\000\005p\004\000\000\ra\000\000\000\000\000\000\000\000\004\000\000\000\000\004\000\000\005\000\000\000\000\rb\000\000\000\000\004\003\005\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\011\000\000\000\000\000\000\005\000\000\000\000\000\000\011\001*\001+\000\000\000\000\rc\rd\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\003k\000\000\000\000\000\000\000\000\000\000\003\004\004\005c\005\001,\000\000\rC\003\000\000\004\005\005\004\003m\005\005d\003n\003\005\011\005\003m\000\000\000\000\003n\003\000\000\005\005\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\0029\005c\005\002:\003\000\000\005d\005p\000\000\005\011\000\000\003m\000\000\005d\003n\003\rD\011\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\004\000\000\ra\000\000\000\000\000\000\000\000\003\000\000\000\000\004\000\000\005c\000\000\000\000\rb\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\011\000\000\000\000\000\000\005d\000\000\002\000\000\011\000\000\000\000\000\000\000\000\rc\rd\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\003k\000\000\002\000\000\002\000\000\003\004\004\005\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005\003n\003\005n\011\005p\003m\002\000\000\003n\003\002\005d\005p\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\005\004\000\000\005c\000\000\000\000\000\000\005\003\004\003m\005c\003k\003n\003\000\000\005d\005\000\000\005n\011\000\000\0029\002\005d\002:\003\000\000\011\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\0027\0028\000\000\001W\005j\005m\004\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\0029\000\000\000\000\002:\003\005n\000\000\005p\0029\000\000\000\000\002:\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\003\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\012\n\001Z\000\000\000\000\005d\000\000\002\000\000\012\025\002\002\000\000\000\000\001_\001\015 \000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\0027\0028\000\000\000\000\005j\005m\001a\000\000\000\002\002\002\000\000\003\004\003\005c\003k\002\000\000\000\000\003\000\000\003\005n\003k\004\003m\005\005d\003n\003\005n\012\028\005p\0029\002\000\000\002:\003\002\005\005p\000\000\000\000\012%\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005\000\000\000\000\001d\005n\003\004\0029\005\005\002:\003\000\000\005\005p\000\000\005\012L\000\000\0029\002\005\002:\003\000\000\012Q\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\0027\0028\000\000\000\000\005\005\003\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\001\000\000\000\000\000\000\003\003\148\000\000\001\005\000\000\000\000\000\000\003\000\000\000\000\005\005\000\000\0029\000\000\000\000\002:\003\005\000\000\005\003m\000\000\000\000\003n\003\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\003\005\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\012U\000\000\000\000\000\000\005\000\000\002\000\000\012~\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\002\002\002\000\000\003\004\003\005\003k\002\000\000\000\000\003\000\000\004\005n\005\004\003m\005\005\003n\003\005\012\142\005p\0029\002\000\000\002:\003\002\005\005\000\000\000\000\012\146\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\003\000\000\000\000\000\000\005\004\000\000\005\000\000\000\000\000\000\005\003\004\0029\005c\005\002:\003\000\000\005\005\000\000\005\012\000\000\003m\002\005d\003n\003\000\000\012\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005\005\003\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\000\000\005\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\r\001\000\000\000\000\000\000\005\000\000\002\000\000\r\014\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\002\002\002\000\000\003\004\004\005\003k\002\000\000\000\000\003\000\000\004\005n\005\004\003m\005c\005\003n\003\005\r<\005p\003m\003\002\000\000\003n\003\003\016\005d\005\000\000\000\000\r@\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\005\004\000\000\005c\000\000\000\000\000\000\005\003\004\003m\005c\003k\003n\003\000\000\005d\005\000\000\005n\014B\000\000\003m\002\005d\003n\003\000\000\014D\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\014\000\000\000\000\000\000\005d\000\000\002\000\000\014\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\002\003\006\002\000\000\003\004\004\005c\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005d\003n\003\005n\014\005p\003m\003\002\000\000\003n\003\003\024\005d\005p\000\000\000\000\015\005\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005d\005p\000\000\005n\015\016\000\000\003m\002\005d\003n\003\000\000\015\018\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\015\030\000\000\000\000\000\000\005d\000\000\002\000\000\015\"\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\002\003\006\002\000\000\003\004\004\005c\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005d\003n\003\005n\015Y\005p\003m\003\002\000\000\003n\003\003y\005d\005p\000\000\000\000\015^\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005d\005p\000\000\005n\015`\000\000\003m\002\005d\003n\003\000\000\015b\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\015d\000\000\000\000\000\000\005d\000\000\002\000\000\015f\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\002\003\006\002\000\000\003\004\004\005c\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005d\003n\003\005n\015h\005p\003m\003\002\000\000\003n\003\003\154\005d\005p\000\000\000\000\015j\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005d\005p\000\000\005n\015l\000\000\003m\002\005d\003n\003\000\000\015n\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\015p\000\000\000\000\000\000\005d\000\000\002\000\000\015r\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\002\003\006\002\000\000\003\004\004\005c\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005d\003n\003\005n\015t\005p\003m\003\002\000\000\003n\003\004\005d\005p\000\000\000\000\015v\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005d\005p\000\000\005n\015x\000\000\003m\002\005d\003n\003\000\000\015z\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003l\001+\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\015|\000\000\000\000\000\000\005d\000\000\002\000\000\015~\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\002\003\006\002\000\000\003\004\004\005c\003k\002\000\000\000\000\003\000\000\004\005n\003k\004\003m\005c\005d\003n\003\005n\015\128\005p\003m\003\002\000\000\003n\003\006Y\005d\005p\000\000\000\000\015\132\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005c\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005d\005p\000\000\005n\015\131\000\000\003m\002\005d\003n\003\000\000\015\134\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\0027\0028\000\000\000\000\005j\005m\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\000\000\000\000\000\000\003\000\000\000\000\005n\003k\000\000\0029\000\000\000\000\002:\003\005n\000\000\005p\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\002\005c\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\015\136\000\000\000\000\000\000\005d\000\000\000\000\000\000\015\138\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\005j\005m\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\003\006\000\000\000\000\003\004\003\005c\003k\000\000\000\000\000\000\003\000\000\004\005n\003k\004\0029\005c\005d\002:\003\005n\015\140\005p\003m\000\000\000\000\003n\003\000\000\005d\005p\000\000\000\000\015\146\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\003\000\000\000\000\000\000\003k\004\000\000\005\000\000\000\000\000\000\005n\003\004\003m\005c\003k\003n\003\000\000\005\005p\000\000\005n\015\153\000\000\003m\000\000\005d\003n\003\000\000\015\156\005p\000\000\000\000\000\000\001V\000\000\000\000\000\000\003\000\000\003l\001+\000\000\001W\005\005\004\000\000\003l\001+\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\005\000\000\000\000\000\000\003\000\000\000\000\005\003k\000\000\003m\000\000\000\000\003n\003\005n\000\000\005\003m\000\000\000\000\003n\003\000\000\000\000\005p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\004\000\000\005\000\000\000\000\000\000\000\000\000\000\004\004\005c\000\000\000\000\000\000\000\000\005\000\000\001V\000\000\015\159\001Z\000\000\000\000\005d\000\000\000\000\001W\015\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\001a\000\000\000\000\000\000\000\000\000\001V\000\000\004\004\005c\005\000\000\000\000\000\000\001W\000\000\004\005\003k\004\001V\005c\005d\000\000\000\000\005n\015\005\000\000\001W\000\000\000\000\000\000\000\000\005d\005p\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001V\005j\005m\001Z\000\000\000\000\006\025\000\000\000\000\001W\001V\001]\000\000\005j\005m\001_\001`\000\000\000\000\001W\000\000\000\000\003k\004\000\000\005c\000\000\000\000\001d\005n\000\000\004\000\000\005c\003k\001a\000\000\000\005d\005p\000\000\005n\015\000\000\001Z\000\000\005d\000\000\001m\004\015\005p\001]\000\000\005\002\000\000\001_\001`\000\000\001Z\000\000\001V\000\000\000\000\000\000\005j\005m\001]\000\000\000\000\001W\001_\001`\005j\005m\000\000\001a\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\003k\001Z\000\000\000\000\000\000\001a\000\005n\003k\001]\000\000\001Z\000\000\001_\001`\005n\000\000\005p\000\000\001]\000\000\000\000\000\000\001_\001`\005p\001d\000\000\001V\000\000\000\000\000\000\000\000\001a\000\000\000\000\000\001W\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\001m\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\001Z\000\000\000\000\007\000\000\001d\001W\001V\001]\000\000\000\000\000\000\001_\001`\001e\000\000\001W\000\000\000\000\001h\001d\001j\000\000\000\000\000\000\001m\007\000\000\000\000\000\000\000\007\003\000\000\001a\000\000\000\000\000\000\000\000\000\001V\000\000\001m\007\000\000\000\000\000\000\000\007\021\000\000\001W\001d\000\000\000\000\000\000\000\000\001Z\000\000\001e\000\000\000\000\001d\000\000\001h\001]\001j\000\000\000\000\001_\001`\000\000\001m\007-\001e\000\000\000\000\0070\000\000\001h\000\000\001j\001m\007-\001V\000\000\000\000\007B\001Z\001a\000\000\000\000\000\001W\001V\000\000\001]\000\000\001Z\000\000\001_\001`\001e\001W\000\000\000\000\001]\001h\000\000\001j\001_\001`\001e\001d\000\000\000\000\000\000\001h\000\000\001j\001a\000\003q\001+\000\000\000\000\000\000\000\000\000\000\001Z\001a\000\000\000\001m\003\000\000\000\000\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\014\159\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\001V\003r\000\000\011W\004\001a\000\001e\000\000\001W\001d\000\000\001h\000\000\001j\001Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001]\000\000\001Z\000\000\001_\001`\000\000\001m\007\000\000\000\001]\000\000\007\000\000\001_\001`\000\000\000\000\001d\000\000\001V\000\000\000\000\000\000\001a\000\000\000\000\000\001d\001W\000\000\000\000\000\000\000\000\001a\000\000\000\001e\001m\007\000\000\000\000\000\001h\007\001j\000\000\000\000\000\000\001m\007-\000\000\000\000\000\000\bf\002\007\000\000\000\000\000\000\000\000\001d\001V\000\000\002\b\000\000\001Z\004\002\n\002\011\001e\001W\000\000\000\000\001]\001h\000\000\001j\001_\001`\001e\001m\007-\000\000\002\004\001h\bs\001j\002\012\000\000\000\000\000\000\000\002\005\000\000\000\000\000\000\000\000\001a\000\000\000\000\000\000\000\001d\000\000\000\000\011]\000\000\000\000\001Z\000\000\001e\000\000\001d\000\000\000\000\001h\001]\001j\000\000\000\000\001_\001`\001m\014\000\000\000\000\000\000\000\000\001V\004\000\000\011S\001m\r\000\000\000\000\000\000\001W\000\000\000\000\001a\000\000\000\000\000\011T\002\004\000\000\000\000\001Z\000\000\000\000\000\000\001e\000\000\002\005\000\000\001]\001h\000\000\001j\001_\001`\001e\000\000\002\015\000\000\000\000\001h\000\000\001j\002\007\011U\011V\000\000\001d\000\000\000\000\000\000\002\b\000\000\001a\000\002\n\002\011\002\022\002\026\000\000\000\000\000\000\002\004\000\000\000\000\003k\000\000\001m\001q\000\000\000\000\002\005\000\000\000\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\002\016\001Z\000\000\001d\000\000\001h\001W\002\019\000\000\001]\001e\000\000\000\000\001_\001`\001h\000\000\001j\002\007\002\004\000\000\000\000\000\000\001m\001\000\000\002\b\000\000\002\005\000\000\002\n\002\011\000\000\001a\000\000\000\000\000\001V\000\000\000\000\000\000\000\000\000\000\001d\000\000\000\000\001W\000\000\000\000\000\000\002\012\000\000\000\001e\000\000\000\000\000\000\000\000\001h\001V\001j\000\000\002\007\001m\001\002\015\000\000\000\000\001W\000\000\002\b\000\000\000\000\000\000\002\n\002\011\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\001Z\002\022\002#\000\000\000\000\000\000\001W\000\000\001]\001e\002\012\000\001_\001`\001h\001V\001j\000\000\000\000\000\000\000\000\000\000\002\007\000\000\001W\000\000\001d\000\000\000\000\000\000\002\b\002\016\001a\000\002\n\002\011\001h\000\000\002\019\000\000\001Z\002\004\000\000\002\015\000\000\000\000\001m\002Q\001]\000\000\002\005\000\000\001_\001`\002\012\000\000\000\000\000\002\004\000\000\000\000\000\000\001Z\002\022\002q\000\000\000\000\002\005\000\000\000\000\001]\000\000\001a\000\001_\001`\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\001Z\000\000\000\000\002\015\000\000\000\000\000\000\000\000\001]\002\016\001a\000\001_\001`\001h\000\000\002\019\000\000\001Z\002\004\000\000\000\000\000\000\002\022\002\001d\001]\000\000\002\005\000\000\001_\001`\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\007\001m\003\014\002\015\000\000\000\000\001a\000\002\b\002\016\000\000\000\000\002\n\002\011\001h\000\000\002\019\002\007\000\000\000\000\000\000\001d\000\000\002\022\003?\002\b\000\000\000\000\000\000\002\n\002\011\001e\002\012\000\000\000\000\000\001h\002\004\001j\000\000\000\000\001m\003\001d\000\000\000\000\002\005\000\000\000\000\002\012\000\000\000\000\000\002\016\000\000\000\000\000\000\000\000\001h\000\000\002\019\000\000\002\007\001m\003\001d\000\000\000\000\002\004\000\000\002\b\001e\000\000\000\000\002\n\002\011\001h\002\005\001j\000\000\000\000\000\000\000\000\001d\000\000\001m\004I\000\000\000\000\000\000\002\004\000\000\000\000\001e\002\012\000\000\000\000\000\001h\002\005\001j\000\000\000\000\001m\004\000\000\000\000\000\000\000\000\002\015\000\000\000\000\001V\000\000\000\000\001e\000\000\000\000\000\000\000\000\001h\001W\001j\000\000\002\007\000\000\002\015\000\000\000\000\002\022\005\001\000\000\002\b\001e\000\000\000\000\002\n\002\011\001h\000\000\001j\000\000\000\000\001V\000\000\000\000\002\022\005\026\000\000\000\000\000\000\000\000\001W\000\000\000\000\002\007\002\012\000\000\000\002\016\001V\000\000\000\000\002\b\001h\000\000\002\019\002\n\002\011\001W\000\000\002\015\000\000\000\000\000\000\000\000\002\016\002\007\000\000\000\000\000\000\001h\000\000\002\019\000\000\002\b\000\000\002\012\000\002\n\002\011\002\022\005\\\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\000\000\000\000\001V\000\000\000\000\001]\000\000\002\012\000\001_\001`\001W\000\000\000\000\000\000\000\000\001V\000\000\000\000\002\016\000\000\000\000\000\000\000\000\001h\001W\002\019\000\000\001Z\001a\000\002\015\000\000\001V\000\000\000\000\001]\000\000\000\000\000\000\001_\001`\001W\000\000\000\000\001Z\000\000\000\000\000\000\000\000\000\000\002\022\005\001]\000\000\000\000\000\000\001_\001`\000\000\001a\000\002\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\000\002\016\002\022\005\002\015\000\000\001h\000\000\002\019\001Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001]\000\000\000\000\000\000\001_\001`\001Z\002\022\005\001d\000\000\000\000\000\000\000\000\001]\002\016\000\000\000\000\001_\001`\001h\000\000\002\019\001Z\001a\000\000\000\000\000\000\000\001m\006\022\001]\000\000\000\000\000\000\001_\001`\002\016\001a\000\001d\000\000\001h\001V\002\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001W\000\000\000\000\001a\000\001d\000\000\001e\001m\006\027\000\000\000\000\001h\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\001m\006$\000\000\000\000\000\000\000\000\002\005\002\004\000\000\000\000\000\000\000\000\000\000\001e\000\000\000\000\002\005\000\000\001h\000\000\001j\000\000\000\000\000\000\001d\000\000\000\000\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\001d\000\000\000\000\000\000\001*\001+\001m\006r\000\000\000\000\002\004\000\000\000\000\001V\000\000\001Z\000\000\001d\000\000\002\005\001m\006\001W\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\001m\006\000\000\014\001h\rC\001j\000\000\000\000\002\007\001a\000\000\000\001e\001V\000\000\000\000\002\b\001h\002\007\001j\002\n\002\011\001W\000\000\000\000\000\000\002\b\000\000\000\000\001e\002\n\002\011\000\000\000\000\001h\001V\001j\000\000\000\000\000\000\002\012\000\000\000\000\000\001W\000\000\000\000\000\000\000\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\007\000\000\000\000\001Z\000\000\000\000\000\000\000\000\002\b\000\000\000\000\001]\002\n\002\011\000\000\001_\001`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\002\rD\002\000\000\002\012\000\000\000\001a\000\002\000\000\000\000\000\000\001Z\000\000\000\000\000\000\000\000\000\000\001m\006\001]\000\000\000\000\000\000\001_\001`\003\002\006\002\001V\002\015\003\012\000\000\000\000\000\000\001Z\003l\001+\001W\000\000\002\015\000\000\000\000\001]\000\000\001a\000\001_\001`\001e\002\022\006\000\000\000\000\001h\000\000\001j\000\000\000\000\000\000\002\022\006\000\000\000\000\004\000\000\ra\001a\000\000\000\000\000\003m\000\000\000\000\003n\014d\000\000\000\000\000\000\rb\002\016\002\015\000\000\001V\001d\001h\000\000\002\019\000\000\001V\002\016\002\001W\002\000\000\001h\000\000\002\019\001W\000\000\000\000\002\022\007\002\000\000\001m\007/\rc\rd\000\000\000\000\000\000\007\149\000\000\000\000\000\000\000\000\001Z\000\000\000\000\000\000\000\000\000\000\001d\002\001]\002\000\000\003k\001_\001`\000\000\002\016\002\000\000\001e\000\000\001h\000\000\002\019\001h\000\000\001j\001m\007k\001d\000\000\006\n\000\000\001a\000\003\002\006\002\001V\000\000\003\012\000\000\000\000\000\000\004\000\000\000\000\001W\000\000\000\000\001m\007s\000\000\000\000\000\000\002\001Z\000\000\001e\000\000\002\000\000\001Z\001h\001]\001j\002\000\000\001_\001`\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\000\000\000\000\001e\000\000\003\000\002\000\000\001h\000\000\001j\001a\000\002\000\000\002\000\000\001a\000\002\000\000\002\002\002\000\000\000\000\000\000\000\000\002\000\000\004\000\000\005c\003\006\001d\000\000\000\000\000\000\000\000\000\000\003\002\006\002\000\000\007\144\003\012\005d\003\002\006\002\001Z\000\000\003\012\000\000\000\000\001V\001m\007\158\001]\000\000\000\000\000\000\001_\001`\001W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\006\n\000\000\001a\000\000\000\000\000\001e\000\000\000\000\000\000\001d\001h\000\000\001j\000\000\003k\001d\000\000\001*\001+\000\000\000\000\000\000\002\000\000\002\002\000\000\000\000\000\000\001m\007\002\000\000\000\000\000\000\001m\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\000\000\003\000\002\007\000\000\014\002\rC\002\002\000\000\001e\000\000\001Z\000\000\002\001h\001e\001j\000\000\000\000\001]\001h\000\000\001j\001_\001`\000\000\000\000\003\006\001d\000\000\006\n\003\002\006\002\000\000\000\000\003\012\006\n\002\000\000\002\002\000\000\000\000\001a\000\002\002\000\000\001m\007\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\002\001V\002\000\000\000\000\003\002\006\002\000\000\000\000\003\012\001W\002\000\000\002\000\000\000\000\002\000\000\002\001e\002\003\000\002\000\000\001h\002\001j\003\000\002\000\000\rD\000\000\002\000\000\002\000\000\002\000\000\003\002\006\002\000\000\002\003\012\003\002\006\002\001V\000\000\003\012\000\000\003\006\000\000\000\000\000\000\000\000\001W\003\006\b\\\000\000\000\000\003\002\006\002\001d\000\000\003\012\000\000\000\000\000\000\000\000\002\004\002\000\000\002\004\000\000\000\000\000\000\000\000\000\000\002\005\000\000\000\000\002\005\001m\b\128\000\000\000\000\000\000\000\000\000\000\001Z\bW\000\000\006\n\000\000\004\000\000\ra\001]\000\000\000\000\000\000\001_\001`\002\000\000\000\000\000\000\000\000\002\rb\000\000\000\000\001e\000\000\000\000\002\000\000\001h\000\000\001j\000\000\001a\000\b\002\006\n\000\000\000\000\b\000\000\000\000\000\000\000\000\001Z\000\000\000\000\rc\rd\000\000\000\000\001V\001]\003\000\002\b\001_\001`\000\000\002\001W\000\000\001V\000\000\000\000\000\000\000\000\002\007\003k\006\n\002\007\001W\000\000\000\000\006\n\002\b\001a\000\002\b\002\n\002\011\003\006\002\n\002\011\000\000\000\000\003\000\002\000\000\000\000\006\n\000\000\002\000\000\000\000\000\000\000\000\002\000\000\002\012\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\001d\000\000\000\000\000\000\002\003\006\000\000\000\000\000\000\001V\003\000\002\000\000\000\000\000\000\003\000\002\000\000\001W\000\000\001m\t1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\003\000\002\000\000\000\000\000\000\001V\001]\003\006\000\000\001Z\001_\001`\003\006\001d\001W\000\000\001V\001]\000\000\001e\000\000\001_\001`\000\000\001h\001W\001j\000\000\003\006\000\000\001a\000\000\000\001m\t4\000\000\002\015\000\000\000\000\002\015\000\000\001a\000\000\000\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\022\ta\000\000\002\022\td\000\000\000\000\001e\000\000\001Z\000\000\000\000\001h\000\000\001j\000\000\002\004\001]\000\000\000\000\000\000\001_\001`\000\000\000\000\002\005\000\000\000\000\000\000\000\000\002\016\000\000\000\000\002\016\001V\001h\001Z\002\019\001h\000\000\002\019\001a\000\001W\001]\000\000\000\000\001Z\001_\001`\000\000\001d\000\000\000\000\000\000\001]\000\000\000\000\000\000\001_\001`\000\000\001d\000\000\000\000\000\000\002\000\000\001a\000\000\000\001m\t\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\001m\n\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\002\000\000\002\000\000\000\000\001e\000\000\002\007\000\000\002\001h\000\000\001j\000\000\000\000\002\b\001e\000\000\000\000\002\n\002\011\001h\001d\001j\000\000\001Z\000\000\003\002\006\002\002\000\000\003\012\000\000\001]\000\000\002\000\000\001_\001`\002\012\000\000\000\001m\ng\002\004\000\000\000\000\000\000\000\000\001d\000\000\000\000\000\000\002\005\000\000\000\000\000\000\001a\000\002\001d\002\001V\000\000\000\000\002\000\000\002\002\001m\nm\001W\001e\000\000\002\000\000\000\000\001h\000\000\001j\001m\n\146\000\000\000\000\000\000\000\000\003\002\006\002\000\000\000\000\003\012\002\003\002\006\002\000\000\000\000\003\012\000\000\000\000\001e\000\000\000\000\000\000\000\000\001h\000\000\001j\000\000\000\000\000\000\001e\011\000\000\000\000\000\000\001h\002\015\001j\000\000\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\007\000\000\000\000\001d\000\000\002\022\n\000\000\002\b\000\000\000\000\000\000\002\n\002\011\000\000\006\n\000\000\000\000\001Z\002\000\000\000\000\000\000\001m\n\002\001]\000\000\000\000\002\001_\001`\002\012\000\000\000\002\016\000\000\000\000\002\011\001h\000\000\002\019\000\000\000\000\012,\000\000\000\000\000\000\000\000\001a\000\000\000\001e\001V\000\000\000\000\000\000\001h\002\001j\002\002\001W\000\000\003\000\002\000\000\002\000\000\000\000\000\000\000\000\000\000\006\n\002\000\000\000\000\000\000\000\000\006\n\000\000\000\000\000\000\000\000\000\000\003\002\006\002\000\000\000\000\003\012\000\000\002\003\006\002\000\000\000\000\002\000\000\000\000\000\000\002\000\000\002\000\000\002\000\000\002\000\000\002\015\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\003\002\006\002\000\000\000\000\003\012\003\000\002\000\000\001d\000\000\002\021\003\000\002\003\002\006\002\000\000\000\000\003\012\003l\001+\000\000\000\000\001Z\000\000\003q\001+\000\000\000\000\001m\015\024\001]\002\000\000\003\006\001_\001`\003l\001+\000\000\003\006\002\016\003q\001+\000\000\000\000\001h\000\000\002\019\000\000\000\000\000\000\0154\000\000\003m\001a\000\003n\014b\001e\003r\000\000\011W\004\001h\002\001j\000\000\000\000\000\000\000\000\000\000\003m\000\000\000\000\003n\014a\003r\002\011W\004\000\000\000\000\000\000\000\000\015E\000\000\006\n\000\000\000\000\000\000\003q\001+\000\000\000\000\000\000\0027\0028\015A\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\012E\0028\000\000\000\000\000\000\000\000\000\000\006\n\000\000\000\000\000\000\000\000\000\000\003r\000\000\r\t\004\000\000\0029\001d\006\n\002:\012\138\0029\003\000\002\002:\002;\004\000\000\002\000\000\000\000\000\000\004\012F\000\000\012|\012X\001m\015\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\004\003\006\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\003\000\002\000\000\011\\\001h\000\000\001j\000\000\000\000\000\000\012E\0028\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\r\129\004\000\000\005c\000\000\000\000\000\000\004\003\006\011S\004\000\000\000\000\003l\001+\003\005d\000\000\000\000\004\003\005c\011T\000\000\004\012F\011S\012G\012X\000\000\000\000\000\000\012Y\000\000\005d\000\000\000\000\000\000\000\000\011T\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\003m\011U\011V\003n\003o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\003k\000\000\011U\011V\000\000\000\000\003k\003q\001+\004\000\000\011S\000\000\000\000\004\000\000\005\000\000\003k\004\000\000\005\000\000\003k\011T\003l\001+\000\000\000\000\005\000\000\004\000\000\012v\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003r\000\000\003s\004\012w\000\000\012Y\000\000\000\000\011U\011V\000\000\000\000\000\000\005\005\003l\001+\003m\005\005\003n\003~\000\000\000\000\000\000\000\000\0027\0028\004\003k\012x\012y\000\000\000\000\005\000\000\000\000\003q\001+\005\000\000\000\000\000\000\000\000\003q\001+\000\000\000\000\000\000\000\000\003m\005\000\000\003n\003\000\000\000\000\000\000\000\000\000\000\000\000\0029\003q\001+\002:\003\000\000\000\000\004\000\000\012v\000\000\003r\000\000\004\004\000\000\000\000\000\000\003r\000\000\004\004\012w\000\000\000\000\004\000\000\000\000\000\000\000\000\004\000\000\005c\000\000\000\000\000\000\003r\000\000\004\004\0027\0028\000\000\004\000\000\005d\000\000\000\000\000\000\012x\012y\000\000\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\005j\005m\000\000\0029\004\000\000\002:\006/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\004\000\000\011S\0029\000\000\003k\002:\006Q\000\000\000\000\004\000\000\000\000\000\000\000\000\011T\000\000\004\004\000\000\005c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005d\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\011U\011V\000\000\000\000\000\000\000\000\0027\0028\000\000\004\000\000\005c\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\004\003k\005\000\000\005d\000\000\000\000\000\000\000\000\0027\0028\004\003\011S\000\000\005\000\000\000\000\004\003k\011S\0029\000\000\000\000\002:\006n\011T\000\000\003\000\000\000\000\005j\005m\011T\000\000\000\000\004\000\000\011S\000\000\000\000\000\000\005\005\0029\0027\0028\002:\007\000\000\000\000\011T\003k\011U\011V\000\000\000\000\000\000\000\000\000\000\011U\011V\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003k\004\000\000\005\011U\011V\0029\003k\000\000\002:\007\000\000\000\000\000\000\000\000\000\000\005\004\000\000\005\000\000\000\000\000\000\003l\001+\003k\000\000\000\000\003l\001+\000\000\000\000\005\000\000\003\0027\0028\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\003l\001+\000\000\000\000\000\000\000\000\0027\0028\000\000\000\000\000\000\003\003m\005\005\003n\b6\003m\005\000\000\003n\bm\000\000\000\000\0029\000\000\000\000\002:\b\000\000\000\000\000\000\000\000\000\000\005\003m\000\000\000\000\003n\011\000\000\0029\000\000\000\000\002:\012\030\000\000\003\000\000\000\000\000\000\004\000\000\005\000\000\000\000\000\000\003l\001+\000\000\000\000\000\000\0027\0028\000\000\000\000\005\000\000\012E\0028\000\000\000\000\000\000\000\000\004\000\000\005\000\000\000\000\000\000\003l\001+\000\000\000\000\000\000\000\000\003q\001+\000\000\005\000\000\000\000\003m\005\005\003n\014\139\0029\000\000\004\002:\014\147\000\000\012F\004\012I\012X\000\000\000\000\000\000\004\003\005\000\000\005\003m\005\005\003n\014\000\000\003r\004\r\127\004\005\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\005\000\000\000\000\000\000\003l\001+\000\000\000\000\000\000\004\000\000\005c\000\000\000\000\004\000\000\005c\000\000\000\000\000\000\005\004\000\000\005\005d\000\000\004\003l\001+\005d\000\000\003\004\000\000\005c\000\000\005\012Y\004\003m\005\000\000\003n\014\000\000\000\000\000\000\005d\000\000\004\000\000\005j\005m\005\000\000\004\005j\005m\000\000\000\000\000\000\000\000\003m\005\005\003n\015\003\000\000\000\000\000\000\000\000\000\000\003k\000\000\005j\005m\000\000\003k\003l\001+\005\005\000\000\000\000\005\000\000\003l\001+\000\000\004\000\000\005c\000\000\000\000\004\003k\005\000\000\000\000\000\000\004\005\012v\000\000\005d\000\000\000\000\000\000\000\000\005\000\000\000\000\004\003m\005c\012w\003n\015\020\004\000\000\011S\003m\000\000\000\000\003n\015[\004\005d\000\000\000\000\000\000\005j\005m\011T\000\000\000\000\005\005\002\000\000\000\000\002\012x\012y\000\000\000\000\002\000\000\000\000\004\000\000\000\000\003k\000\000\005j\005m\000\000\005\002\000\000\011U\011V\000\000\005\000\000\000\000\000\000\000\000\002\000\000\002\002\000\000\002\000\000\003k\002\002\002\002\002\003k\000\000\000\000\000\000\002\000\000\000\000\002\004\002\005c\000\000\000\000\000\000\003\002\000\000\002\003\002\006f\004\000\000\b\b\003\002\005d\000\000\000\000\b\144\004\002\000\000\002\004\000\000\005c\003\002\000\000\000\000\002\012\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\003\002\000\000\002\000\000\r\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003k\000\000\005j\005m\000\000\000\000\000\000\002\000\000\000\000\002\004\000\000\005c\000\000\002\002\000\000\002\004\000\000\005c\000\000\003k\000\000\002\005d\002\000\000\000\000\000\000\000\000\000\000\000\000\005d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\002\000\000\000\000\000\000\015\014\002\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\005j\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003k\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003k\000\000\000\000\002\000\000\000\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000\003\000\002\000\000\003\000\002\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\003\006\000\000\000\000\003\006\000\000\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006")) and semantic_action = [| @@ -50637,9 +43189,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_additive = -# 4236 "reason_parser.mly" +# 4550 "reason_parser.mly" ( "+" ) -# 1660 "reason_parser.ml" +# 1782 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50662,9 +43214,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_additive = -# 4237 "reason_parser.mly" +# 4551 "reason_parser.mly" ( "+." ) -# 1685 "reason_parser.ml" +# 1807 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50694,9 +43246,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_and_class_declaration = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 1717 "reason_parser.ml" +# 1839 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -50707,12 +43259,12 @@ module Tables = struct else _startpos__2_ in -# 1798 "reason_parser.mly" +# 1926 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc ) -# 1733 "reason_parser.ml" +# 1855 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50751,15 +43303,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 1774 "reason_parser.ml" +# 1896 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 1780 "reason_parser.ml" +# 1902 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -50770,12 +43322,12 @@ module Tables = struct else _startpos__2_ in -# 1798 "reason_parser.mly" +# 1926 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc ) -# 1796 "reason_parser.ml" +# 1918 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50805,9 +43357,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_and_class_description = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 1828 "reason_parser.ml" +# 1950 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -50818,12 +43370,12 @@ module Tables = struct else _startpos__2_ in -# 2171 "reason_parser.mly" +# 2314 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc ) -# 1844 "reason_parser.ml" +# 1966 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50862,15 +43414,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 1885 "reason_parser.ml" +# 2007 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 1891 "reason_parser.ml" +# 2013 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -50881,12 +43433,12 @@ module Tables = struct else _startpos__2_ in -# 2171 "reason_parser.mly" +# 2314 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc ) -# 1907 "reason_parser.ml" +# 2029 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50916,9 +43468,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_and_class_type_declaration = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 1939 "reason_parser.ml" +# 2061 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -50929,12 +43481,12 @@ module Tables = struct else _startpos__2_ in -# 2198 "reason_parser.mly" +# 2344 "reason_parser.mly" ( let (ident, instance_type, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident instance_type ~virt ~params ~attrs:_1 ~loc ) -# 1955 "reason_parser.ml" +# 2077 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50973,15 +43525,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 1996 "reason_parser.ml" +# 2118 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 2002 "reason_parser.ml" +# 2124 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -50992,12 +43544,12 @@ module Tables = struct else _startpos__2_ in -# 2198 "reason_parser.mly" +# 2344 "reason_parser.mly" ( let (ident, instance_type, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in Ci.mk ident instance_type ~virt ~params ~attrs:_1 ~loc ) -# 2018 "reason_parser.ml" +# 2140 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51027,9 +43579,9 @@ module Tables = struct } = _menhir_stack in let _4 : 'tv_module_binding_body = Obj.magic _4 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 2050 "reason_parser.ml" +# 2172 "reason_parser.ml" ) = Obj.magic x0 in let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -51042,16 +43594,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 2065 "reason_parser.ml" +# 2187 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 2072 "reason_parser.ml" +# 2194 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -51062,9 +43614,9 @@ module Tables = struct else _startpos__2_ in -# 1573 "reason_parser.mly" +# 1701 "reason_parser.mly" ( Mb.mk _3 _4 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 2085 "reason_parser.ml" +# 2207 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51099,9 +43651,9 @@ module Tables = struct } = _menhir_stack in let _4 : 'tv_module_binding_body = Obj.magic _4 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 2122 "reason_parser.ml" +# 2244 "reason_parser.ml" ) = Obj.magic x0 in let _2 : unit = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in @@ -51115,9 +43667,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 2138 "reason_parser.ml" +# 2260 "reason_parser.ml" in let _1 = @@ -51125,15 +43677,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 2148 "reason_parser.ml" +# 2270 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 2154 "reason_parser.ml" +# 2276 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -51144,9 +43696,9 @@ module Tables = struct else _startpos__2_ in -# 1573 "reason_parser.mly" +# 1701 "reason_parser.mly" ( Mb.mk _3 _4 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 2167 "reason_parser.ml" +# 2289 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51176,9 +43728,9 @@ module Tables = struct } = _menhir_stack in let _4 : 'tv_module_type_body_COLON_ = Obj.magic _4 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 2199 "reason_parser.ml" +# 2321 "reason_parser.ml" ) = Obj.magic x0 in let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -51191,16 +43743,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 2214 "reason_parser.ml" +# 2336 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 2221 "reason_parser.ml" +# 2343 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -51211,9 +43763,9 @@ module Tables = struct else _startpos__2_ in -# 1791 "reason_parser.mly" +# 1919 "reason_parser.mly" ( Md.mk _3 _4 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 2234 "reason_parser.ml" +# 2356 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51248,9 +43800,9 @@ module Tables = struct } = _menhir_stack in let _4 : 'tv_module_type_body_COLON_ = Obj.magic _4 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 2271 "reason_parser.ml" +# 2393 "reason_parser.ml" ) = Obj.magic x0 in let _2 : unit = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in @@ -51264,9 +43816,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 2287 "reason_parser.ml" +# 2409 "reason_parser.ml" in let _1 = @@ -51274,15 +43826,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 2297 "reason_parser.ml" +# 2419 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 2303 "reason_parser.ml" +# 2425 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -51293,9 +43845,9 @@ module Tables = struct else _startpos__2_ in -# 1791 "reason_parser.mly" +# 1919 "reason_parser.mly" ( Md.mk _3 _4 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 2316 "reason_parser.ml" +# 2438 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51311,9 +43863,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_and_type_declaration = -# 3442 "reason_parser.mly" +# 3726 "reason_parser.mly" ( [] ) -# 2334 "reason_parser.ml" +# 2456 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51343,9 +43895,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_and_type_declaration = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 2366 "reason_parser.ml" +# 2488 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -51355,13 +43907,13 @@ module Tables = struct else _startpos__2_ in -# 3444 "reason_parser.mly" +# 3728 "reason_parser.mly" ( let (ident, params, cstrs, kind, priv, manifest), endpos, and_types = _3 in let loc = mklocation _symbolstartpos endpos in Type.mk ident ~params ~cstrs ~kind ~priv ?manifest ~attrs:_1 ~loc :: and_types ) -# 2382 "reason_parser.ml" +# 2504 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51400,15 +43952,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 2423 "reason_parser.ml" +# 2545 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 2429 "reason_parser.ml" +# 2551 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -51418,13 +43970,13 @@ module Tables = struct else _startpos__2_ in -# 3444 "reason_parser.mly" +# 3728 "reason_parser.mly" ( let (ident, params, cstrs, kind, priv, manifest), endpos, and_types = _3 in let loc = mklocation _symbolstartpos endpos in Type.mk ident ~params ~cstrs ~kind ~priv ?manifest ~attrs:_1 ~loc :: and_types ) -# 2445 "reason_parser.ml" +# 2567 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51453,15 +44005,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 2476 "reason_parser.ml" +# 2598 "reason_parser.ml" in -# 3858 "reason_parser.mly" +# 4157 "reason_parser.mly" ( (Nolabel, _1) ) -# 2482 "reason_parser.ml" +# 2604 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51497,9 +44049,9 @@ module Tables = struct let _10 : 'tv_core_type = Obj.magic _10 in let _3 : unit = Obj.magic _3 in let _2 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 2520 "reason_parser.ml" +# 2642 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -51512,15 +44064,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 2535 "reason_parser.ml" +# 2657 "reason_parser.ml" in -# 3860 "reason_parser.mly" - ( ( Labelled _2, _4) ) -# 2541 "reason_parser.ml" +# 4159 "reason_parser.mly" + ( (Labelled _2, _4) ) +# 2663 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51568,9 +44120,9 @@ module Tables = struct let _10 : 'tv_core_type = Obj.magic _10 in let _3 : unit = Obj.magic _3 in let _2 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 2591 "reason_parser.ml" +# 2713 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -51583,15 +44135,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 2606 "reason_parser.ml" +# 2728 "reason_parser.ml" in -# 3862 "reason_parser.mly" - ((_6 _2, _4) ) -# 2612 "reason_parser.ml" +# 4161 "reason_parser.mly" + ( (_6 _2, _4) ) +# 2734 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51603,60 +44155,55 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _110; - MenhirLib.EngineTypes.startp = _startpos__110_; - MenhirLib.EngineTypes.endp = _endpos__110_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_as_loc_arrow_type_parameter__ = Obj.magic _1000 in - let _110 : unit = Obj.magic _110 in + let _3 : unit = Obj.magic _3 in + let _20 : 'tv_option_COMMA_ = Obj.magic _20 in + let _100 : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_arrow_type_parameter_ = Obj.magic _100 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__110_ in - let _endpos = _endpos__300_ in - let _v : 'tv_arrow_type_parameters = let _1 = - let _30 = _300 in - let _100 = _1000 in - let _11 = _110 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_arrow_type_parameters = let _2 = + let _2 = _20 in + let _10 = _100 in let _1 = - let _3 = _30 in - let _10 = _100 in - let _1 = _11 in - let x = - let _1 = _10 in - -# 4419 "reason_parser.mly" - ( List.rev _1 ) -# 2659 "reason_parser.ml" - - in + let _1 = _10 in -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 2665 "reason_parser.ml" +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 2782 "reason_parser.ml" in -# 4429 "reason_parser.mly" - ( _1 ) -# 2671 "reason_parser.ml" +# 4174 "reason_parser.mly" + (_1) +# 2788 "reason_parser.ml" in -# 3867 "reason_parser.mly" - ( _1 ) -# 2677 "reason_parser.ml" +# 4177 "reason_parser.mly" + ( _2 ) +# 2794 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51685,15 +44232,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 2708 "reason_parser.ml" +# 2825 "reason_parser.ml" in -# 4295 "reason_parser.mly" +# 4609 "reason_parser.mly" ( _1 ) -# 2714 "reason_parser.ml" +# 2831 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51730,9 +44277,9 @@ module Tables = struct let _v : 'tv_attr_id = let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 4296 "reason_parser.mly" +# 4610 "reason_parser.mly" ( mkloc (_1 ^ "." ^ _3.txt) (mklocation _symbolstartpos _endpos) ) -# 2753 "reason_parser.ml" +# 2870 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51773,9 +44320,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_attribute = -# 4300 "reason_parser.mly" +# 4614 "reason_parser.mly" ( (_2, _3) ) -# 2796 "reason_parser.ml" +# 2913 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51794,9 +44341,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1065 "reason_parser.mly" +# 1185 "reason_parser.mly" (string) -# 2817 "reason_parser.ml" +# 2934 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -51804,9 +44351,9 @@ module Tables = struct let _v : 'tv_attribute = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4301 "reason_parser.mly" +# 4615 "reason_parser.mly" ( doc_attr _1 (mklocation _symbolstartpos _endpos) ) -# 2827 "reason_parser.ml" +# 2944 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51835,9 +44382,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_attributed_ext_constructors_either_extension_constructor_declaration_extension_constructor_rebind__ = -# 3650 "reason_parser.mly" +# 3948 "reason_parser.mly" ( _1 :: _2 ) -# 2858 "reason_parser.ml" +# 2975 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51860,9 +44407,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_attributed_ext_constructors_either_extension_constructor_declaration_extension_constructor_rebind__ = -# 3651 "reason_parser.mly" +# 3949 "reason_parser.mly" ( _1 ) -# 2883 "reason_parser.ml" +# 3000 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51891,9 +44438,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_attributed_ext_constructors_extension_constructor_declaration_ = -# 3650 "reason_parser.mly" +# 3948 "reason_parser.mly" ( _1 :: _2 ) -# 2914 "reason_parser.ml" +# 3031 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51916,9 +44463,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_attributed_ext_constructors_extension_constructor_declaration_ = -# 3651 "reason_parser.mly" +# 3949 "reason_parser.mly" ( _1 ) -# 2939 "reason_parser.ml" +# 3056 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51948,9 +44495,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 2971 "reason_parser.ml" +# 3088 "reason_parser.ml" ) = Obj.magic _1000 in let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -51970,9 +44517,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 2993 "reason_parser.ml" +# 3110 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -51980,17 +44527,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3003 "reason_parser.ml" +# 3120 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3011 "reason_parser.ml" +# 3128 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52001,24 +44548,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3026 "reason_parser.ml" +# 3143 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3033 "reason_parser.ml" +# 3150 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3039 "reason_parser.ml" +# 3156 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52075,9 +44622,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 3098 "reason_parser.ml" +# 3215 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -52085,17 +44632,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3108 "reason_parser.ml" +# 3225 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3116 "reason_parser.ml" +# 3233 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52106,24 +44653,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3131 "reason_parser.ml" +# 3248 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3138 "reason_parser.ml" +# 3255 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3144 "reason_parser.ml" +# 3261 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52180,9 +44727,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 3203 "reason_parser.ml" +# 3320 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -52190,17 +44737,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3213 "reason_parser.ml" +# 3330 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3221 "reason_parser.ml" +# 3338 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52211,24 +44758,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3236 "reason_parser.ml" +# 3353 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3243 "reason_parser.ml" +# 3360 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3249 "reason_parser.ml" +# 3366 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52276,9 +44823,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 3299 "reason_parser.ml" +# 3416 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -52286,17 +44833,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3309 "reason_parser.ml" +# 3426 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3317 "reason_parser.ml" +# 3434 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52307,24 +44854,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3332 "reason_parser.ml" +# 3449 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3339 "reason_parser.ml" +# 3456 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3345 "reason_parser.ml" +# 3462 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52372,9 +44919,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 3395 "reason_parser.ml" +# 3512 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -52382,17 +44929,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3405 "reason_parser.ml" +# 3522 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3413 "reason_parser.ml" +# 3530 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52403,24 +44950,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3428 "reason_parser.ml" +# 3545 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3435 "reason_parser.ml" +# 3552 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3441 "reason_parser.ml" +# 3558 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52468,9 +45015,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 3491 "reason_parser.ml" +# 3608 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -52478,17 +45025,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3501 "reason_parser.ml" +# 3618 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3509 "reason_parser.ml" +# 3626 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -52499,24 +45046,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3524 "reason_parser.ml" +# 3641 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3531 "reason_parser.ml" +# 3648 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3537 "reason_parser.ml" +# 3654 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52551,9 +45098,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1010 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 3574 "reason_parser.ml" +# 3691 "reason_parser.ml" ) = Obj.magic _1010 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _2 : unit = Obj.magic _2 in @@ -52576,9 +45123,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 3599 "reason_parser.ml" +# 3716 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -52586,9 +45133,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3609 "reason_parser.ml" +# 3726 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -52597,15 +45144,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 3620 "reason_parser.ml" +# 3737 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 3626 "reason_parser.ml" +# 3743 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -52616,24 +45163,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3641 "reason_parser.ml" +# 3758 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3648 "reason_parser.ml" +# 3765 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3654 "reason_parser.ml" +# 3771 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52698,9 +45245,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 3721 "reason_parser.ml" +# 3838 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -52708,9 +45255,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3731 "reason_parser.ml" +# 3848 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -52719,15 +45266,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 3742 "reason_parser.ml" +# 3859 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 3748 "reason_parser.ml" +# 3865 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -52738,24 +45285,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3763 "reason_parser.ml" +# 3880 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3770 "reason_parser.ml" +# 3887 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3776 "reason_parser.ml" +# 3893 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52820,9 +45367,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 3843 "reason_parser.ml" +# 3960 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -52830,9 +45377,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3853 "reason_parser.ml" +# 3970 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -52841,15 +45388,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 3864 "reason_parser.ml" +# 3981 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 3870 "reason_parser.ml" +# 3987 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -52860,24 +45407,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3885 "reason_parser.ml" +# 4002 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 3892 "reason_parser.ml" +# 4009 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 3898 "reason_parser.ml" +# 4015 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52933,9 +45480,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 3956 "reason_parser.ml" +# 4073 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -52943,9 +45490,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 3966 "reason_parser.ml" +# 4083 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -52954,15 +45501,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 3977 "reason_parser.ml" +# 4094 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 3983 "reason_parser.ml" +# 4100 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -52973,24 +45520,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 3998 "reason_parser.ml" +# 4115 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4005 "reason_parser.ml" +# 4122 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4011 "reason_parser.ml" +# 4128 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53046,9 +45593,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 4069 "reason_parser.ml" +# 4186 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53056,9 +45603,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4079 "reason_parser.ml" +# 4196 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -53067,15 +45614,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4090 "reason_parser.ml" +# 4207 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4096 "reason_parser.ml" +# 4213 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -53086,24 +45633,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4111 "reason_parser.ml" +# 4228 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4118 "reason_parser.ml" +# 4235 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4124 "reason_parser.ml" +# 4241 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53159,9 +45706,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 4182 "reason_parser.ml" +# 4299 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53169,9 +45716,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4192 "reason_parser.ml" +# 4309 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -53180,15 +45727,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4203 "reason_parser.ml" +# 4320 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4209 "reason_parser.ml" +# 4326 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -53199,24 +45746,24 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4224 "reason_parser.ml" +# 4341 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4231 "reason_parser.ml" +# 4348 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4237 "reason_parser.ml" +# 4354 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53251,9 +45798,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 4274 "reason_parser.ml" +# 4391 "reason_parser.ml" ) = Obj.magic _1000 in let _2 : unit = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in @@ -53274,9 +45821,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 4297 "reason_parser.ml" +# 4414 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53284,17 +45831,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4307 "reason_parser.ml" +# 4424 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4315 "reason_parser.ml" +# 4432 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53305,11 +45852,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4330 "reason_parser.ml" +# 4447 "reason_parser.ml" in let _1 = @@ -53317,21 +45864,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4340 "reason_parser.ml" +# 4457 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4346 "reason_parser.ml" +# 4463 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4352 "reason_parser.ml" +# 4469 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53394,9 +45941,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 4417 "reason_parser.ml" +# 4534 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -53404,17 +45951,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4427 "reason_parser.ml" +# 4544 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4435 "reason_parser.ml" +# 4552 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53425,11 +45972,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4450 "reason_parser.ml" +# 4567 "reason_parser.ml" in let _1 = @@ -53437,21 +45984,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4460 "reason_parser.ml" +# 4577 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4466 "reason_parser.ml" +# 4583 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4472 "reason_parser.ml" +# 4589 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53514,9 +46061,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 4537 "reason_parser.ml" +# 4654 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -53524,17 +46071,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4547 "reason_parser.ml" +# 4664 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4555 "reason_parser.ml" +# 4672 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53545,11 +46092,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4570 "reason_parser.ml" +# 4687 "reason_parser.ml" in let _1 = @@ -53557,21 +46104,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4580 "reason_parser.ml" +# 4697 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4586 "reason_parser.ml" +# 4703 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4592 "reason_parser.ml" +# 4709 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53625,9 +46172,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 4648 "reason_parser.ml" +# 4765 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53635,17 +46182,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4658 "reason_parser.ml" +# 4775 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4666 "reason_parser.ml" +# 4783 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53656,11 +46203,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4681 "reason_parser.ml" +# 4798 "reason_parser.ml" in let _1 = @@ -53668,21 +46215,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4691 "reason_parser.ml" +# 4808 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4697 "reason_parser.ml" +# 4814 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4703 "reason_parser.ml" +# 4820 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53736,9 +46283,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 4759 "reason_parser.ml" +# 4876 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53746,17 +46293,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4769 "reason_parser.ml" +# 4886 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4777 "reason_parser.ml" +# 4894 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53767,11 +46314,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4792 "reason_parser.ml" +# 4909 "reason_parser.ml" in let _1 = @@ -53779,21 +46326,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4802 "reason_parser.ml" +# 4919 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4808 "reason_parser.ml" +# 4925 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4814 "reason_parser.ml" +# 4931 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53847,9 +46394,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 4870 "reason_parser.ml" +# 4987 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53857,17 +46404,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 4880 "reason_parser.ml" +# 4997 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 4888 "reason_parser.ml" +# 5005 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -53878,11 +46425,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 4903 "reason_parser.ml" +# 5020 "reason_parser.ml" in let _1 = @@ -53890,21 +46437,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 4913 "reason_parser.ml" +# 5030 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 4919 "reason_parser.ml" +# 5036 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 4925 "reason_parser.ml" +# 5042 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53944,9 +46491,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1010 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 4967 "reason_parser.ml" +# 5084 "reason_parser.ml" ) = Obj.magic _1010 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _2 : unit = Obj.magic _2 in @@ -53970,9 +46517,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 4993 "reason_parser.ml" +# 5110 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -53980,9 +46527,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5003 "reason_parser.ml" +# 5120 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -53991,15 +46538,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5014 "reason_parser.ml" +# 5131 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5020 "reason_parser.ml" +# 5137 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54010,11 +46557,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5035 "reason_parser.ml" +# 5152 "reason_parser.ml" in let _1 = @@ -54022,21 +46569,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5045 "reason_parser.ml" +# 5162 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5051 "reason_parser.ml" +# 5168 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5057 "reason_parser.ml" +# 5174 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54107,9 +46654,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 5130 "reason_parser.ml" +# 5247 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -54117,9 +46664,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5140 "reason_parser.ml" +# 5257 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -54128,15 +46675,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5151 "reason_parser.ml" +# 5268 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5157 "reason_parser.ml" +# 5274 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54147,11 +46694,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5172 "reason_parser.ml" +# 5289 "reason_parser.ml" in let _1 = @@ -54159,21 +46706,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5182 "reason_parser.ml" +# 5299 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5188 "reason_parser.ml" +# 5305 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5194 "reason_parser.ml" +# 5311 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54244,9 +46791,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 5267 "reason_parser.ml" +# 5384 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -54254,9 +46801,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5277 "reason_parser.ml" +# 5394 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -54265,15 +46812,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5288 "reason_parser.ml" +# 5405 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5294 "reason_parser.ml" +# 5411 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54284,11 +46831,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5309 "reason_parser.ml" +# 5426 "reason_parser.ml" in let _1 = @@ -54296,21 +46843,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5319 "reason_parser.ml" +# 5436 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5325 "reason_parser.ml" +# 5442 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5331 "reason_parser.ml" +# 5448 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54372,9 +46919,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 5395 "reason_parser.ml" +# 5512 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -54382,9 +46929,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5405 "reason_parser.ml" +# 5522 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -54393,15 +46940,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5416 "reason_parser.ml" +# 5533 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5422 "reason_parser.ml" +# 5539 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54412,11 +46959,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5437 "reason_parser.ml" +# 5554 "reason_parser.ml" in let _1 = @@ -54424,21 +46971,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5447 "reason_parser.ml" +# 5564 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5453 "reason_parser.ml" +# 5570 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5459 "reason_parser.ml" +# 5576 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54500,9 +47047,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 5523 "reason_parser.ml" +# 5640 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -54510,9 +47057,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5533 "reason_parser.ml" +# 5650 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -54521,15 +47068,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5544 "reason_parser.ml" +# 5661 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5550 "reason_parser.ml" +# 5667 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54540,11 +47087,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5565 "reason_parser.ml" +# 5682 "reason_parser.ml" in let _1 = @@ -54552,21 +47099,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5575 "reason_parser.ml" +# 5692 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5581 "reason_parser.ml" +# 5698 "reason_parser.ml" in -# 3548 "reason_parser.mly" +# 3834 "reason_parser.mly" ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5587 "reason_parser.ml" +# 5704 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54628,9 +47175,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 5651 "reason_parser.ml" +# 5768 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -54638,9 +47185,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5661 "reason_parser.ml" +# 5778 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -54649,15 +47196,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 5672 "reason_parser.ml" +# 5789 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5678 "reason_parser.ml" +# 5795 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -54668,11 +47215,11 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 5693 "reason_parser.ml" +# 5810 "reason_parser.ml" in let _1 = @@ -54680,21 +47227,341 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" + ( _1 ) +# 5820 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 5826 "reason_parser.ml" + + in + +# 3834 "reason_parser.mly" + ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) +# 5832 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _3 : 'tv_row_field = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__2_ in + let _endpos = _endpos__3_ in + let _v : 'tv_bar_row_field = let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 5864 "reason_parser.ml" + + in + +# 4314 "reason_parser.mly" + ( match _3 with + | Rtag (name, attrs, amp, typs) -> + Rtag (name, _1 @ attrs, amp, typs) + | Rinherit typ -> + Rinherit {typ with ptyp_attributes = _1 @ typ.ptyp_attributes} + ) +# 5875 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_row_field = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__3_ in + let _v : 'tv_bar_row_field = let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" ( _1 ) -# 5703 "reason_parser.ml" +# 5916 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 5709 "reason_parser.ml" +# 5922 "reason_parser.ml" + + in + +# 4314 "reason_parser.mly" + ( match _3 with + | Rtag (name, attrs, amp, typs) -> + Rtag (name, _1 @ attrs, amp, typs) + | Rinherit typ -> + Rinherit {typ with ptyp_attributes = _1 @ typ.ptyp_attributes} + ) +# 5933 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _200 : 'tv_type_parameters = Obj.magic _200 in + let x000 : 'tv_type_longident = Obj.magic x000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x000_ in + let _endpos = _endpos__200_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _endpos__20_ = _endpos__200_ in + let _20 = _200 in + let x00 = x000 in + let x = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 5981 "reason_parser.ml" + + in + +# 4242 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_constr(_1, _2))) ) +# 5987 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__20_ in + let _startpos_x_ = _startpos_x00_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6002 "reason_parser.ml" + + in + +# 4265 "reason_parser.mly" + (_1) +# 6008 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _300 : 'tv_type_parameters = Obj.magic _300 in + let x000 : 'tv_class_longident = Obj.magic x000 in + let _100 : unit = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _30 = _300 in + let x00 = x000 in + let _10 = _100 in + let x = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let x0 = x00 in + let _1 = _10 in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 6065 "reason_parser.ml" + + in + +# 4244 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_class(_2, _3))) ) +# 6071 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__30_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6086 "reason_parser.ml" + + in + +# 4265 "reason_parser.mly" + (_1) +# 6092 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _200 : 'tv_ident = Obj.magic _200 in + let _100 : unit = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__200_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos__20_ = _endpos__200_ in + let _startpos__10_ = _startpos__100_ in + let _20 = _200 in + let _10 = _100 in + let x = + let _2 = _20 in + let _1 = _10 in + +# 4246 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_var _2)) ) +# 6131 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__20_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6146 "reason_parser.ml" in -# 3548 "reason_parser.mly" - ( {_3 with pcd_attributes = _1 @ _3.pcd_attributes} ) -# 5715 "reason_parser.ml" +# 4265 "reason_parser.mly" + (_1) +# 6152 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54706,38 +47573,70 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : 'tv_row_field = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in + let x000 : 'tv_class_longident = Obj.magic x000 in + let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__2_ in - let _endpos = _endpos__3_ in - let _v : 'tv_bar_row_field = let _1 = + let _startpos = _startpos__100_ in + let _endpos = _endpos_x000_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _startpos__10_ = _startpos__100_ in + let x00 = x000 in + let _10 = _100 in + let x = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = _10 in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 6200 "reason_parser.ml" + + in + +# 4248 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_class(_2, []))) ) +# 6206 "reason_parser.ml" + + in + let _endpos_x_ = _endpos_x00_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in -# 4309 "reason_parser.mly" - ( [] ) -# 5747 "reason_parser.ml" +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6221 "reason_parser.ml" in -# 4000 "reason_parser.mly" - ( match _3 with - | Rtag (name, attrs, amp, typs) -> - Rtag (name, _1 @ attrs, amp, typs) - | Rinherit typ -> - Rinherit {typ with ptyp_attributes = _1 @ typ.ptyp_attributes} - ) -# 5758 "reason_parser.ml" +# 4265 "reason_parser.mly" + (_1) +# 6227 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54749,53 +47648,47 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_row_field = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in + let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__3_ in - let _v : 'tv_bar_row_field = let _1 = + let _endpos = _endpos__100_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos__10_ = _endpos__100_ in + let _startpos__10_ = _startpos__100_ in let _10 = _100 in - let _1 = + let x = let _1 = _10 in -# 4305 "reason_parser.mly" - ( _1 ) -# 5799 "reason_parser.ml" +# 4250 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_any)) ) +# 6258 "reason_parser.ml" in + let _endpos_x_ = _endpos__10_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in -# 4310 "reason_parser.mly" - ( List.map (fun x -> x.txt) _1 ) -# 5805 "reason_parser.ml" +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6273 "reason_parser.ml" in -# 4000 "reason_parser.mly" - ( match _3 with - | Rtag (name, attrs, amp, typs) -> - Rtag (name, _1 @ attrs, amp, typs) - | Rinherit typ -> - Rinherit {typ with ptyp_attributes = _1 @ typ.ptyp_attributes} - ) -# 5816 "reason_parser.ml" +# 4265 "reason_parser.mly" + (_1) +# 6279 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54807,32 +47700,23 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _200 : 'tv_type_parameters = Obj.magic _200 in let x000 : 'tv_type_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in - let _endpos = _endpos__200_ in + let _endpos = _endpos_x000_ in let _v : 'tv_basic_core_type = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in - let _endpos__20_ = _endpos__200_ in - let _20 = _200 in let x00 = x000 in let x = let _endpos_x0_ = _endpos_x00_ in let _startpos_x0_ = _startpos_x00_ in - let _2 = _20 in let x0 = x00 in let _1 = let _endpos_x_ = _endpos_x0_ in @@ -54841,36 +47725,88 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5864 "reason_parser.ml" +# 6318 "reason_parser.ml" in -# 3928 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_constr(_1, _2))) ) -# 5870 "reason_parser.ml" +# 4252 "reason_parser.mly" + ( Core_type (mktyp(Ptyp_constr(_1, []))) ) +# 6324 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in + let _endpos_x_ = _endpos_x00_ in let _startpos_x_ = _startpos_x00_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6339 "reason_parser.ml" + + in + +# 4265 "reason_parser.mly" + (_1) +# 6345 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _100 : 'tv_object_record_type = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__100_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos__10_ = _endpos__100_ in + let _startpos__10_ = _startpos__100_ in + let _10 = _100 in + let x = + let _1 = _10 in + +# 4254 "reason_parser.mly" + ( _1 ) +# 6376 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__10_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 5885 "reason_parser.ml" +# 6391 "reason_parser.ml" in -# 3951 "reason_parser.mly" +# 4265 "reason_parser.mly" (_1) -# 5891 "reason_parser.ml" +# 6397 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54886,9 +47822,9 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _100; @@ -54898,42 +47834,26 @@ module Tables = struct }; }; } = _menhir_stack in - let _300 : 'tv_type_parameters = Obj.magic _300 in - let x000 : 'tv_class_longident = Obj.magic x000 in + let _300 : unit = Obj.magic _300 in + let _200 : 'tv_row_field_list = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_basic_core_type = let _1 = - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in let _30 = _300 in - let x00 = x000 in + let _20 = _200 in let _10 = _100 in let x = - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in let _3 = _30 in - let x0 = x00 in + let _2 = _20 in let _1 = _10 in - let _2 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 5948 "reason_parser.ml" - - in -# 3930 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_class(_2, _3))) ) -# 5954 "reason_parser.ml" +# 4256 "reason_parser.mly" + ( Core_type(mktyp(Ptyp_variant (_2, Closed, None))) ) +# 6444 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -54941,20 +47861,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 5969 "reason_parser.ml" +# 6459 "reason_parser.ml" in -# 3951 "reason_parser.mly" +# 4265 "reason_parser.mly" (_1) -# 5975 "reason_parser.ml" +# 6465 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54966,55 +47886,63 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _200 : 'tv_ident = Obj.magic _200 in + let _300 : unit = Obj.magic _300 in + let _200 : 'tv_loption_row_field_list_ = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__200_ in + let _endpos = _endpos__300_ in let _v : 'tv_basic_core_type = let _1 = - let _endpos__20_ = _endpos__200_ in + let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in + let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = + let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 3932 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_var _2)) ) -# 6014 "reason_parser.ml" +# 4258 "reason_parser.mly" + ( Core_type(mktyp(Ptyp_variant (_2, Open, None))) ) +# 6512 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in + let _endpos_x_ = _endpos__30_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 6029 "reason_parser.ml" +# 6527 "reason_parser.ml" in -# 3951 "reason_parser.mly" +# 4265 "reason_parser.mly" (_1) -# 6035 "reason_parser.ml" +# 6533 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55026,70 +47954,147 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let x000 : 'tv_class_longident = Obj.magic x000 in + let _400 : unit = Obj.magic _400 in + let _300 : 'tv_loption_preceded_GREATER_nonempty_list_name_tag___ = Obj.magic _300 in + let _200 : 'tv_row_field_list = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos_x000_ in + let _endpos = _endpos__400_ in let _v : 'tv_basic_core_type = let _1 = - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in + let _endpos__40_ = _endpos__400_ in let _startpos__10_ = _startpos__100_ in - let x00 = x000 in + let _40 = _400 in + let _30 = _300 in + let _20 = _200 in let _10 = _100 in let x = - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let x0 = x00 in + let _4 = _40 in + let _3 = _30 in + let _2 = _20 in let _1 = _10 in - let _2 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 6083 "reason_parser.ml" - - in -# 3934 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_class(_2, []))) ) -# 6089 "reason_parser.ml" +# 4260 "reason_parser.mly" + ( Core_type(mktyp(Ptyp_variant (_2, Closed, Some _3))) ) +# 6588 "reason_parser.ml" in - let _endpos_x_ = _endpos_x00_ in + let _endpos_x_ = _endpos__40_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6603 "reason_parser.ml" + + in + +# 4265 "reason_parser.mly" + (_1) +# 6609 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _400 : unit = Obj.magic _400 in + let _300 : 'tv_package_type = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let _100 : unit = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__400_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos__40_ = _endpos__400_ in + let _startpos__10_ = _startpos__100_ in + let _40 = _400 in + let _30 = _300 in + let _20 = _200 in + let _10 = _100 in + let x = + let _4 = _40 in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + +# 4262 "reason_parser.mly" + ( Core_type(mktyp(Ptyp_package _3)) ) +# 6664 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__40_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 6104 "reason_parser.ml" +# 6679 "reason_parser.ml" in -# 3951 "reason_parser.mly" +# 4265 "reason_parser.mly" (_1) -# 6110 "reason_parser.ml" +# 6685 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55107,41 +48112,147 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in + let _100 : 'tv_extension = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__100_ in + let _v : 'tv_basic_core_type = let _1 = + let _endpos__10_ = _endpos__100_ in + let _startpos__10_ = _startpos__100_ in + let _10 = _100 in + let x = + let _1 = _10 in + +# 4264 "reason_parser.mly" + ( Core_type(mktyp(Ptyp_extension _1)) ) +# 6716 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__10_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4675 "reason_parser.mly" + ( match x with + | Core_type ct -> + let loc_start = _symbolstartpos and loc_end = _endpos in + Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) + | Record_type _ -> x + ) +# 6731 "reason_parser.ml" + + in + +# 4265 "reason_parser.mly" + (_1) +# 6737 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : 'tv_boption_AMPERSAND_ = +# 119 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( false ) +# 6755 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_boption_AMPERSAND_ = +# 121 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( true ) +# 6780 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _300 : unit = Obj.magic _300 in + let _200 : 'tv_seq_expr = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__100_ in - let _v : 'tv_basic_core_type = let _1 = - let _endpos__10_ = _endpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in + let _30 = _300 in + let _20 = _200 in let _10 = _100 in let x = + let _3 = _30 in + let _2 = _20 in let _1 = _10 in -# 3936 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_any)) ) -# 6141 "reason_parser.ml" +# 2387 "reason_parser.mly" + ( _2 ) +# 6827 "reason_parser.ml" in - let _endpos_x_ = _endpos__10_ in + let _endpos_x_ = _endpos__30_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6156 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 6837 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6162 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 6843 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55153,61 +48264,74 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x000 : 'tv_type_longident = Obj.magic x000 in + let _300 : unit = Obj.magic _300 in + let x000 : 'tv_seq_expr = Obj.magic x000 in + let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x000_ in - let _endpos = _endpos_x000_ in - let _v : 'tv_basic_core_type = let _1 = + let _startpos = _startpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_braced_expr = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _30 = _300 in let x00 = x000 in + let _10 = _100 in let x = let _endpos_x0_ = _endpos_x00_ in let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in let x0 = x00 in - let _1 = + let _1 = _10 in + let _2 = let _endpos_x_ = _endpos_x0_ in let _startpos_x_ = _startpos_x0_ in let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 6201 "reason_parser.ml" +# 6900 "reason_parser.ml" in -# 3938 "reason_parser.mly" - ( Core_type (mktyp(Ptyp_constr(_1, []))) ) -# 6207 "reason_parser.ml" +# 2389 "reason_parser.mly" + ( syntax_error_exp _2.loc "SyntaxError in block" ) +# 6906 "reason_parser.ml" in - let _endpos_x_ = _endpos_x00_ in - let _startpos_x_ = _startpos_x00_ in + let _endpos_x_ = _endpos__30_ in + let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6222 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 6916 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6228 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 6922 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55219,47 +48343,81 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _500; + MenhirLib.EngineTypes.startp = _startpos__500_; + MenhirLib.EngineTypes.endp = _endpos__500_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _100 : 'tv_object_record_type = Obj.magic _100 in + let _500 : unit = Obj.magic _500 in + let _400 : 'tv_option_COMMA_ = Obj.magic _400 in + let _300 : 'tv_expr_optional_constraint = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__100_ in - let _v : 'tv_basic_core_type = let _1 = - let _endpos__10_ = _endpos__100_ in + let _endpos = _endpos__500_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos__50_ = _endpos__500_ in let _startpos__10_ = _startpos__100_ in + let _50 = _500 in + let _40 = _400 in + let _30 = _300 in + let _20 = _200 in let _10 = _100 in let x = + let _endpos__5_ = _endpos__50_ in + let _startpos__1_ = _startpos__10_ in + let _5 = _50 in + let _4 = _40 in + let _3 = _30 in + let _2 = _20 in let _1 = _10 in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in -# 3940 "reason_parser.mly" - ( _1 ) -# 6259 "reason_parser.ml" +# 2391 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + let msg = "Record construction must have at least one field explicitly set" in + syntax_error_exp loc msg + ) +# 6992 "reason_parser.ml" in - let _endpos_x_ = _endpos__10_ in + let _endpos_x_ = _endpos__50_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6274 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7002 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6280 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7008 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55288,12 +48446,12 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let _200 : 'tv_row_field_list = Obj.magic _200 in + let _200 : 'tv_record_expr = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in - let _v : 'tv_basic_core_type = let _1 = + let _v : 'tv_braced_expr = let _1 = let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in let _30 = _300 in @@ -55304,9 +48462,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3942 "reason_parser.mly" - ( Core_type(mktyp(Ptyp_variant (_2, Closed, None))) ) -# 6327 "reason_parser.ml" +# 2396 "reason_parser.mly" + ( let (exten, fields) = _2 in mkexp (Pexp_record(fields, exten)) ) +# 7055 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -55314,20 +48472,108 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6342 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7065 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6348 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7071 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = x100; + MenhirLib.EngineTypes.startp = _startpos_x100_; + MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let x100 : unit = Obj.magic x100 in + let _200 : 'tv_record_expr = Obj.magic _200 in + let x000 : unit = Obj.magic x000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x000_ in + let _endpos = _endpos_x100_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos_x10_ = _endpos_x100_ in + let _startpos_x10_ = _startpos_x100_ in + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x10 = x100 in + let _20 = _200 in + let x00 = x000 in + let x = + let _endpos_x1_ = _endpos_x10_ in + let _startpos_x1_ = _startpos_x10_ in + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x1 = x10 in + let _2 = _20 in + let x0 = x00 in + let _3 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7130 "reason_parser.ml" + + in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7142 "reason_parser.ml" + + in + +# 2398 "reason_parser.mly" + ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}")) +# 7148 "reason_parser.ml" + + in + let _endpos_x_ = _endpos_x10_ in + let _startpos_x_ = _startpos_x00_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7158 "reason_parser.ml" + + in + +# 2412 "reason_parser.mly" + (_1) +# 7164 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55356,25 +48602,33 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let _200 : 'tv_loption_row_field_list_ = Obj.magic _200 in + let _200 : 'tv_record_expr_with_string_keys = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in - let _v : 'tv_basic_core_type = let _1 = + let _v : 'tv_braced_expr = let _1 = let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in let _3 = _30 in let _2 = _20 in let _1 = _10 in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in -# 3944 "reason_parser.mly" - ( Core_type(mktyp(Ptyp_variant (_2, Open, None))) ) -# 6395 "reason_parser.ml" +# 2400 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + let (exten, fields) = _2 in + mkexp ~loc (Pexp_extension (mkloc ("bs.obj") loc, + PStr [mkstrexp (mkexp ~loc (Pexp_record(fields, exten))) []])) + ) +# 7219 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -55382,20 +48636,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6410 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7229 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6416 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7235 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55407,71 +48656,88 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _400; - MenhirLib.EngineTypes.startp = _startpos__400_; - MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.semv = x100; + MenhirLib.EngineTypes.startp = _startpos_x100_; + MenhirLib.EngineTypes.endp = _endpos_x100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _400 : unit = Obj.magic _400 in - let _300 : 'tv_loption_preceded_GREATER_nonempty_list_name_tag___ = Obj.magic _300 in - let _200 : 'tv_row_field_list = Obj.magic _200 in - let _100 : unit = Obj.magic _100 in + let x100 : unit = Obj.magic x100 in + let _200 : 'tv_record_expr_with_string_keys = Obj.magic _200 in + let x000 : unit = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__400_ in - let _v : 'tv_basic_core_type = let _1 = - let _endpos__40_ = _endpos__400_ in - let _startpos__10_ = _startpos__100_ in - let _40 = _400 in - let _30 = _300 in + let _startpos = _startpos_x000_ in + let _endpos = _endpos_x100_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos_x10_ = _endpos_x100_ in + let _startpos_x10_ = _startpos_x100_ in + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x10 = x100 in let _20 = _200 in - let _10 = _100 in + let x00 = x000 in let x = - let _4 = _40 in - let _3 = _30 in + let _endpos_x1_ = _endpos_x10_ in + let _startpos_x1_ = _startpos_x10_ in + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x1 = x10 in let _2 = _20 in - let _1 = _10 in + let x0 = x00 in + let _3 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7294 "reason_parser.ml" + + in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7306 "reason_parser.ml" + + in -# 3946 "reason_parser.mly" - ( Core_type(mktyp(Ptyp_variant (_2, Closed, Some _3))) ) -# 6471 "reason_parser.ml" +# 2406 "reason_parser.mly" + ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}")) +# 7312 "reason_parser.ml" in - let _endpos_x_ = _endpos__40_ in - let _startpos_x_ = _startpos__10_ in + let _endpos_x_ = _endpos_x10_ in + let _startpos_x_ = _startpos_x00_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6486 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7322 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6492 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7328 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55483,71 +48749,58 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _400; - MenhirLib.EngineTypes.startp = _startpos__400_; - MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _400 : unit = Obj.magic _400 in - let _300 : 'tv_package_type = Obj.magic _300 in - let _200 : unit = Obj.magic _200 in + let _300 : unit = Obj.magic _300 in + let _200 : 'tv_object_body = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__400_ in - let _v : 'tv_basic_core_type = let _1 = - let _endpos__40_ = _endpos__400_ in + let _endpos = _endpos__300_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in - let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 3948 "reason_parser.mly" - ( Core_type(mktyp(Ptyp_package _3)) ) -# 6547 "reason_parser.ml" +# 2409 "reason_parser.mly" + ( mkexp (Pexp_object _2) ) +# 7375 "reason_parser.ml" in - let _endpos_x_ = _endpos__40_ in + let _endpos_x_ = _endpos__30_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6562 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7385 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6568 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7391 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55559,47 +48812,88 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x100; + MenhirLib.EngineTypes.startp = _startpos_x100_; + MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _100 : 'tv_extension = Obj.magic _100 in + let x100 : unit = Obj.magic x100 in + let _200 : 'tv_object_body = Obj.magic _200 in + let x000 : unit = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__100_ in - let _v : 'tv_basic_core_type = let _1 = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in - let _10 = _100 in + let _startpos = _startpos_x000_ in + let _endpos = _endpos_x100_ in + let _v : 'tv_braced_expr = let _1 = + let _endpos_x10_ = _endpos_x100_ in + let _startpos_x10_ = _startpos_x100_ in + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x10 = x100 in + let _20 = _200 in + let x00 = x000 in let x = - let _1 = _10 in + let _endpos_x1_ = _endpos_x10_ in + let _startpos_x1_ = _startpos_x10_ in + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x1 = x10 in + let _2 = _20 in + let x0 = x00 in + let _3 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7450 "reason_parser.ml" + + in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7462 "reason_parser.ml" + + in -# 3950 "reason_parser.mly" - ( Core_type(mktyp(Ptyp_extension _1)) ) -# 6599 "reason_parser.ml" +# 2411 "reason_parser.mly" + ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}") ) +# 7468 "reason_parser.ml" in - let _endpos_x_ = _endpos__10_ in - let _startpos_x_ = _startpos__10_ in + let _endpos_x_ = _endpos_x10_ in + let _startpos_x_ = _startpos_x00_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" - ( match x with - | Core_type ct -> - let loc_start = _symbolstartpos and loc_end = _endpos in - Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) - | Record_type _ -> x - ) -# 6614 "reason_parser.ml" +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 7478 "reason_parser.ml" in -# 3951 "reason_parser.mly" - (_1) -# 6620 "reason_parser.ml" +# 2412 "reason_parser.mly" + (_1) +# 7484 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55610,14 +48904,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_class_instance_type = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_boption_AMPERSAND_ = -# 119 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( false ) -# 6638 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_class_constructor_type = +# 2224 "reason_parser.mly" + ( _1 ) +# 7509 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55629,20 +48930,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _3 : 'tv_class_constructor_type = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_arrow_type_parameters = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_boption_AMPERSAND_ = -# 121 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( true ) -# 6663 "reason_parser.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_class_constructor_type = +# 2226 "reason_parser.mly" + ( List.fold_right mkcty_arrow _1 _3 ) +# 7546 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55654,58 +48967,34 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_semi_terminated_seq_expr = Obj.magic _200 in - let _100 : unit = Obj.magic _100 in + let _2 : 'tv_either_preceded_EQUAL_class_expr__class_body_expr_ = Obj.magic _2 in + let _1 : 'tv_option_preceded_COLON_class_constructor_type__ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in - -# 2241 "reason_parser.mly" - ( _2 ) -# 6710 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 6720 "reason_parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_class_declaration_body = let _endpos = _endpos__2_ in + let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in -# 2267 "reason_parser.mly" - (_1) -# 6726 "reason_parser.ml" +# 1949 "reason_parser.mly" + ( match _1 with + | None -> _2 + | Some ct -> Cl.constraint_ ~loc:(mklocation _symbolstartpos _endpos) _2 ct + ) +# 7585 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55717,74 +49006,70 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let x000 : 'tv_semi_terminated_seq_expr = Obj.magic x000 in - let _100 : unit = Obj.magic _100 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 7617 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let x00 = x000 in - let _10 = _100 in - let x = - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let _3 = _30 in - let x0 = x00 in - let _1 = _10 in - let _2 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 6783 "reason_parser.ml" - - in - -# 2243 "reason_parser.mly" - ( syntax_error_exp _2.loc "SyntaxError in block" ) -# 6789 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 7627 "reason_parser.ml" + + in + let _3 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 7634 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 6799 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7646 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 6805 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 7660 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55796,81 +49081,102 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _500; - MenhirLib.EngineTypes.startp = _startpos__500_; - MenhirLib.EngineTypes.endp = _endpos__500_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _400; - MenhirLib.EngineTypes.startp = _startpos__400_; - MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _500 : unit = Obj.magic _500 in - let _400 : 'tv_option_COMMA_ = Obj.magic _400 in - let _300 : 'tv_expr_optional_constraint = Obj.magic _300 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in let _200 : unit = Obj.magic _200 in let _100 : unit = Obj.magic _100 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 7704 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__500_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos__50_ = _endpos__500_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _endpos__20_ = _endpos__200_ in let _startpos__10_ = _startpos__100_ in - let _50 = _500 in - let _40 = _400 in - let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _endpos__5_ = _endpos__50_ in + let _endpos__2_ = _endpos__20_ in let _startpos__1_ = _startpos__10_ in - let _5 = _50 in - let _4 = _40 in - let _3 = _30 in let _2 = _20 in let _1 = _10 in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in -# 2246 "reason_parser.mly" - ( let loc = mklocation _symbolstartpos _endpos in - let msg = "Record construction must have at least one field explicitly set" in - syntax_error_exp loc msg - ) -# 6875 "reason_parser.ml" +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 7728 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in - let _startpos_x_ = _startpos__10_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 7734 "reason_parser.ml" + + in + let _3 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 7741 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 6885 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7753 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 6891 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 7767 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55882,58 +49188,150 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_record_expr = Obj.magic _200 in - let _100 : unit = Obj.magic _100 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _30000 : unit = Obj.magic _30000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 7823 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 7857 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 7863 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 7869 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 7875 "reason_parser.ml" + + in -# 2251 "reason_parser.mly" - ( let (exten, fields) = _2 in mkexp (Pexp_record(fields, exten)) ) -# 6938 "reason_parser.ml" +# 2548 "reason_parser.mly" + ( + (_1, false) + ) +# 7883 "reason_parser.ml" in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 7889 "reason_parser.ml" + + in + let _3 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 7896 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 6948 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 7908 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 6954 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 7922 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55945,88 +49343,110 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x100; - MenhirLib.EngineTypes.startp = _startpos_x100_; - MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let x100 : unit = Obj.magic x100 in - let _200 : 'tv_record_expr = Obj.magic _200 in - let x000 : unit = Obj.magic x000 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _300 : unit = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let _100 : unit = Obj.magic _100 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 7972 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x000_ in - let _endpos = _endpos_x100_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos_x10_ = _endpos_x100_ in - let _startpos_x10_ = _startpos_x100_ in - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in - let x10 = x100 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _30 = _300 in let _20 = _200 in - let x00 = x000 in + let _10 = _100 in let x = - let _endpos_x1_ = _endpos_x10_ in - let _startpos_x1_ = _startpos_x10_ in - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let x1 = x10 in + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in let _2 = _20 in - let x0 = x00 in - let _3 = - let _endpos_x_ = _endpos_x1_ in - let _startpos_x_ = _startpos_x1_ in - let x = x1 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7013 "reason_parser.ml" - - in - let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7025 "reason_parser.ml" - - in + let _1 = _10 in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in -# 2253 "reason_parser.mly" - ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}")) -# 7031 "reason_parser.ml" +# 2551 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) + ) +# 7998 "reason_parser.ml" in - let _endpos_x_ = _endpos_x10_ in - let _startpos_x_ = _startpos_x00_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8004 "reason_parser.ml" + + in + let _3 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 8011 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7041 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 8023 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 7047 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 8037 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56038,66 +49458,144 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _210; + MenhirLib.EngineTypes.startp = _startpos__210_; + MenhirLib.EngineTypes.endp = _endpos__210_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_record_expr_with_string_keys = Obj.magic _200 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _400 : unit = Obj.magic _400 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _10000 in + let _210 : unit = Obj.magic _210 in let _100 : unit = Obj.magic _100 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 8099 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _40 = _400 in + let _200 = _2000 in + let _1000 = _10000 in + let _21 = _210 in let _10 = _100 in let x = - let _endpos__3_ = _endpos__30_ in - let _startpos__1_ = _startpos__10_ in - let _3 = _30 in - let _2 = _20 in + let _4 = _40 in + let _20 = _200 in + let _100 = _1000 in + let _2 = _21 in let _1 = _10 in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in + let _3 = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8125 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 8131 "reason_parser.ml" + + in -# 2255 "reason_parser.mly" - ( let loc = mklocation _symbolstartpos _endpos in - let (exten, fields) = _2 in - mkexp ~loc (Pexp_extension (mkloc ("bs.obj") loc, - PStr [mkstrexp (mkexp ~loc (Pexp_record(fields, exten))) []])) - ) -# 7102 "reason_parser.ml" +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) + ) +# 8147 "reason_parser.ml" in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8153 "reason_parser.ml" + + in + let _3 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 8160 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7112 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 8172 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 7118 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 8186 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56109,88 +49607,148 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x100; - MenhirLib.EngineTypes.startp = _startpos_x100_; - MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let x100 : unit = Obj.magic x100 in - let _200 : 'tv_record_expr_with_string_keys = Obj.magic _200 in - let x000 : unit = Obj.magic x000 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _30000 : unit = Obj.magic _30000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 8242 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x000_ in - let _endpos = _endpos_x100_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos_x10_ = _endpos_x100_ in - let _startpos_x10_ = _startpos_x100_ in - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in - let x10 = x100 in - let _20 = _200 in - let x00 = x000 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + +# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 8252 "reason_parser.ml" + + in + let _3 = + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in let x = - let _endpos_x1_ = _endpos_x10_ in - let _startpos_x1_ = _startpos_x10_ in - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let x1 = x10 in - let _2 = _20 in - let x0 = x00 in - let _3 = - let _endpos_x_ = _endpos_x1_ in - let _startpos_x_ = _startpos_x1_ in - let x = x1 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7177 "reason_parser.ml" - - in + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8283 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 8289 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 8295 "reason_parser.ml" + + in -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7189 "reason_parser.ml" +# 4744 "reason_parser.mly" + ( _1 ) +# 8301 "reason_parser.ml" in -# 2261 "reason_parser.mly" - ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}")) -# 7195 "reason_parser.ml" +# 2325 "reason_parser.mly" + ( _1 ) +# 8307 "reason_parser.ml" in - let _endpos_x_ = _endpos_x10_ in - let _startpos_x_ = _startpos_x00_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8313 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7205 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 8325 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 7211 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 8339 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56202,58 +49760,180 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _200; MenhirLib.EngineTypes.startp = _startpos__200_; MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _100; MenhirLib.EngineTypes.startp = _startpos__100_; MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_object_body = Obj.magic _200 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _200 : unit = Obj.magic _200 in let _100 : unit = Obj.magic _100 in + let _30000 : unit = Obj.magic _30000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 8407 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos__30_ = _endpos__300_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _endpos__20_ = _endpos__200_ in let _startpos__10_ = _startpos__100_ in - let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _3 = _30 in + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in let _2 = _20 in let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in -# 2264 "reason_parser.mly" - ( mkexp (Pexp_object _2) ) -# 7258 "reason_parser.ml" +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 8431 "reason_parser.ml" in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8437 "reason_parser.ml" + + in + let _3 = + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in + let x = + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8468 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 8474 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 8480 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 8486 "reason_parser.ml" + + in + +# 2325 "reason_parser.mly" + ( _1 ) +# 8492 "reason_parser.ml" + + in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8498 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7268 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 8510 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 7274 "reason_parser.ml" +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) + ) +# 8524 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56265,189 +49945,228 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x100; - MenhirLib.EngineTypes.startp = _startpos_x100_; - MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _30001; + MenhirLib.EngineTypes.startp = _startpos__30001_; + MenhirLib.EngineTypes.endp = _endpos__30001_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200001; + MenhirLib.EngineTypes.startp = _startpos__200001_; + MenhirLib.EngineTypes.endp = _endpos__200001_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000001; + MenhirLib.EngineTypes.startp = _startpos__1000001_; + MenhirLib.EngineTypes.endp = _endpos__1000001_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10001; + MenhirLib.EngineTypes.startp = _startpos__10001_; + MenhirLib.EngineTypes.endp = _endpos__10001_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let x100 : unit = Obj.magic x100 in - let _200 : 'tv_object_body = Obj.magic _200 in - let x000 : unit = Obj.magic x000 in + let _5 : 'tv_class_declaration_body = Obj.magic _5 in + let _30001 : unit = Obj.magic _30001 in + let _200001 : 'tv_option_COMMA_ = Obj.magic _200001 in + let _1000001 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1000001 in + let _10001 : unit = Obj.magic _10001 in + let _30000 : unit = Obj.magic _30000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in + let x0 : ( +# 1131 "reason_parser.mly" + (string) +# 8604 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x000_ in - let _endpos = _endpos_x100_ in - let _v : 'tv_braced_expr = let _1 = - let _endpos_x10_ = _endpos_x100_ in - let _startpos_x10_ = _startpos_x100_ in - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in - let x10 = x100 in - let _20 = _200 in - let x00 = x000 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_class_declaration_details = let _4 = + let _3000 = _30001 in + let _20000 = _200001 in + let _100000 = _1000001 in + let _1000 = _10001 in let x = - let _endpos_x1_ = _endpos_x10_ in - let _startpos_x1_ = _startpos_x10_ in - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let x1 = x10 in - let _2 = _20 in - let x0 = x00 in - let _3 = - let _endpos_x_ = _endpos_x1_ in - let _startpos_x_ = _startpos_x1_ in - let x = x1 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8638 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 8644 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 8650 "reason_parser.ml" + + in -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7333 "reason_parser.ml" +# 4744 "reason_parser.mly" + ( _1 ) +# 8656 "reason_parser.ml" in + +# 2548 "reason_parser.mly" + ( + (_1, false) + ) +# 8664 "reason_parser.ml" + + in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8670 "reason_parser.ml" + + in + let _3 = + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in + let x = + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8701 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 8707 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 8713 "reason_parser.ml" + + in -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7345 "reason_parser.ml" +# 4744 "reason_parser.mly" + ( _1 ) +# 8719 "reason_parser.ml" in -# 2266 "reason_parser.mly" - ( unclosed_exp (with_txt _1 "{") (with_txt _3 "}") ) -# 7351 "reason_parser.ml" +# 2325 "reason_parser.mly" + ( _1 ) +# 8725 "reason_parser.ml" in - let _endpos_x_ = _endpos_x10_ in - let _startpos_x_ = _startpos_x00_ in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8731 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7361 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 8743 "reason_parser.ml" in -# 2267 "reason_parser.mly" - (_1) -# 7367 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_class_instance_type = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_class_constructor_type = -# 2090 "reason_parser.mly" - ( _1 ) -# 7392 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : 'tv_class_constructor_type = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : 'tv_arrow_type_parameters = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_class_constructor_type = -# 2092 "reason_parser.mly" - ( List.fold_right mkcty_arrow _1 _3 ) -# 7429 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : 'tv_either_preceded_EQUAL_class_expr__class_body_expr_ = Obj.magic _2 in - let _1 : 'tv_option_preceded_COLON_class_constructor_type__ = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_class_declaration_body = let _endpos = _endpos__2_ in - let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then - _startpos__1_ - else - _startpos__2_ in - -# 1816 "reason_parser.mly" - ( match _1 with - | None -> _2 - | Some ct -> Cl.constraint_ ~loc:(mklocation _symbolstartpos _endpos) _2 ct +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in + let params = match _3 with None -> [] | Some x -> x in + (_2, body, _1, params) ) -# 7468 "reason_parser.ml" +# 8757 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56463,39 +50182,158 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__5_; MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; }; } = _menhir_stack in let _5 : 'tv_class_declaration_body = Obj.magic _5 in - let _4 : 'tv_loption_labeled_pattern_list_ = Obj.magic _4 in + let _300 : unit = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let _100 : unit = Obj.magic _100 in + let _30000 : unit = Obj.magic _30000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 7506 "reason_parser.ml" +# 8831 "reason_parser.ml" ) = Obj.magic x0 in let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : 'tv_class_declaration_details = let _3 = + let _v : 'tv_class_declaration_details = let _4 = + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _30 = _300 in + let _20 = _200 in + let _10 = _100 in + let x = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 2551 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) + ) +# 8857 "reason_parser.ml" + + in -# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( None ) -# 7516 "reason_parser.ml" +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8863 "reason_parser.ml" + + in + let _3 = + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in + let x = + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 8894 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 8900 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 8906 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 8912 "reason_parser.ml" + + in + +# 2325 "reason_parser.mly" + ( _1 ) +# 8918 "reason_parser.ml" + + in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 8924 "reason_parser.ml" in let _2 = @@ -56505,18 +50343,23 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7528 "reason_parser.ml" +# 8936 "reason_parser.ml" in -# 1807 "reason_parser.mly" - ( let body = List.fold_right mkclass_fun _4 _5 in +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in let params = match _3 with None -> [] | Some x -> x in (_2, body, _1, params) ) -# 7537 "reason_parser.ml" +# 8950 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56532,31 +50375,56 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__5_; MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30000; - MenhirLib.EngineTypes.startp = _startpos__30000_; - MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _100000; - MenhirLib.EngineTypes.startp = _startpos__100000_; - MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.semv = _10001; + MenhirLib.EngineTypes.startp = _startpos__10001_; + MenhirLib.EngineTypes.endp = _endpos__10001_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _11000; - MenhirLib.EngineTypes.startp = _startpos__11000_; - MenhirLib.EngineTypes.endp = _endpos__11000_; + MenhirLib.EngineTypes.semv = _210; + MenhirLib.EngineTypes.startp = _startpos__210_; + MenhirLib.EngineTypes.endp = _endpos__210_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200000; + MenhirLib.EngineTypes.startp = _startpos__200000_; + MenhirLib.EngineTypes.endp = _endpos__200000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000000; + MenhirLib.EngineTypes.startp = _startpos__1000000_; + MenhirLib.EngineTypes.endp = _endpos__1000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; }; @@ -56565,65 +50433,134 @@ module Tables = struct }; } = _menhir_stack in let _5 : 'tv_class_declaration_body = Obj.magic _5 in - let _4 : 'tv_loption_labeled_pattern_list_ = Obj.magic _4 in + let _400 : unit = Obj.magic _400 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _10001 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _10001 in + let _210 : unit = Obj.magic _210 in + let _100 : unit = Obj.magic _100 in let _30000 : unit = Obj.magic _30000 in - let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _100000 in - let _11000 : unit = Obj.magic _11000 in + let _200000 : 'tv_option_COMMA_ = Obj.magic _200000 in + let _1000000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1000000 in + let _10000 : unit = Obj.magic _10000 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 7593 "reason_parser.ml" +# 9036 "reason_parser.ml" ) = Obj.magic x0 in let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : 'tv_class_declaration_details = let _3 = + let _v : 'tv_class_declaration_details = let _4 = + let _40 = _400 in + let _200 = _2000 in + let _1000 = _10001 in + let _21 = _210 in + let _10 = _100 in + let x = + let _4 = _40 in + let _20 = _200 in + let _100 = _1000 in + let _2 = _21 in + let _1 = _10 in + let _3 = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 9062 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 9068 "reason_parser.ml" + + in + +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) + ) +# 9084 "reason_parser.ml" + + in + +# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 9090 "reason_parser.ml" + + in + let _3 = let _3000 = _30000 in - let _10000 = _100000 in - let _1100 = _11000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in let x = let _300 = _3000 in - let _1000 = _10000 in - let _110 = _1100 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in let _1 = let _30 = _300 in - let _100 = _1000 in - let _11 = _110 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in let _1 = let _3 = _30 in - let _10 = _100 in - let _1 = _11 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in let x = - let _1 = _10 in - -# 4419 "reason_parser.mly" + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 7620 "reason_parser.ml" +# 9121 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 9127 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 7626 "reason_parser.ml" +# 9133 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 7632 "reason_parser.ml" +# 9139 "reason_parser.ml" in -# 2179 "reason_parser.mly" +# 2325 "reason_parser.mly" ( _1 ) -# 7638 "reason_parser.ml" +# 9145 "reason_parser.ml" in # 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 7644 "reason_parser.ml" +# 9151 "reason_parser.ml" in let _2 = @@ -56633,18 +50570,23 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7656 "reason_parser.ml" +# 9163 "reason_parser.ml" in -# 1807 "reason_parser.mly" - ( let body = List.fold_right mkclass_fun _4 _5 in +# 1935 "reason_parser.mly" + ( + let tree = match _4 with + | None -> [] + | Some (lpl, _uncurried) -> lpl + in + let body = List.fold_right mkclass_fun tree _5 in let params = match _3 with None -> [] | Some x -> x in (_2, body, _1, params) ) -# 7665 "reason_parser.ml" +# 9177 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56686,9 +50628,9 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : 'tv_loption_class_type_parameters_ = Obj.magic _3 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 7709 "reason_parser.ml" +# 9221 "reason_parser.ml" ) = Obj.magic x0 in let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -56701,15 +50643,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 7724 "reason_parser.ml" +# 9236 "reason_parser.ml" in -# 2184 "reason_parser.mly" +# 2330 "reason_parser.mly" ( (_2, _5, _1, _3) ) -# 7730 "reason_parser.ml" +# 9242 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56745,9 +50687,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : 'tv_class_descriptions = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 7768 "reason_parser.ml" +# 9280 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -56758,12 +50700,12 @@ module Tables = struct else _startpos__2_ in -# 2163 "reason_parser.mly" +# 2306 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in (Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc :: _4) ) -# 7784 "reason_parser.ml" +# 9296 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56808,15 +50750,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 7831 "reason_parser.ml" +# 9343 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 7837 "reason_parser.ml" +# 9349 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -56827,12 +50769,12 @@ module Tables = struct else _startpos__2_ in -# 2163 "reason_parser.mly" +# 2306 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos in (Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc :: _4) ) -# 7853 "reason_parser.ml" +# 9365 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56861,9 +50803,9 @@ module Tables = struct let x = let _1 = _10 in -# 1844 "reason_parser.mly" +# 1977 "reason_parser.mly" ( _1 ) -# 7884 "reason_parser.ml" +# 9396 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -56871,15 +50813,263 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" + ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 9406 "reason_parser.ml" + + in + +# 2008 "reason_parser.mly" + (_1) +# 9412 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _110; + MenhirLib.EngineTypes.startp = _startpos__110_; + MenhirLib.EngineTypes.endp = _endpos__110_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _400 : 'tv_class_expr = Obj.magic _400 in + let _300 : unit = Obj.magic _300 in + let _2000 : unit = Obj.magic _2000 in + let _1000 : unit = Obj.magic _1000 in + let _110 : 'tv_either_ES6_FUN_FUN_ = Obj.magic _110 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__110_ in + let _endpos = _endpos__400_ in + let _v : 'tv_class_expr = let _1 = + let _endpos__40_ = _endpos__400_ in + let _endpos__200_ = _endpos__2000_ in + let _startpos__11_ = _startpos__110_ in + let _startpos__100_ = _startpos__1000_ in + let _40 = _400 in + let _30 = _300 in + let _200 = _2000 in + let _100 = _1000 in + let _11 = _110 in + let x = + let _endpos__20_ = _endpos__200_ in + let _startpos__10_ = _startpos__100_ in + let _4 = _40 in + let _3 = _30 in + let _20 = _200 in + let _10 = _100 in + let _1 = _11 in + let _2 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 9489 "reason_parser.ml" + + in + +# 1979 "reason_parser.mly" + ( let (lp, _) = _2 in + List.fold_right mkclass_fun lp _4 ) +# 9496 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__40_ in + let _startpos_x_ = _startpos__11_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4696 "reason_parser.mly" + ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 9506 "reason_parser.ml" + + in + +# 2008 "reason_parser.mly" + (_1) +# 9512 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300000; + MenhirLib.EngineTypes.startp = _startpos__300000_; + MenhirLib.EngineTypes.endp = _endpos__300000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2000000; + MenhirLib.EngineTypes.startp = _startpos__2000000_; + MenhirLib.EngineTypes.endp = _endpos__2000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10000000; + MenhirLib.EngineTypes.startp = _startpos__10000000_; + MenhirLib.EngineTypes.endp = _endpos__10000000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _400 : 'tv_class_expr = Obj.magic _400 in + let _300 : unit = Obj.magic _300 in + let _300000 : unit = Obj.magic _300000 in + let _2000000 : 'tv_option_COMMA_ = Obj.magic _2000000 in + let _10000000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _10000000 in + let _100000 : unit = Obj.magic _100000 in + let _100 : 'tv_either_ES6_FUN_FUN_ = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__400_ in + let _v : 'tv_class_expr = let _1 = + let _endpos__40_ = _endpos__400_ in + let _startpos__10_ = _startpos__100_ in + let _40 = _400 in + let _30 = _300 in + let _30000 = _300000 in + let _200000 = _2000000 in + let _1000000 = _10000000 in + let _10000 = _100000 in + let _10 = _100 in + let x = + let _4 = _40 in + let _3 = _30 in + let _3000 = _30000 in + let _20000 = _200000 in + let _100000 = _1000000 in + let _1000 = _10000 in + let _1 = _10 in + let _2 = + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 9611 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 9617 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 9623 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 9629 "reason_parser.ml" + + in + +# 2548 "reason_parser.mly" + ( + (_1, false) + ) +# 9637 "reason_parser.ml" + + in + +# 1979 "reason_parser.mly" + ( let (lp, _) = _2 in + List.fold_right mkclass_fun lp _4 ) +# 9644 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__40_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 7894 "reason_parser.ml" +# 9654 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 7900 "reason_parser.ml" +# 9660 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56894,132 +51084,244 @@ module Tables = struct MenhirLib.EngineTypes.semv = _400; MenhirLib.EngineTypes.startp = _startpos__400_; MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _310; + MenhirLib.EngineTypes.startp = _startpos__310_; + MenhirLib.EngineTypes.endp = _endpos__310_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _110; + MenhirLib.EngineTypes.startp = _startpos__110_; + MenhirLib.EngineTypes.endp = _endpos__110_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _400 : 'tv_class_expr = Obj.magic _400 in + let _310 : unit = Obj.magic _310 in + let _3000 : unit = Obj.magic _3000 in + let _2000 : unit = Obj.magic _2000 in + let _1000 : unit = Obj.magic _1000 in + let _110 : 'tv_either_ES6_FUN_FUN_ = Obj.magic _110 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__110_ in + let _endpos = _endpos__400_ in + let _v : 'tv_class_expr = let _1 = + let _endpos__40_ = _endpos__400_ in + let _endpos__300_ = _endpos__3000_ in + let _startpos__11_ = _startpos__110_ in + let _startpos__100_ = _startpos__1000_ in + let _40 = _400 in + let _31 = _310 in + let _300 = _3000 in + let _200 = _2000 in + let _100 = _1000 in + let _11 = _110 in + let x = + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _4 = _40 in + let _3 = _31 in + let _30 = _300 in + let _20 = _200 in + let _10 = _100 in + let _1 = _11 in + let _2 = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 2551 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) + ) +# 9746 "reason_parser.ml" + + in + +# 1979 "reason_parser.mly" + ( let (lp, _) = _2 in + List.fold_right mkclass_fun lp _4 ) +# 9753 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__40_ in + let _startpos_x_ = _startpos__11_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4696 "reason_parser.mly" + ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 9763 "reason_parser.ml" + + in + +# 2008 "reason_parser.mly" + (_1) +# 9769 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _410; + MenhirLib.EngineTypes.startp = _startpos__410_; + MenhirLib.EngineTypes.endp = _endpos__410_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _300; MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300000; - MenhirLib.EngineTypes.startp = _startpos__300000_; - MenhirLib.EngineTypes.endp = _endpos__300000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs000000; - MenhirLib.EngineTypes.startp = _startpos_xs000000_; - MenhirLib.EngineTypes.endp = _endpos_xs000000_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _100000; MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2100; + MenhirLib.EngineTypes.startp = _startpos__2100_; + MenhirLib.EngineTypes.endp = _endpos__2100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _110; + MenhirLib.EngineTypes.startp = _startpos__110_; + MenhirLib.EngineTypes.endp = _endpos__110_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; }; }; } = _menhir_stack in - let _400 : 'tv_class_expr = Obj.magic _400 in + let _410 : 'tv_class_expr = Obj.magic _410 in let _300 : unit = Obj.magic _300 in - let _300000 : unit = Obj.magic _300000 in - let xs000000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = Obj.magic xs000000 in - let _100000 : unit = Obj.magic _100000 in - let _100 : 'tv_either_ES6_FUN_FUN_ = Obj.magic _100 in + let _4000 : unit = Obj.magic _4000 in + let _20000 : 'tv_option_COMMA_ = Obj.magic _20000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _100000 in + let _2100 : unit = Obj.magic _2100 in + let _1000 : unit = Obj.magic _1000 in + let _110 : 'tv_either_ES6_FUN_FUN_ = Obj.magic _110 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__400_ in + let _startpos = _startpos__110_ in + let _endpos = _endpos__410_ in let _v : 'tv_class_expr = let _1 = - let _endpos__40_ = _endpos__400_ in - let _endpos__30000_ = _endpos__300000_ in - let _startpos__10000_ = _startpos__100000_ in - let _startpos__10_ = _startpos__100_ in - let _40 = _400 in + let _endpos__41_ = _endpos__410_ in + let _startpos__11_ = _startpos__110_ in + let _41 = _410 in let _30 = _300 in - let _30000 = _300000 in - let xs00000 = xs000000 in + let _400 = _4000 in + let _2000 = _20000 in let _10000 = _100000 in - let _10 = _100 in + let _210 = _2100 in + let _100 = _1000 in + let _11 = _110 in let x = - let _endpos__3000_ = _endpos__30000_ in - let _startpos__1000_ = _startpos__10000_ in - let _4 = _40 in + let _4 = _41 in let _3 = _30 in - let _3000 = _30000 in - let xs0000 = xs00000 in + let _40 = _400 in + let _200 = _2000 in let _1000 = _10000 in - let _1 = _10 in + let _21 = _210 in + let _10 = _100 in + let _1 = _11 in let _2 = - let _endpos__300_ = _endpos__3000_ in - let _startpos__100_ = _startpos__1000_ in - let _300 = _3000 in - let xs000 = xs0000 in + let _4 = _40 in + let _20 = _200 in let _100 = _1000 in - let _1 = - let _30 = _300 in - let xs00 = xs000 in + let _2 = _21 in + let _1 = _10 in + let _3 = + let _2 = _20 in let _10 = _100 in let _1 = - let _3 = _30 in - let xs0 = xs00 in let _1 = _10 in - let x = - let xs = xs0 in - -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 7991 "reason_parser.ml" - - in -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 7997 "reason_parser.ml" +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 9867 "reason_parser.ml" in -# 4429 "reason_parser.mly" - ( _1 ) -# 8003 "reason_parser.ml" +# 2541 "reason_parser.mly" + ( _1 ) +# 9873 "reason_parser.ml" in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in -# 2395 "reason_parser.mly" - ( match _1 with - | [] -> - let loc = mklocation _startpos _endpos in - [mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc] - | pats -> pats +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) ) -# 8018 "reason_parser.ml" +# 9889 "reason_parser.ml" in -# 1846 "reason_parser.mly" - ( List.fold_right mkclass_fun _2 _4 ) -# 8024 "reason_parser.ml" +# 1979 "reason_parser.mly" + ( let (lp, _) = _2 in + List.fold_right mkclass_fun lp _4 ) +# 9896 "reason_parser.ml" in - let _endpos_x_ = _endpos__40_ in - let _startpos_x_ = _startpos__10_ in + let _endpos_x_ = _endpos__41_ in + let _startpos_x_ = _startpos__11_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8034 "reason_parser.ml" +# 9906 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 8040 "reason_parser.ml" +# 9912 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57056,9 +51358,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1855 "reason_parser.mly" +# 1989 "reason_parser.mly" ( mkclass(Pcl_apply(_1, _2)) ) -# 8079 "reason_parser.ml" +# 9951 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -57066,15 +51368,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8089 "reason_parser.ml" +# 9961 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 8095 "reason_parser.ml" +# 9967 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57111,9 +51413,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1857 "reason_parser.mly" +# 1991 "reason_parser.mly" ( {_2 with pcl_attributes = _1 :: _2.pcl_attributes} ) -# 8134 "reason_parser.ml" +# 10006 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -57121,15 +51423,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8144 "reason_parser.ml" +# 10016 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 8150 "reason_parser.ml" +# 10022 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57184,15 +51486,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 8207 "reason_parser.ml" +# 10079 "reason_parser.ml" in -# 1871 "reason_parser.mly" +# 2005 "reason_parser.mly" ( mkclass(Pcl_constr(_2, _3)) ) -# 8213 "reason_parser.ml" +# 10085 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57200,15 +51502,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8223 "reason_parser.ml" +# 10095 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 8229 "reason_parser.ml" +# 10101 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57237,9 +51539,9 @@ module Tables = struct let x = let _1 = _10 in -# 1873 "reason_parser.mly" +# 2007 "reason_parser.mly" ( mkclass(Pcl_extension _1) ) -# 8260 "reason_parser.ml" +# 10132 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -57247,15 +51549,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8270 "reason_parser.ml" +# 10142 "reason_parser.ml" in -# 1874 "reason_parser.mly" +# 2008 "reason_parser.mly" (_1) -# 8276 "reason_parser.ml" +# 10148 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57284,9 +51586,9 @@ module Tables = struct let x = let _1 = _10 in -# 1824 "reason_parser.mly" +# 1957 "reason_parser.mly" ( _1 ) -# 8307 "reason_parser.ml" +# 10179 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -57297,15 +51599,15 @@ module Tables = struct else _endpos in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8320 "reason_parser.ml" +# 10192 "reason_parser.ml" in -# 1828 "reason_parser.mly" +# 1961 "reason_parser.mly" (_1) -# 8326 "reason_parser.ml" +# 10198 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57350,9 +51652,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1826 "reason_parser.mly" +# 1959 "reason_parser.mly" ( class_of_let_bindings _1 _3 ) -# 8373 "reason_parser.ml" +# 10245 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57363,15 +51665,15 @@ module Tables = struct else _endpos in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8386 "reason_parser.ml" +# 10258 "reason_parser.ml" in -# 1828 "reason_parser.mly" +# 1961 "reason_parser.mly" (_1) -# 8392 "reason_parser.ml" +# 10264 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57400,9 +51702,9 @@ module Tables = struct let x = let _1 = _10 in -# 1827 "reason_parser.mly" +# 1960 "reason_parser.mly" ( mkclass (Pcl_structure _1) ) -# 8423 "reason_parser.ml" +# 10295 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -57413,15 +51715,15 @@ module Tables = struct else _endpos in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8436 "reason_parser.ml" +# 10308 "reason_parser.ml" in -# 1828 "reason_parser.mly" +# 1961 "reason_parser.mly" (_1) -# 8442 "reason_parser.ml" +# 10314 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57475,15 +51777,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 8498 "reason_parser.ml" +# 10370 "reason_parser.ml" in -# 1899 "reason_parser.mly" +# 2033 "reason_parser.mly" ( mkcf_attrs (Pcf_inherit (_3, _4, _5)) _1 ) -# 8504 "reason_parser.ml" +# 10376 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -57491,15 +51793,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8514 "reason_parser.ml" +# 10386 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8520 "reason_parser.ml" +# 10392 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57564,21 +51866,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 8587 "reason_parser.ml" +# 10459 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 8593 "reason_parser.ml" +# 10465 "reason_parser.ml" in -# 1899 "reason_parser.mly" +# 2033 "reason_parser.mly" ( mkcf_attrs (Pcf_inherit (_3, _4, _5)) _1 ) -# 8599 "reason_parser.ml" +# 10471 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -57586,15 +51888,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8609 "reason_parser.ml" +# 10481 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8615 "reason_parser.ml" +# 10487 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57632,15 +51934,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 8655 "reason_parser.ml" +# 10527 "reason_parser.ml" in -# 1901 "reason_parser.mly" +# 2035 "reason_parser.mly" ( mkcf_attrs (Pcf_val _3) _1 ) -# 8661 "reason_parser.ml" +# 10533 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57648,15 +51950,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8671 "reason_parser.ml" +# 10543 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8677 "reason_parser.ml" +# 10549 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57705,21 +52007,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 8728 "reason_parser.ml" +# 10600 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 8734 "reason_parser.ml" +# 10606 "reason_parser.ml" in -# 1901 "reason_parser.mly" +# 2035 "reason_parser.mly" ( mkcf_attrs (Pcf_val _3) _1 ) -# 8740 "reason_parser.ml" +# 10612 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57727,15 +52029,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8750 "reason_parser.ml" +# 10622 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8756 "reason_parser.ml" +# 10628 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57759,7 +52061,7 @@ module Tables = struct }; } = _menhir_stack in let _300 : 'tv_method_ = Obj.magic _300 in - let _200 : 'tv_either___anonymous_14___anonymous_15_ = Obj.magic _200 in + let _200 : 'tv_either___anonymous_13___anonymous_14_ = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__300_ in @@ -57773,15 +52075,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 8796 "reason_parser.ml" +# 10668 "reason_parser.ml" in -# 1903 "reason_parser.mly" +# 2037 "reason_parser.mly" ( let (a, b) = _3 in mkcf_attrs (Pcf_method (a, _2, b)) _1 ) -# 8802 "reason_parser.ml" +# 10674 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57789,15 +52091,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8812 "reason_parser.ml" +# 10684 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8818 "reason_parser.ml" +# 10690 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57826,7 +52128,7 @@ module Tables = struct }; } = _menhir_stack in let _300 : 'tv_method_ = Obj.magic _300 in - let _200 : 'tv_either___anonymous_14___anonymous_15_ = Obj.magic _200 in + let _200 : 'tv_either___anonymous_13___anonymous_14_ = Obj.magic _200 in let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in @@ -57846,21 +52148,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 8869 "reason_parser.ml" +# 10741 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 8875 "reason_parser.ml" +# 10747 "reason_parser.ml" in -# 1903 "reason_parser.mly" +# 2037 "reason_parser.mly" ( let (a, b) = _3 in mkcf_attrs (Pcf_method (a, _2, b)) _1 ) -# 8881 "reason_parser.ml" +# 10753 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57868,15 +52170,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8891 "reason_parser.ml" +# 10763 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8897 "reason_parser.ml" +# 10769 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57914,15 +52216,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 8937 "reason_parser.ml" +# 10809 "reason_parser.ml" in -# 1905 "reason_parser.mly" +# 2039 "reason_parser.mly" ( mkcf_attrs (Pcf_constraint _3) _1 ) -# 8943 "reason_parser.ml" +# 10815 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -57930,15 +52232,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 8953 "reason_parser.ml" +# 10825 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 8959 "reason_parser.ml" +# 10831 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -57987,21 +52289,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 9010 "reason_parser.ml" +# 10882 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 9016 "reason_parser.ml" +# 10888 "reason_parser.ml" in -# 1905 "reason_parser.mly" +# 2039 "reason_parser.mly" ( mkcf_attrs (Pcf_constraint _3) _1 ) -# 9022 "reason_parser.ml" +# 10894 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -58009,15 +52311,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9032 "reason_parser.ml" +# 10904 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 9038 "reason_parser.ml" +# 10910 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58067,9 +52369,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 9090 "reason_parser.ml" +# 10962 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -58077,22 +52379,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9100 "reason_parser.ml" +# 10972 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 9107 "reason_parser.ml" +# 10979 "reason_parser.ml" in -# 1907 "reason_parser.mly" +# 2041 "reason_parser.mly" ( mkcf_attrs (Pcf_initializer _3) _1 ) -# 9113 "reason_parser.ml" +# 10985 "reason_parser.ml" in let _endpos_x_ = _endpos__1000_ in @@ -58100,15 +52402,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9123 "reason_parser.ml" +# 10995 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 9129 "reason_parser.ml" +# 11001 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58166,9 +52468,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 9189 "reason_parser.ml" +# 11061 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -58176,9 +52478,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9199 "reason_parser.ml" +# 11071 "reason_parser.ml" in let _1 = @@ -58186,21 +52488,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 9209 "reason_parser.ml" +# 11081 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 9215 "reason_parser.ml" +# 11087 "reason_parser.ml" in -# 1907 "reason_parser.mly" +# 2041 "reason_parser.mly" ( mkcf_attrs (Pcf_initializer _3) _1 ) -# 9221 "reason_parser.ml" +# 11093 "reason_parser.ml" in let _endpos_x_ = _endpos__1010_ in @@ -58208,15 +52510,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9231 "reason_parser.ml" +# 11103 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 9237 "reason_parser.ml" +# 11109 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58246,15 +52548,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 9269 "reason_parser.ml" +# 11141 "reason_parser.ml" in -# 1909 "reason_parser.mly" +# 2043 "reason_parser.mly" ( mkcf_attrs (Pcf_extension _2) _1 ) -# 9275 "reason_parser.ml" +# 11147 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -58262,15 +52564,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9285 "reason_parser.ml" +# 11157 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 9291 "reason_parser.ml" +# 11163 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58311,21 +52613,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 9334 "reason_parser.ml" +# 11206 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 9340 "reason_parser.ml" +# 11212 "reason_parser.ml" in -# 1909 "reason_parser.mly" +# 2043 "reason_parser.mly" ( mkcf_attrs (Pcf_extension _2) _1 ) -# 9346 "reason_parser.ml" +# 11218 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -58333,15 +52635,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4385 "reason_parser.mly" +# 4700 "reason_parser.mly" ( {x with pcf_loc = {x.pcf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9356 "reason_parser.ml" +# 11228 "reason_parser.ml" in -# 1910 "reason_parser.mly" +# 2044 "reason_parser.mly" ( [_1] ) -# 9362 "reason_parser.ml" +# 11234 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58366,15 +52668,15 @@ module Tables = struct let _v : 'tv_class_field = let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 9389 "reason_parser.ml" +# 11261 "reason_parser.ml" in -# 1912 "reason_parser.mly" +# 2046 "reason_parser.mly" ( List.map (fun x -> mkcf ~loc:x.loc (Pcf_attribute x.txt)) _1 ) -# 9395 "reason_parser.ml" +# 11267 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58397,7 +52699,7 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _200 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_only_core_type_core_type____ = Obj.magic _200 in + let _200 : 'tv_loption_parenthesized_class_type_arguments_comma_list__ = Obj.magic _200 in let x000 : 'tv_clty_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -58420,15 +52722,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 9443 "reason_parser.ml" +# 11315 "reason_parser.ml" in -# 2099 "reason_parser.mly" +# 2237 "reason_parser.mly" ( mkcty (Pcty_constr (_1, _2)) ) -# 9449 "reason_parser.ml" +# 11321 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -58436,15 +52738,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4344 "reason_parser.mly" +# 4659 "reason_parser.mly" ( {x with pcty_loc = {x.pcty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9459 "reason_parser.ml" +# 11331 "reason_parser.ml" in -# 2108 "reason_parser.mly" +# 2246 "reason_parser.mly" (_1) -# 9465 "reason_parser.ml" +# 11337 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58481,9 +52783,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2103 "reason_parser.mly" +# 2241 "reason_parser.mly" ( {_2 with pcty_attributes = _1 :: _2.pcty_attributes} ) -# 9504 "reason_parser.ml" +# 11376 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -58491,15 +52793,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4344 "reason_parser.mly" +# 4659 "reason_parser.mly" ( {x with pcty_loc = {x.pcty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9514 "reason_parser.ml" +# 11386 "reason_parser.ml" in -# 2108 "reason_parser.mly" +# 2246 "reason_parser.mly" (_1) -# 9520 "reason_parser.ml" +# 11392 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58528,9 +52830,9 @@ module Tables = struct let x = let _1 = _10 in -# 2105 "reason_parser.mly" +# 2243 "reason_parser.mly" ( _1 ) -# 9551 "reason_parser.ml" +# 11423 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -58538,15 +52840,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4344 "reason_parser.mly" +# 4659 "reason_parser.mly" ( {x with pcty_loc = {x.pcty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9561 "reason_parser.ml" +# 11433 "reason_parser.ml" in -# 2108 "reason_parser.mly" +# 2246 "reason_parser.mly" (_1) -# 9567 "reason_parser.ml" +# 11439 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58575,9 +52877,9 @@ module Tables = struct let x = let _1 = _10 in -# 2107 "reason_parser.mly" +# 2245 "reason_parser.mly" ( mkcty (Pcty_extension _1) ) -# 9598 "reason_parser.ml" +# 11470 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -58585,15 +52887,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4344 "reason_parser.mly" +# 4659 "reason_parser.mly" ( {x with pcty_loc = {x.pcty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9608 "reason_parser.ml" +# 11480 "reason_parser.ml" in -# 2108 "reason_parser.mly" +# 2246 "reason_parser.mly" (_1) -# 9614 "reason_parser.ml" +# 11486 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58612,17 +52914,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 9635 "reason_parser.ml" +# 11507 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_class_longident = -# 4162 "reason_parser.mly" +# 4476 "reason_parser.mly" ( Lident _1 ) -# 9643 "reason_parser.ml" +# 11515 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58651,9 +52953,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 9674 "reason_parser.ml" +# 11546 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_longident = Obj.magic _1 in @@ -58661,9 +52963,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_class_longident = -# 4163 "reason_parser.mly" +# 4477 "reason_parser.mly" ( Ldot(_1, _3) ) -# 9684 "reason_parser.ml" +# 11556 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58704,15 +53006,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 9727 "reason_parser.ml" +# 11599 "reason_parser.ml" in -# 2123 "reason_parser.mly" +# 2266 "reason_parser.mly" ( _2 ) -# 9733 "reason_parser.ml" +# 11605 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58730,9 +53032,9 @@ module Tables = struct let _v : 'tv_class_self_type = let _endpos = _endpos__0_ in let _symbolstartpos = _endpos in -# 2124 "reason_parser.mly" +# 2267 "reason_parser.mly" ( Typ.mk ~loc:(mklocation _symbolstartpos _endpos) Ptyp_any ) -# 9753 "reason_parser.ml" +# 11625 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58762,15 +53064,15 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_class_sig_body = let _2 = -# 4415 "reason_parser.mly" +# 4730 "reason_parser.mly" ( [] ) -# 9785 "reason_parser.ml" +# 11657 "reason_parser.ml" in -# 2119 "reason_parser.mly" +# 2262 "reason_parser.mly" ( Csig.mk _1 (List.concat _2) ) -# 9791 "reason_parser.ml" +# 11663 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58809,21 +53111,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 9832 "reason_parser.ml" +# 11704 "reason_parser.ml" in -# 4416 "reason_parser.mly" +# 4731 "reason_parser.mly" ( _1 ) -# 9838 "reason_parser.ml" +# 11710 "reason_parser.ml" in -# 2119 "reason_parser.mly" +# 2262 "reason_parser.mly" ( Csig.mk _1 (List.concat _2) ) -# 9844 "reason_parser.ml" +# 11716 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58861,15 +53163,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 9884 "reason_parser.ml" +# 11756 "reason_parser.ml" in -# 2130 "reason_parser.mly" +# 2273 "reason_parser.mly" ( mkctf_attrs (Pctf_inherit _3) _1 ) -# 9890 "reason_parser.ml" +# 11762 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -58877,15 +53179,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9900 "reason_parser.ml" +# 11772 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 9906 "reason_parser.ml" +# 11778 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -58934,21 +53236,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 9957 "reason_parser.ml" +# 11829 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 9963 "reason_parser.ml" +# 11835 "reason_parser.ml" in -# 2130 "reason_parser.mly" +# 2273 "reason_parser.mly" ( mkctf_attrs (Pctf_inherit _3) _1 ) -# 9969 "reason_parser.ml" +# 11841 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -58956,15 +53258,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 9979 "reason_parser.ml" +# 11851 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 9985 "reason_parser.ml" +# 11857 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59002,15 +53304,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 10025 "reason_parser.ml" +# 11897 "reason_parser.ml" in -# 2132 "reason_parser.mly" +# 2275 "reason_parser.mly" ( mkctf_attrs (Pctf_val _3) _1 ) -# 10031 "reason_parser.ml" +# 11903 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -59018,15 +53320,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10041 "reason_parser.ml" +# 11913 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10047 "reason_parser.ml" +# 11919 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59075,21 +53377,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10098 "reason_parser.ml" +# 11970 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 10104 "reason_parser.ml" +# 11976 "reason_parser.ml" in -# 2132 "reason_parser.mly" +# 2275 "reason_parser.mly" ( mkctf_attrs (Pctf_val _3) _1 ) -# 10110 "reason_parser.ml" +# 11982 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -59097,15 +53399,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10120 "reason_parser.ml" +# 11992 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10126 "reason_parser.ml" +# 11998 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59146,9 +53448,9 @@ module Tables = struct let _600 : 'tv_poly_type = Obj.magic _600 in let _500 : unit = Obj.magic _500 in let _1000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 10169 "reason_parser.ml" +# 12041 "reason_parser.ml" ) = Obj.magic _1000 in let _300 : 'tv_virtual_flag = Obj.magic _300 in let _200 : unit = Obj.magic _200 in @@ -59172,22 +53474,22 @@ module Tables = struct let _4 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 10195 "reason_parser.ml" +# 12067 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 10202 "reason_parser.ml" +# 12074 "reason_parser.ml" in -# 2134 "reason_parser.mly" +# 2277 "reason_parser.mly" ( mkctf_attrs (Pctf_method (_4, Private, _3, _6)) _1 ) -# 10208 "reason_parser.ml" +# 12080 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -59195,15 +53497,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10218 "reason_parser.ml" +# 12090 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10224 "reason_parser.ml" +# 12096 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59249,9 +53551,9 @@ module Tables = struct let _600 : 'tv_poly_type = Obj.magic _600 in let _500 : unit = Obj.magic _500 in let _1010 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 10272 "reason_parser.ml" +# 12144 "reason_parser.ml" ) = Obj.magic _1010 in let _300 : 'tv_virtual_flag = Obj.magic _300 in let _200 : unit = Obj.magic _200 in @@ -59278,9 +53580,9 @@ module Tables = struct let _4 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 10301 "reason_parser.ml" +# 12173 "reason_parser.ml" in let _1 = @@ -59288,21 +53590,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10311 "reason_parser.ml" +# 12183 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 10317 "reason_parser.ml" +# 12189 "reason_parser.ml" in -# 2134 "reason_parser.mly" +# 2277 "reason_parser.mly" ( mkctf_attrs (Pctf_method (_4, Private, _3, _6)) _1 ) -# 10323 "reason_parser.ml" +# 12195 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -59310,15 +53612,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10333 "reason_parser.ml" +# 12205 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10339 "reason_parser.ml" +# 12211 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59359,9 +53661,9 @@ module Tables = struct let _600 : 'tv_poly_type = Obj.magic _600 in let _500 : unit = Obj.magic _500 in let _1000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 10382 "reason_parser.ml" +# 12254 "reason_parser.ml" ) = Obj.magic _1000 in let _300 : 'tv_virtual_flag = Obj.magic _300 in let _200 : unit = Obj.magic _200 in @@ -59385,22 +53687,22 @@ module Tables = struct let _4 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 10408 "reason_parser.ml" +# 12280 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 10415 "reason_parser.ml" +# 12287 "reason_parser.ml" in -# 2136 "reason_parser.mly" +# 2279 "reason_parser.mly" ( mkctf_attrs (Pctf_method (_4, Public, _3, _6)) _1 ) -# 10421 "reason_parser.ml" +# 12293 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -59408,15 +53710,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10431 "reason_parser.ml" +# 12303 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10437 "reason_parser.ml" +# 12309 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59462,9 +53764,9 @@ module Tables = struct let _600 : 'tv_poly_type = Obj.magic _600 in let _500 : unit = Obj.magic _500 in let _1010 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 10485 "reason_parser.ml" +# 12357 "reason_parser.ml" ) = Obj.magic _1010 in let _300 : 'tv_virtual_flag = Obj.magic _300 in let _200 : unit = Obj.magic _200 in @@ -59491,9 +53793,9 @@ module Tables = struct let _4 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 10514 "reason_parser.ml" +# 12386 "reason_parser.ml" in let _1 = @@ -59501,21 +53803,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10524 "reason_parser.ml" +# 12396 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 10530 "reason_parser.ml" +# 12402 "reason_parser.ml" in -# 2136 "reason_parser.mly" +# 2279 "reason_parser.mly" ( mkctf_attrs (Pctf_method (_4, Public, _3, _6)) _1 ) -# 10536 "reason_parser.ml" +# 12408 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -59523,15 +53825,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10546 "reason_parser.ml" +# 12418 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10552 "reason_parser.ml" +# 12424 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59569,15 +53871,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 10592 "reason_parser.ml" +# 12464 "reason_parser.ml" in -# 2138 "reason_parser.mly" +# 2281 "reason_parser.mly" ( mkctf_attrs (Pctf_constraint _3) _1 ) -# 10598 "reason_parser.ml" +# 12470 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -59585,15 +53887,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10608 "reason_parser.ml" +# 12480 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10614 "reason_parser.ml" +# 12486 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59642,21 +53944,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10665 "reason_parser.ml" +# 12537 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 10671 "reason_parser.ml" +# 12543 "reason_parser.ml" in -# 2138 "reason_parser.mly" +# 2281 "reason_parser.mly" ( mkctf_attrs (Pctf_constraint _3) _1 ) -# 10677 "reason_parser.ml" +# 12549 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -59664,15 +53966,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10687 "reason_parser.ml" +# 12559 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10693 "reason_parser.ml" +# 12565 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59702,15 +54004,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 10725 "reason_parser.ml" +# 12597 "reason_parser.ml" in -# 2140 "reason_parser.mly" +# 2283 "reason_parser.mly" ( mkctf_attrs (Pctf_extension _2) _1 ) -# 10731 "reason_parser.ml" +# 12603 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -59718,15 +54020,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10741 "reason_parser.ml" +# 12613 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10747 "reason_parser.ml" +# 12619 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59767,21 +54069,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10790 "reason_parser.ml" +# 12662 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 10796 "reason_parser.ml" +# 12668 "reason_parser.ml" in -# 2140 "reason_parser.mly" +# 2283 "reason_parser.mly" ( mkctf_attrs (Pctf_extension _2) _1 ) -# 10802 "reason_parser.ml" +# 12674 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -59789,15 +54091,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4348 "reason_parser.mly" +# 4663 "reason_parser.mly" ( {x with pctf_loc = {x.pctf_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10812 "reason_parser.ml" +# 12684 "reason_parser.ml" in -# 2141 "reason_parser.mly" +# 2284 "reason_parser.mly" ( [_1] ) -# 10818 "reason_parser.ml" +# 12690 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59822,15 +54124,15 @@ module Tables = struct let _v : 'tv_class_sig_field = let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 10845 "reason_parser.ml" +# 12717 "reason_parser.ml" in -# 2143 "reason_parser.mly" +# 2286 "reason_parser.mly" ( List.map (fun x -> mkctf ~loc:x.loc (Pctf_attribute x.txt)) _1 ) -# 10851 "reason_parser.ml" +# 12723 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59867,15 +54169,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 10890 "reason_parser.ml" +# 12762 "reason_parser.ml" in -# 1879 "reason_parser.mly" +# 2013 "reason_parser.mly" ( mkclass(Pcl_constr(_1, [])) ) -# 10896 "reason_parser.ml" +# 12768 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -59883,15 +54185,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10906 "reason_parser.ml" +# 12778 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 10912 "reason_parser.ml" +# 12784 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -59940,15 +54242,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1894 "reason_parser.mly" +# 2028 "reason_parser.mly" ( _2 ) -# 10963 "reason_parser.ml" +# 12835 "reason_parser.ml" in -# 1881 "reason_parser.mly" +# 2015 "reason_parser.mly" ( _1 ) -# 10969 "reason_parser.ml" +# 12841 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -59956,15 +54258,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 10979 "reason_parser.ml" +# 12851 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 10985 "reason_parser.ml" +# 12857 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60021,9 +54323,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11044 "reason_parser.ml" +# 12916 "reason_parser.ml" in let _1 = @@ -60033,15 +54335,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11056 "reason_parser.ml" +# 12928 "reason_parser.ml" in -# 1883 "reason_parser.mly" +# 2017 "reason_parser.mly" ( unclosed_cl (with_txt _1 "{") (with_txt _3 "}") ) -# 11062 "reason_parser.ml" +# 12934 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -60049,15 +54351,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 11072 "reason_parser.ml" +# 12944 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 11078 "reason_parser.ml" +# 12950 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60118,9 +54420,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1885 "reason_parser.mly" +# 2019 "reason_parser.mly" ( mkclass(Pcl_constraint(_2, _4)) ) -# 11141 "reason_parser.ml" +# 13013 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -60128,15 +54430,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 11151 "reason_parser.ml" +# 13023 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 11157 "reason_parser.ml" +# 13029 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60209,9 +54511,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11232 "reason_parser.ml" +# 13104 "reason_parser.ml" in let _1 = @@ -60221,15 +54523,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11244 "reason_parser.ml" +# 13116 "reason_parser.ml" in -# 1887 "reason_parser.mly" +# 2021 "reason_parser.mly" ( unclosed_cl (with_txt _1 "(") (with_txt _5 ")") ) -# 11250 "reason_parser.ml" +# 13122 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -60237,15 +54539,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 11260 "reason_parser.ml" +# 13132 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 11266 "reason_parser.ml" +# 13138 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60290,9 +54592,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1889 "reason_parser.mly" +# 2023 "reason_parser.mly" ( _2 ) -# 11313 "reason_parser.ml" +# 13185 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -60300,15 +54602,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 11323 "reason_parser.ml" +# 13195 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 11329 "reason_parser.ml" +# 13201 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60365,9 +54667,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11388 "reason_parser.ml" +# 13260 "reason_parser.ml" in let _1 = @@ -60377,15 +54679,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11400 "reason_parser.ml" +# 13272 "reason_parser.ml" in -# 1891 "reason_parser.mly" +# 2025 "reason_parser.mly" ( unclosed_cl (with_txt _1 "(") (with_txt _3 ")") ) -# 11406 "reason_parser.ml" +# 13278 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -60393,15 +54695,54 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4381 "reason_parser.mly" +# 4696 "reason_parser.mly" ( {x with pcl_loc = {x.pcl_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 11416 "reason_parser.ml" +# 13288 "reason_parser.ml" in -# 1892 "reason_parser.mly" +# 2026 "reason_parser.mly" (_1) -# 11422 "reason_parser.ml" +# 13294 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _10 : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__2_ in + let _v : 'tv_class_type_arguments_comma_list = let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 13327 "reason_parser.ml" + + in + +# 2230 "reason_parser.mly" + (_1) +# 13333 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60438,9 +54779,57 @@ module Tables = struct let _v : 'tv_class_type_body = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2112 "reason_parser.mly" +# 2250 "reason_parser.mly" ( mkcty ~loc:(mklocation _startpos _endpos) (Pcty_signature _2) ) -# 11461 "reason_parser.ml" +# 13372 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let _3 : 'tv_class_sig_body = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_class_type_body = let _endpos = _endpos__4_ in + let _startpos = _startpos__1_ in + +# 2252 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let ct = mkcty ~loc (Pcty_signature _3) in + {ct with pcty_attributes = [uncurry_payload loc]} + ) +# 13420 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60481,9 +54870,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11504 "reason_parser.ml" +# 13463 "reason_parser.ml" in let _1 = @@ -60493,15 +54882,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11516 "reason_parser.ml" +# 13475 "reason_parser.ml" in -# 2114 "reason_parser.mly" +# 2257 "reason_parser.mly" ( unclosed_cty (with_txt _1 "{") (with_txt _3 "}") ) -# 11522 "reason_parser.ml" +# 13481 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60537,9 +54926,9 @@ module Tables = struct let _4 : 'tv_either_preceded_EQUAL_class_instance_type__class_type_body_ = Obj.magic _4 in let _3 : 'tv_loption_class_type_parameters_ = Obj.magic _3 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 11560 "reason_parser.ml" +# 13519 "reason_parser.ml" ) = Obj.magic x0 in let _1 : 'tv_virtual_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -60552,15 +54941,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 11575 "reason_parser.ml" +# 13534 "reason_parser.ml" in -# 2207 "reason_parser.mly" +# 2353 "reason_parser.mly" ( (_2, _4, _1, _3) ) -# 11581 "reason_parser.ml" +# 13540 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60602,9 +54991,9 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : 'tv_class_type_declarations = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 11625 "reason_parser.ml" +# 13584 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -60615,12 +55004,12 @@ module Tables = struct else _startpos__2_ in -# 2190 "reason_parser.mly" +# 2336 "reason_parser.mly" ( let (ident, instance_type, virt, params) = _4 in let loc = mklocation _symbolstartpos _endpos in (Ci.mk ident instance_type ~virt ~params ~attrs:_1 ~loc :: _5) ) -# 11641 "reason_parser.ml" +# 13600 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60671,15 +55060,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 11694 "reason_parser.ml" +# 13653 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 11700 "reason_parser.ml" +# 13659 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -60690,12 +55079,12 @@ module Tables = struct else _startpos__2_ in -# 2190 "reason_parser.mly" +# 2336 "reason_parser.mly" ( let (ident, instance_type, virt, params) = _4 in let loc = mklocation _symbolstartpos _endpos in (Ci.mk ident instance_type ~virt ~params ~attrs:_1 ~loc :: _5) ) -# 11716 "reason_parser.ml" +# 13675 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60714,17 +55103,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 11737 "reason_parser.ml" +# 13696 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_clty_longident = -# 4157 "reason_parser.mly" +# 4471 "reason_parser.mly" ( Lident _1 ) -# 11745 "reason_parser.ml" +# 13704 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60753,9 +55142,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 11776 "reason_parser.ml" +# 13735 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_ext_longident = Obj.magic _1 in @@ -60763,9 +55152,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_clty_longident = -# 4158 "reason_parser.mly" +# 4472 "reason_parser.mly" ( Ldot(_1, _3) ) -# 11786 "reason_parser.ml" +# 13745 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60784,17 +55173,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 993 "reason_parser.mly" +# 1113 "reason_parser.mly" (string * char option) -# 11807 "reason_parser.ml" +# 13766 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constant = -# 4020 "reason_parser.mly" +# 4334 "reason_parser.mly" ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 11815 "reason_parser.ml" +# 13774 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60813,17 +55202,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 953 "reason_parser.mly" +# 1073 "reason_parser.mly" (char) -# 11836 "reason_parser.ml" +# 13795 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constant = -# 4021 "reason_parser.mly" +# 4335 "reason_parser.mly" ( Pconst_char _1 ) -# 11844 "reason_parser.ml" +# 13803 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60842,17 +55231,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 11865 "reason_parser.ml" +# 13824 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constant = -# 4022 "reason_parser.mly" +# 4336 "reason_parser.mly" ( let (s, d) = _1 in Pconst_string (s, d) ) -# 11873 "reason_parser.ml" +# 13832 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60871,17 +55260,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 974 "reason_parser.mly" +# 1094 "reason_parser.mly" (string * char option) -# 11894 "reason_parser.ml" +# 13853 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constant = -# 4023 "reason_parser.mly" +# 4337 "reason_parser.mly" ( let (f, m) = _1 in Pconst_float (f, m) ) -# 11902 "reason_parser.ml" +# 13861 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60904,9 +55293,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constr_longident = -# 4097 "reason_parser.mly" +# 4411 "reason_parser.mly" ( _1 ) -# 11927 "reason_parser.ml" +# 13886 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60935,9 +55324,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_constr_longident = -# 4098 "reason_parser.mly" +# 4412 "reason_parser.mly" ( Lident "[]" ) -# 11958 "reason_parser.ml" +# 13917 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60966,9 +55355,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_constr_longident = -# 4099 "reason_parser.mly" +# 4413 "reason_parser.mly" ( Lident "()" ) -# 11989 "reason_parser.ml" +# 13948 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -60991,9 +55380,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constr_longident = -# 4100 "reason_parser.mly" +# 4414 "reason_parser.mly" ( Lident "false" ) -# 12014 "reason_parser.ml" +# 13973 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61016,9 +55405,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constr_longident = -# 4101 "reason_parser.mly" +# 4415 "reason_parser.mly" ( Lident "true" ) -# 12039 "reason_parser.ml" +# 13998 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61059,9 +55448,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 12082 "reason_parser.ml" +# 14041 "reason_parser.ml" in let _endpos__3_ = _endpos__11_ in @@ -61072,18 +55461,18 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 12095 "reason_parser.ml" +# 14054 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 2153 "reason_parser.mly" +# 2296 "reason_parser.mly" ( (_1, _3, mklocation _symbolstartpos _endpos) ) -# 12104 "reason_parser.ml" +# 14063 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61124,9 +55513,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 12147 "reason_parser.ml" +# 14106 "reason_parser.ml" in let _1 = @@ -61136,15 +55525,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 12159 "reason_parser.ml" +# 14118 "reason_parser.ml" in -# 2158 "reason_parser.mly" +# 2301 "reason_parser.mly" ( (_1, _3) ) -# 12165 "reason_parser.ml" +# 14124 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61167,12 +55556,12 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_constructor_arguments = -# 3578 "reason_parser.mly" +# 3868 "reason_parser.mly" ( match _1 with | Core_type ct -> Pcstr_tuple [ct] | Record_type rt -> Pcstr_record rt ) -# 12193 "reason_parser.ml" +# 14152 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61201,7 +55590,7 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = Obj.magic x00 in + let x00 : 'tv_constructor_arguments_comma_list = Obj.magic x00 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in @@ -61217,19 +55606,58 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 12238 "reason_parser.ml" +# 14197 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 12244 "reason_parser.ml" +# 14203 "reason_parser.ml" in -# 3583 "reason_parser.mly" +# 3873 "reason_parser.mly" ( Pcstr_tuple _1 ) -# 12250 "reason_parser.ml" +# 14209 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _10 : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__2_ in + let _v : 'tv_constructor_arguments_comma_list = let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 14242 "reason_parser.ml" + + in + +# 3863 "reason_parser.mly" + (_1) +# 14248 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61258,11 +55686,11 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_constructor_declarations_aux = -# 3539 "reason_parser.mly" +# 3825 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _2 in (_1 :: cstrs, constraints, endpos, and_types) ) -# 12283 "reason_parser.ml" +# 14281 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61286,16 +55714,16 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : 'tv_constructor_declarations_aux = let _1 = -# 3474 "reason_parser.mly" +# 3756 "reason_parser.mly" ( [] ) -# 12309 "reason_parser.ml" +# 14307 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in -# 3543 "reason_parser.mly" +# 3829 "reason_parser.mly" ( ([], _1, _endpos__1_, _2) ) -# 12316 "reason_parser.ml" +# 14314 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61326,16 +55754,16 @@ module Tables = struct let _v : 'tv_constructor_declarations_aux = let _1 = let _1 = _10 in -# 3475 "reason_parser.mly" +# 3757 "reason_parser.mly" ( _1 ) -# 12349 "reason_parser.ml" +# 14347 "reason_parser.ml" in let _endpos__1_ = _endpos__10_ in -# 3543 "reason_parser.mly" +# 3829 "reason_parser.mly" ( ([], _1, _endpos__1_, _2) ) -# 12356 "reason_parser.ml" +# 14354 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61364,9 +55792,9 @@ module Tables = struct let x = let _1 = _10 in -# 3817 "reason_parser.mly" +# 4115 "reason_parser.mly" ( _1 ) -# 12387 "reason_parser.ml" +# 14385 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -61374,20 +55802,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 12402 "reason_parser.ml" +# 14400 "reason_parser.ml" in -# 3820 "reason_parser.mly" +# 4118 "reason_parser.mly" (_1) -# 12408 "reason_parser.ml" +# 14406 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61449,15 +55877,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 12472 "reason_parser.ml" +# 14470 "reason_parser.ml" in -# 3819 "reason_parser.mly" +# 4117 "reason_parser.mly" ( Core_type (mktyp(Ptyp_alias(_1, _4))) ) -# 12478 "reason_parser.ml" +# 14476 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -61465,20 +55893,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 12493 "reason_parser.ml" +# 14491 "reason_parser.ml" in -# 3820 "reason_parser.mly" +# 4118 "reason_parser.mly" (_1) -# 12499 "reason_parser.ml" +# 14497 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61502,9 +55930,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : 'tv_core_type2 = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 12525 "reason_parser.ml" +# 14523 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -61515,7 +55943,7 @@ module Tables = struct else _startpos__2_ in -# 3833 "reason_parser.mly" +# 4131 "reason_parser.mly" ( match _1, _2 with | [], result -> result | attrs, Record_type [] -> assert false @@ -61528,7 +55956,7 @@ module Tables = struct let pld_attributes = attrs @ label.pld_attributes in Record_type ({label with pld_attributes} :: labels) ) -# 12549 "reason_parser.ml" +# 14547 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61561,15 +55989,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 12584 "reason_parser.ml" +# 14582 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 12590 "reason_parser.ml" +# 14588 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -61580,7 +56008,7 @@ module Tables = struct else _startpos__2_ in -# 3833 "reason_parser.mly" +# 4131 "reason_parser.mly" ( match _1, _2 with | [], result -> result | attrs, Record_type [] -> assert false @@ -61593,7 +56021,7 @@ module Tables = struct let pld_attributes = attrs @ label.pld_attributes in Record_type ({label with pld_attributes} :: labels) ) -# 12614 "reason_parser.ml" +# 14612 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61616,9 +56044,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_direction_flag = -# 4200 "reason_parser.mly" +# 4514 "reason_parser.mly" ( Upto ) -# 12639 "reason_parser.ml" +# 14637 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61641,9 +56069,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_direction_flag = -# 4201 "reason_parser.mly" +# 4515 "reason_parser.mly" ( Downto ) -# 12664 "reason_parser.ml" +# 14662 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61666,9 +56094,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_ES6_FUN_FUN_ = -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 12689 "reason_parser.ml" +# 14687 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61691,9 +56119,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_ES6_FUN_FUN_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 12714 "reason_parser.ml" +# 14712 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61715,18 +56143,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_either___anonymous_14___anonymous_15_ = let _1 = + let _v : 'tv_either___anonymous_13___anonymous_14_ = let _1 = let _1 = _10 in -# 1902 "reason_parser.mly" +# 2036 "reason_parser.mly" (Public) -# 12741 "reason_parser.ml" +# 14739 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 12747 "reason_parser.ml" +# 14745 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61748,18 +56176,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_either___anonymous_14___anonymous_15_ = let _1 = + let _v : 'tv_either___anonymous_13___anonymous_14_ = let _1 = let _1 = _10 in -# 1902 "reason_parser.mly" +# 2036 "reason_parser.mly" (Private) -# 12774 "reason_parser.ml" +# 14772 "reason_parser.ml" in -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 12780 "reason_parser.ml" +# 14778 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61784,9 +56212,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 12807 "reason_parser.ml" +# 14805 "reason_parser.ml" ) = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in @@ -61804,9 +56232,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 12827 "reason_parser.ml" +# 14825 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -61814,17 +56242,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 12837 "reason_parser.ml" +# 14835 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 12845 "reason_parser.ml" +# 14843 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -61835,17 +56263,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 12860 "reason_parser.ml" +# 14858 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 12866 "reason_parser.ml" +# 14864 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61895,9 +56323,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 12918 "reason_parser.ml" +# 14916 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -61905,17 +56333,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 12928 "reason_parser.ml" +# 14926 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 12936 "reason_parser.ml" +# 14934 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -61926,17 +56354,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 12951 "reason_parser.ml" +# 14949 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 12957 "reason_parser.ml" +# 14955 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -61986,9 +56414,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 13009 "reason_parser.ml" +# 15007 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -61996,17 +56424,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13019 "reason_parser.ml" +# 15017 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 13027 "reason_parser.ml" +# 15025 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -62017,17 +56445,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13042 "reason_parser.ml" +# 15040 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13048 "reason_parser.ml" +# 15046 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62068,9 +56496,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 13091 "reason_parser.ml" +# 15089 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62078,17 +56506,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13101 "reason_parser.ml" +# 15099 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 13109 "reason_parser.ml" +# 15107 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -62099,17 +56527,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13124 "reason_parser.ml" +# 15122 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13130 "reason_parser.ml" +# 15128 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62150,9 +56578,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 13173 "reason_parser.ml" +# 15171 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62160,17 +56588,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13183 "reason_parser.ml" +# 15181 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 13191 "reason_parser.ml" +# 15189 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -62181,17 +56609,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13206 "reason_parser.ml" +# 15204 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13212 "reason_parser.ml" +# 15210 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62232,9 +56660,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 13255 "reason_parser.ml" +# 15253 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62242,17 +56670,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13265 "reason_parser.ml" +# 15263 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 13273 "reason_parser.ml" +# 15271 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -62263,17 +56691,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13288 "reason_parser.ml" +# 15286 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13294 "reason_parser.ml" +# 15292 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62303,9 +56731,9 @@ module Tables = struct } = _menhir_stack in let _30 : 'tv_generalized_constructor_arguments = Obj.magic _30 in let _1010 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 13326 "reason_parser.ml" +# 15324 "reason_parser.ml" ) = Obj.magic _1010 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -62327,9 +56755,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 13350 "reason_parser.ml" +# 15348 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62337,9 +56765,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13360 "reason_parser.ml" +# 15358 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62348,15 +56776,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13371 "reason_parser.ml" +# 15369 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13377 "reason_parser.ml" +# 15375 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62367,17 +56795,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13392 "reason_parser.ml" +# 15390 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13398 "reason_parser.ml" +# 15396 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62436,9 +56864,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 13459 "reason_parser.ml" +# 15457 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -62446,9 +56874,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13469 "reason_parser.ml" +# 15467 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62457,15 +56885,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13480 "reason_parser.ml" +# 15478 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13486 "reason_parser.ml" +# 15484 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62476,17 +56904,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13501 "reason_parser.ml" +# 15499 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13507 "reason_parser.ml" +# 15505 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62545,9 +56973,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 13568 "reason_parser.ml" +# 15566 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -62555,9 +56983,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13578 "reason_parser.ml" +# 15576 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62566,15 +56994,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13589 "reason_parser.ml" +# 15587 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13595 "reason_parser.ml" +# 15593 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62585,17 +57013,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13610 "reason_parser.ml" +# 15608 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13616 "reason_parser.ml" +# 15614 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62645,9 +57073,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 13668 "reason_parser.ml" +# 15666 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62655,9 +57083,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13678 "reason_parser.ml" +# 15676 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62666,15 +57094,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13689 "reason_parser.ml" +# 15687 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13695 "reason_parser.ml" +# 15693 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62685,17 +57113,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13710 "reason_parser.ml" +# 15708 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13716 "reason_parser.ml" +# 15714 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62745,9 +57173,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 13768 "reason_parser.ml" +# 15766 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62755,9 +57183,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13778 "reason_parser.ml" +# 15776 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62766,15 +57194,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13789 "reason_parser.ml" +# 15787 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13795 "reason_parser.ml" +# 15793 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62785,17 +57213,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13810 "reason_parser.ml" +# 15808 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13816 "reason_parser.ml" +# 15814 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62845,9 +57273,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 13868 "reason_parser.ml" +# 15866 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -62855,9 +57283,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 13878 "reason_parser.ml" +# 15876 "reason_parser.ml" in let _startpos__2_ = _startpos__101_ in @@ -62866,15 +57294,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 13889 "reason_parser.ml" +# 15887 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 13895 "reason_parser.ml" +# 15893 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -62885,17 +57313,17 @@ module Tables = struct else _startpos__2_ in -# 3553 "reason_parser.mly" +# 3839 "reason_parser.mly" ( let args, res = _3 in let loc = mklocation _symbolstartpos _endpos in Type.constructor ~attrs:_1 _2 ~args ?res ~loc ) -# 13910 "reason_parser.ml" +# 15908 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13916 "reason_parser.ml" +# 15914 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62918,9 +57346,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_constructor_declaration_bar_constructor_declaration_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 13941 "reason_parser.ml" +# 15939 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62943,9 +57371,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 13966 "reason_parser.ml" +# 15964 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -62968,9 +57396,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 13991 "reason_parser.ml" +# 15989 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63004,13 +57432,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14025 "reason_parser.ml" +# 16023 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 14031 "reason_parser.ml" +# 16029 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63049,15 +57477,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1894 "reason_parser.mly" +# 2028 "reason_parser.mly" ( _2 ) -# 14072 "reason_parser.ml" +# 16070 "reason_parser.ml" in -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 14078 "reason_parser.ml" +# 16076 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63091,13 +57519,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14112 "reason_parser.ml" +# 16110 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 14118 "reason_parser.ml" +# 16116 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63120,9 +57548,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_preceded_EQUAL_class_instance_type__class_type_body_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 14143 "reason_parser.ml" +# 16141 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63156,13 +57584,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14177 "reason_parser.ml" +# 16175 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 14183 "reason_parser.ml" +# 16181 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63185,9 +57613,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_preceded_EQUAL_expr__braced_expr_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 14208 "reason_parser.ml" +# 16206 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63221,13 +57649,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14242 "reason_parser.ml" +# 16240 "reason_parser.ml" in -# 4401 "reason_parser.mly" +# 4716 "reason_parser.mly" ( _1 ) -# 14248 "reason_parser.ml" +# 16246 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63250,9 +57678,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_either_preceded_EQUALGREATER_expr__braced_expr_ = -# 4402 "reason_parser.mly" +# 4717 "reason_parser.mly" ( _1 ) -# 14273 "reason_parser.ml" +# 16271 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63277,15 +57705,15 @@ module Tables = struct let _v : 'tv_embedded___anonymous_0_ = let x = let _1 = _10 in -# 1255 "reason_parser.mly" +# 1375 "reason_parser.mly" ( raise End_of_file) -# 14300 "reason_parser.ml" +# 16298 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14306 "reason_parser.ml" +# 16304 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63317,15 +57745,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1256 "reason_parser.mly" +# 1376 "reason_parser.mly" ( Ptop_def _1 ) -# 14340 "reason_parser.ml" +# 16338 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14346 "reason_parser.ml" +# 16344 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63357,15 +57785,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1257 "reason_parser.mly" +# 1377 "reason_parser.mly" ( _1 ) -# 14380 "reason_parser.ml" +# 16378 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14386 "reason_parser.ml" +# 16384 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63390,15 +57818,15 @@ module Tables = struct let _v : 'tv_embedded___anonymous_1_ = let x = let _1 = _10 in -# 1262 "reason_parser.mly" +# 1382 "reason_parser.mly" ( [] ) -# 14413 "reason_parser.ml" +# 16411 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14419 "reason_parser.ml" +# 16417 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63427,9 +57855,9 @@ module Tables = struct }; } = _menhir_stack in let _30 : ( -# 1209 "reason_parser.mly" +# 1329 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase list) -# 14450 "reason_parser.ml" +# 16448 "reason_parser.ml" ) = Obj.magic _30 in let _20 : unit = Obj.magic _20 in let _10 : 'tv_structure_item = Obj.magic _10 in @@ -63441,15 +57869,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1263 "reason_parser.mly" +# 1383 "reason_parser.mly" ( Ptop_def _1 :: _3 ) -# 14464 "reason_parser.ml" +# 16462 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14470 "reason_parser.ml" +# 16468 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63478,9 +57906,9 @@ module Tables = struct }; } = _menhir_stack in let _30 : ( -# 1209 "reason_parser.mly" +# 1329 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase list) -# 14501 "reason_parser.ml" +# 16499 "reason_parser.ml" ) = Obj.magic _30 in let _20 : unit = Obj.magic _20 in let _10 : 'tv_toplevel_directive = Obj.magic _10 in @@ -63492,15 +57920,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1264 "reason_parser.mly" +# 1384 "reason_parser.mly" ( _1 :: _3 ) -# 14515 "reason_parser.ml" +# 16513 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14521 "reason_parser.ml" +# 16519 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63532,15 +57960,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1265 "reason_parser.mly" +# 1385 "reason_parser.mly" ( [Ptop_def _1 ] ) -# 14555 "reason_parser.ml" +# 16553 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14561 "reason_parser.ml" +# 16559 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63572,15 +58000,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1266 "reason_parser.mly" +# 1386 "reason_parser.mly" ( [_1] ) -# 14595 "reason_parser.ml" +# 16593 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14601 "reason_parser.ml" +# 16599 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63608,19 +58036,19 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__20_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _2 = _20 in let _1 = _10 in -# 3501 "reason_parser.mly" +# 3787 "reason_parser.mly" ( (mktyp (Ptyp_var _2) , Invariant ) ) -# 14635 "reason_parser.ml" +# 16633 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14641 "reason_parser.ml" +# 16639 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63642,18 +58070,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _1 = _10 in -# 3502 "reason_parser.mly" +# 3788 "reason_parser.mly" ( (mktyp (Ptyp_any) , Invariant ) ) -# 14668 "reason_parser.ml" +# 16666 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14674 "reason_parser.ml" +# 16672 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63687,20 +58115,20 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__30_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 3503 "reason_parser.mly" +# 3789 "reason_parser.mly" ( (mktyp (Ptyp_var _3) , Covariant ) ) -# 14715 "reason_parser.ml" +# 16713 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14721 "reason_parser.ml" +# 16719 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63728,19 +58156,19 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__20_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _2 = _20 in let _1 = _10 in -# 3504 "reason_parser.mly" +# 3790 "reason_parser.mly" ( (mktyp (Ptyp_any) , Covariant ) ) -# 14755 "reason_parser.ml" +# 16753 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14761 "reason_parser.ml" +# 16759 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63774,20 +58202,20 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__30_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 3505 "reason_parser.mly" +# 3791 "reason_parser.mly" ( (mktyp (Ptyp_var _3) , Contravariant) ) -# 14802 "reason_parser.ml" +# 16800 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14808 "reason_parser.ml" +# 16806 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63815,19 +58243,19 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__20_ in - let _v : 'tv_embedded___anonymous_35_ = let x = + let _v : 'tv_embedded___anonymous_33_ = let x = let _2 = _20 in let _1 = _10 in -# 3506 "reason_parser.mly" +# 3792 "reason_parser.mly" ( (mktyp Ptyp_any , Contravariant) ) -# 14842 "reason_parser.ml" +# 16840 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14848 "reason_parser.ml" +# 16846 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63842,17 +58270,17 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = -# 4170 "reason_parser.mly" +# 4484 "reason_parser.mly" ( Pdir_none ) -# 14867 "reason_parser.ml" +# 16865 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14873 "reason_parser.ml" +# 16871 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63871,25 +58299,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 14894 "reason_parser.ml" +# 16892 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4171 "reason_parser.mly" +# 4485 "reason_parser.mly" ( Pdir_string (fst _1) ) -# 14904 "reason_parser.ml" +# 16902 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14910 "reason_parser.ml" +# 16908 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63908,25 +58336,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 993 "reason_parser.mly" +# 1113 "reason_parser.mly" (string * char option) -# 14931 "reason_parser.ml" +# 16929 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4172 "reason_parser.mly" +# 4486 "reason_parser.mly" ( let (n, m) = _1 in Pdir_int (n, m) ) -# 14941 "reason_parser.ml" +# 16939 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14947 "reason_parser.ml" +# 16945 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63948,18 +58376,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4173 "reason_parser.mly" +# 4487 "reason_parser.mly" ( Pdir_ident _1 ) -# 14974 "reason_parser.ml" +# 16972 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 14980 "reason_parser.ml" +# 16978 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -63981,18 +58409,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4174 "reason_parser.mly" +# 4488 "reason_parser.mly" ( Pdir_ident _1 ) -# 15007 "reason_parser.ml" +# 17005 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15013 "reason_parser.ml" +# 17011 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64014,18 +58442,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4175 "reason_parser.mly" +# 4489 "reason_parser.mly" ( Pdir_bool false ) -# 15040 "reason_parser.ml" +# 17038 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15046 "reason_parser.ml" +# 17044 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64047,18 +58475,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_embedded___anonymous_42_ = let x = + let _v : 'tv_embedded___anonymous_40_ = let x = let _1 = _10 in -# 4176 "reason_parser.mly" +# 4490 "reason_parser.mly" ( Pdir_bool true ) -# 15073 "reason_parser.ml" +# 17071 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15079 "reason_parser.ml" +# 17077 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64075,15 +58503,15 @@ module Tables = struct let _endpos = _startpos in let _v : 'tv_embedded_private_flag_ = let x = -# 4205 "reason_parser.mly" +# 4519 "reason_parser.mly" ( Public ) -# 15098 "reason_parser.ml" +# 17096 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15104 "reason_parser.ml" +# 17102 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64108,15 +58536,62 @@ module Tables = struct let _v : 'tv_embedded_private_flag_ = let x = let _1 = _10 in -# 4206 "reason_parser.mly" +# 4520 "reason_parser.mly" ( Private ) -# 15131 "reason_parser.ml" +# 17129 "reason_parser.ml" in # 90 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15137 "reason_parser.ml" +# 17135 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__20_ in + let _v : 'tv_es6_parameters = let _1 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 17176 "reason_parser.ml" + + in + +# 2569 "reason_parser.mly" + ( _1 ) +# 17182 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64132,77 +58607,228 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__3000_; MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs0000; - MenhirLib.EngineTypes.startp = _startpos_xs0000_; - MenhirLib.EngineTypes.endp = _endpos_xs0000_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _3000 : unit = Obj.magic _3000 in - let xs0000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = Obj.magic xs0000 in + let _20000 : 'tv_option_COMMA_ = Obj.magic _20000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _100000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in let _endpos = _endpos__3000_ in let _v : 'tv_es6_parameters = let _1 = - let _endpos__300_ = _endpos__3000_ in - let _startpos__100_ = _startpos__1000_ in let _300 = _3000 in - let xs000 = xs0000 in + let _2000 = _20000 in + let _10000 = _100000 in let _100 = _1000 in let _1 = let _30 = _300 in - let xs00 = xs000 in + let _200 = _2000 in + let _1000 = _10000 in let _10 = _100 in let _1 = let _3 = _30 in - let xs0 = xs00 in + let _20 = _200 in + let _100 = _1000 in let _1 = _10 in let x = - let xs = xs0 in + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 17245 "reason_parser.ml" + + in -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 15190 "reason_parser.ml" +# 2541 "reason_parser.mly" + ( _1 ) +# 17251 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 15196 "reason_parser.ml" +# 17257 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 15202 "reason_parser.ml" +# 17263 "reason_parser.ml" in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in + +# 2548 "reason_parser.mly" + ( + (_1, false) + ) +# 17271 "reason_parser.ml" + + in + +# 2569 "reason_parser.mly" + ( _1 ) +# 17277 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _30; + MenhirLib.EngineTypes.startp = _startpos__30_; + MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _30 : unit = Obj.magic _30 in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__30_ in + let _v : 'tv_es6_parameters = let _1 = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2395 "reason_parser.mly" - ( match _1 with - | [] -> +# 2551 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in - [mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc] - | pats -> pats + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) ) -# 15217 "reason_parser.ml" +# 17325 "reason_parser.ml" + + in + +# 2569 "reason_parser.mly" + ( _1 ) +# 17331 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _21; + MenhirLib.EngineTypes.startp = _startpos__21_; + MenhirLib.EngineTypes.endp = _endpos__21_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _40 : unit = Obj.magic _40 in + let _200 : 'tv_option_COMMA_ = Obj.magic _200 in + let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1000 in + let _21 : unit = Obj.magic _21 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__40_ in + let _v : 'tv_es6_parameters = let _1 = + let _4 = _40 in + let _20 = _200 in + let _100 = _1000 in + let _2 = _21 in + let _1 = _10 in + let _3 = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 17391 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 17397 "reason_parser.ml" + + in + +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) + ) +# 17413 "reason_parser.ml" in -# 2404 "reason_parser.mly" +# 2569 "reason_parser.mly" ( _1 ) -# 15223 "reason_parser.ml" +# 17419 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64231,15 +58857,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 15254 "reason_parser.ml" +# 17450 "reason_parser.ml" in -# 2406 "reason_parser.mly" - ( [{_1 with txt = Term (Nolabel, None, mkpat ~loc:_1.loc (Ppat_var _1))}] ) -# 15260 "reason_parser.ml" +# 2571 "reason_parser.mly" + ( ([{_1 with txt = Term (Nolabel, None, mkpat ~loc:_1.loc (Ppat_var _1))}], false) ) +# 17456 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64280,15 +58906,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 15303 "reason_parser.ml" +# 17499 "reason_parser.ml" in -# 2543 "reason_parser.mly" +# 2734 "reason_parser.mly" ( _1 ) -# 15309 "reason_parser.ml" +# 17505 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -64296,21 +58922,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15319 "reason_parser.ml" +# 17515 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15325 "reason_parser.ml" +# 17521 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15331 "reason_parser.ml" +# 17527 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64322,61 +58948,70 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2000 : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = Obj.magic _2000 in + let _3000 : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__2000_ in + let _endpos = _endpos__3000_ in let _v : 'tv_expr = let _1 = - let _endpos__200_ = _endpos__2000_ in + let _endpos__300_ = _endpos__3000_ in let _startpos__100_ = _startpos__1000_ in + let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__20_ = _endpos__200_ in + let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in + let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = + let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 2545 "reason_parser.mly" - ( _2 ) -# 15375 "reason_parser.ml" +# 2736 "reason_parser.mly" + ( _2 _3 ) +# 17580 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in + let _endpos_x_ = _endpos__30_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15385 "reason_parser.ml" +# 17590 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15391 "reason_parser.ml" +# 17596 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15397 "reason_parser.ml" +# 17602 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64431,14 +59066,24 @@ module Tables = struct let _20 = _200 in let _10 = _100 in let x = + let _endpos__4_ = _endpos__40_ in + let _startpos__1_ = _startpos__10_ in let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in + let _endpos = _endpos__4_ in + let _startpos = _startpos__1_ in -# 2547 "reason_parser.mly" - ( List.fold_right mkexp_fun _2 _4 ) -# 15459 "reason_parser.ml" +# 2738 "reason_parser.mly" + ( let (ps, uncurried) = _2 in + let exp = List.fold_right mkexp_fun ps _4 in + if uncurried then + let loc = mklocation _startpos _endpos in + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 17674 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -64446,21 +59091,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15469 "reason_parser.ml" +# 17684 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15475 "reason_parser.ml" +# 17690 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15481 "reason_parser.ml" +# 17696 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64538,6 +59183,7 @@ module Tables = struct let _endpos__6_ = _endpos__60_ in let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in + let _startpos__1_ = _startpos__11_ in let _6 = _60 in let _5 = _50 in let _10 = _100 in @@ -64551,18 +59197,25 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 15574 "reason_parser.ml" +# 17790 "reason_parser.ml" in let _startpos__4_ = _startpos__10_ in let _endpos = _endpos__6_ in + let _startpos = _startpos__1_ in -# 2549 "reason_parser.mly" - ( List.fold_right mkexp_fun _2 - (ghexp_constraint (mklocation _startpos__4_ _endpos) _6 (Some _4, None)) ) -# 15583 "reason_parser.ml" +# 2746 "reason_parser.mly" + ( let (ps, uncurried) = _2 in + let exp = List.fold_right mkexp_fun ps + (ghexp_constraint (mklocation _startpos__4_ _endpos) _6 (Some _4, None)) in + if uncurried then + let loc = mklocation _startpos _endpos in + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 17806 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -64570,21 +59223,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15593 "reason_parser.ml" +# 17816 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15599 "reason_parser.ml" +# 17822 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15605 "reason_parser.ml" +# 17828 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64604,16 +59257,22 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _200000 : 'tv_llist_aux_match_case_expr__ = Obj.magic _200000 in let _100000 : 'tv_match_case_expr_ = Obj.magic _100000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in @@ -64623,39 +59282,42 @@ module Tables = struct let _startpos__100_ = _startpos__1000_ in let _20000 = _200000 in let _10000 = _100000 in + let _200 = _2000 in let _100 = _1000 in let _1 = let _endpos__2000_ = _endpos__20000_ in let _startpos__10_ = _startpos__100_ in let _2000 = _20000 in let _1000 = _10000 in + let _20 = _200 in let _10 = _100 in let x = let _200 = _2000 in let _100 = _1000 in + let _2 = _20 in let _1 = _10 in - let _2 = + let _3 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 15664 "reason_parser.ml" +# 17896 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 15670 "reason_parser.ml" +# 17902 "reason_parser.ml" in -# 2555 "reason_parser.mly" - ( mkexp (Pexp_function _2) ) -# 15676 "reason_parser.ml" +# 2759 "reason_parser.mly" + ( _2 (mkexp (Pexp_function _3)) ) +# 17908 "reason_parser.ml" in let _endpos_x_ = _endpos__2000_ in @@ -64663,21 +59325,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15686 "reason_parser.ml" +# 17918 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15692 "reason_parser.ml" +# 17924 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15698 "reason_parser.ml" +# 17930 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64689,9 +59351,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _200000; MenhirLib.EngineTypes.startp = _startpos__200000_; @@ -64701,103 +59363,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; }; } = _menhir_stack in - let _5000 : unit = Obj.magic _5000 in - let _200000 : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = Obj.magic _200000 in - let _100000 : 'tv_match_case_semi_terminated_seq_expr_ = Obj.magic _100000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _6000 : unit = Obj.magic _6000 in + let _200000 : 'tv_llist_aux_match_case_seq_expr__ = Obj.magic _200000 in + let _100000 : 'tv_match_case_seq_expr_ = Obj.magic _100000 in + let _4000 : unit = Obj.magic _4000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__5000_ in + let _endpos = _endpos__6000_ in let _v : 'tv_expr = let _1 = - let _endpos__500_ = _endpos__5000_ in + let _endpos__600_ = _endpos__6000_ in let _startpos__100_ = _startpos__1000_ in - let _500 = _5000 in + let _600 = _6000 in let _20000 = _200000 in let _10000 = _100000 in + let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__50_ = _endpos__500_ in + let _endpos__60_ = _endpos__600_ in let _startpos__10_ = _startpos__100_ in - let _50 = _500 in + let _60 = _600 in let _2000 = _20000 in let _1000 = _10000 in + let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _5 = _50 in + let _6 = _60 in let _200 = _2000 in let _100 = _1000 in + let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in - let _4 = + let _5 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 15784 "reason_parser.ml" +# 18025 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 15790 "reason_parser.ml" +# 18031 "reason_parser.ml" in -# 2557 "reason_parser.mly" - ( mkexp (Pexp_match (_2, _4)) ) -# 15796 "reason_parser.ml" +# 2762 "reason_parser.mly" + ( _2 (mkexp (Pexp_match (_3, _5))) ) +# 18037 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in + let _endpos_x_ = _endpos__60_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15806 "reason_parser.ml" +# 18047 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15812 "reason_parser.ml" +# 18053 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15818 "reason_parser.ml" +# 18059 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64809,9 +59480,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _200000; MenhirLib.EngineTypes.startp = _startpos__200000_; @@ -64821,103 +59492,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; }; } = _menhir_stack in - let _5000 : unit = Obj.magic _5000 in - let _200000 : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = Obj.magic _200000 in - let _100000 : 'tv_match_case_semi_terminated_seq_expr_ = Obj.magic _100000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _6000 : unit = Obj.magic _6000 in + let _200000 : 'tv_llist_aux_match_case_seq_expr__ = Obj.magic _200000 in + let _100000 : 'tv_match_case_seq_expr_ = Obj.magic _100000 in + let _4000 : unit = Obj.magic _4000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__5000_ in + let _endpos = _endpos__6000_ in let _v : 'tv_expr = let _1 = - let _endpos__500_ = _endpos__5000_ in + let _endpos__600_ = _endpos__6000_ in let _startpos__100_ = _startpos__1000_ in - let _500 = _5000 in + let _600 = _6000 in let _20000 = _200000 in let _10000 = _100000 in + let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__50_ = _endpos__500_ in + let _endpos__60_ = _endpos__600_ in let _startpos__10_ = _startpos__100_ in - let _50 = _500 in + let _60 = _600 in let _2000 = _20000 in let _1000 = _10000 in + let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _5 = _50 in + let _6 = _60 in let _200 = _2000 in let _100 = _1000 in + let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in - let _4 = + let _5 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 15904 "reason_parser.ml" +# 18154 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 15910 "reason_parser.ml" +# 18160 "reason_parser.ml" in -# 2559 "reason_parser.mly" - ( mkexp (Pexp_try (_2, _4)) ) -# 15916 "reason_parser.ml" +# 2765 "reason_parser.mly" + ( _2 (mkexp (Pexp_try (_3, _5))) ) +# 18166 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in + let _endpos_x_ = _endpos__60_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 15926 "reason_parser.ml" +# 18176 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 15932 "reason_parser.ml" +# 18182 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 15938 "reason_parser.ml" +# 18188 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -64929,83 +59609,92 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4000; - MenhirLib.EngineTypes.startp = _startpos__4000_; - MenhirLib.EngineTypes.endp = _endpos__4000_; + MenhirLib.EngineTypes.semv = _5000; + MenhirLib.EngineTypes.startp = _startpos__5000_; + MenhirLib.EngineTypes.endp = _endpos__5000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in + let _5000 : unit = Obj.magic _5000 in let _4000 : unit = Obj.magic _4000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__4000_ in + let _endpos = _endpos__5000_ in let _v : 'tv_expr = let _1 = - let _endpos__400_ = _endpos__4000_ in - let _startpos__400_ = _startpos__4000_ in + let _endpos__500_ = _endpos__5000_ in + let _startpos__500_ = _startpos__5000_ in let _startpos__100_ = _startpos__1000_ in + let _500 = _5000 in let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__40_ = _endpos__400_ in - let _startpos__40_ = _startpos__400_ in + let _endpos__50_ = _endpos__500_ in + let _startpos__50_ = _startpos__500_ in let _startpos__10_ = _startpos__100_ in + let _50 = _500 in let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _endpos__4_ = _endpos__40_ in - let _startpos__4_ = _startpos__40_ in + let _endpos__5_ = _endpos__50_ in + let _startpos__5_ = _startpos__50_ in + let _5 = _50 in let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 2561 "reason_parser.mly" - ( syntax_error_exp (mklocation _startpos__4_ _endpos__4_) "Invalid try with") -# 16004 "reason_parser.ml" +# 2767 "reason_parser.mly" + ( syntax_error_exp (mklocation _startpos__5_ _endpos__5_) "Invalid try with") +# 18263 "reason_parser.ml" in - let _endpos_x_ = _endpos__40_ in + let _endpos_x_ = _endpos__50_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16014 "reason_parser.ml" +# 18273 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16020 "reason_parser.ml" +# 18279 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16026 "reason_parser.ml" +# 18285 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65021,20 +59710,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10000_; MenhirLib.EngineTypes.endp = _endpos__10000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -65044,6 +59739,7 @@ module Tables = struct let _endpos__1000_ = _endpos__10000_ in let _startpos__1000_ = _startpos__10000_ in let _1000 = _10000 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -65051,37 +59747,39 @@ module Tables = struct let _endpos__100_ = _endpos__1000_ in let _startpos__100_ = _startpos__1000_ in let _100 = _1000 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _4 = + let _5 = # 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 16084 "reason_parser.ml" +# 18352 "reason_parser.ml" in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 16096 "reason_parser.ml" +# 18364 "reason_parser.ml" in -# 2563 "reason_parser.mly" - ( mkexp(Pexp_ifthenelse(_2, _3, _4)) ) -# 16102 "reason_parser.ml" +# 2770 "reason_parser.mly" + ( _2 (mkexp (Pexp_ifthenelse(_3, _4, _5))) ) +# 18370 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -65089,21 +59787,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16112 "reason_parser.ml" +# 18380 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16118 "reason_parser.ml" +# 18386 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16124 "reason_parser.ml" +# 18392 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65127,15 +59825,20 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10100_; MenhirLib.EngineTypes.endp = _endpos__10100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; @@ -65144,7 +59847,8 @@ module Tables = struct let x00000 : 'tv_expr = Obj.magic x00000 in let _100000 : unit = Obj.magic _100000 in let _10100 : 'tv_simple_expr_call = Obj.magic _10100 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -65157,6 +59861,7 @@ module Tables = struct let x0000 = x00000 in let _10000 = _100000 in let _1010 = _10100 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -65167,6 +59872,7 @@ module Tables = struct let x000 = x0000 in let _1000 = _10000 in let _101 = _1010 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = @@ -65175,9 +59881,10 @@ module Tables = struct let x00 = x000 in let _100 = _1000 in let _10 = _101 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _4 = + let _5 = let x0 = x00 in let _10 = _100 in let x = @@ -65186,31 +59893,31 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 16207 "reason_parser.ml" +# 18484 "reason_parser.ml" in # 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 16213 "reason_parser.ml" +# 18490 "reason_parser.ml" in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 16225 "reason_parser.ml" +# 18502 "reason_parser.ml" in -# 2563 "reason_parser.mly" - ( mkexp(Pexp_ifthenelse(_2, _3, _4)) ) -# 16231 "reason_parser.ml" +# 2770 "reason_parser.mly" + ( _2 (mkexp (Pexp_ifthenelse(_3, _4, _5))) ) +# 18508 "reason_parser.ml" in let _endpos_x_ = _endpos_x000_ in @@ -65218,21 +59925,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16241 "reason_parser.ml" +# 18518 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16247 "reason_parser.ml" +# 18524 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16253 "reason_parser.ml" +# 18530 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65248,20 +59955,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10000_; MenhirLib.EngineTypes.endp = _endpos__10000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -65271,6 +59984,7 @@ module Tables = struct let _endpos__1000_ = _endpos__10000_ in let _startpos__1000_ = _startpos__10000_ in let _1000 = _10000 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -65278,30 +59992,32 @@ module Tables = struct let _endpos__100_ = _endpos__1000_ in let _startpos__100_ = _startpos__1000_ in let _100 = _1000 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 16316 "reason_parser.ml" +# 18602 "reason_parser.ml" in -# 2565 "reason_parser.mly" - ( mkexp (Pexp_while(_2, _3)) ) -# 16322 "reason_parser.ml" +# 2772 "reason_parser.mly" + ( _2 (mkexp (Pexp_while(_3, _4))) ) +# 18608 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -65309,21 +60025,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16332 "reason_parser.ml" +# 18618 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16338 "reason_parser.ml" +# 18624 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16344 "reason_parser.ml" +# 18630 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65335,43 +60051,48 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.semv = _11000; + MenhirLib.EngineTypes.startp = _startpos__11000_; + MenhirLib.EngineTypes.endp = _endpos__11000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _8000; - MenhirLib.EngineTypes.startp = _startpos__8000_; - MenhirLib.EngineTypes.endp = _endpos__8000_; + MenhirLib.EngineTypes.semv = _9000; + MenhirLib.EngineTypes.startp = _startpos__9000_; + MenhirLib.EngineTypes.endp = _endpos__9000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _7000; - MenhirLib.EngineTypes.startp = _startpos__7000_; - MenhirLib.EngineTypes.endp = _endpos__7000_; + MenhirLib.EngineTypes.semv = _8000; + MenhirLib.EngineTypes.startp = _startpos__8000_; + MenhirLib.EngineTypes.endp = _endpos__8000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6000; - MenhirLib.EngineTypes.startp = _startpos__6000_; - MenhirLib.EngineTypes.endp = _endpos__6000_; + MenhirLib.EngineTypes.semv = _7000; + MenhirLib.EngineTypes.startp = _startpos__7000_; + MenhirLib.EngineTypes.endp = _endpos__7000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4000; - MenhirLib.EngineTypes.startp = _startpos__4000_; - MenhirLib.EngineTypes.endp = _endpos__4000_; + MenhirLib.EngineTypes.semv = _5000; + MenhirLib.EngineTypes.startp = _startpos__5000_; + MenhirLib.EngineTypes.endp = _endpos__5000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; @@ -65381,23 +60102,25 @@ module Tables = struct }; }; } = _menhir_stack in - let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _8000 : unit = Obj.magic _8000 in - let _7000 : 'tv_expr = Obj.magic _7000 in - let _6000 : 'tv_direction_flag = Obj.magic _6000 in - let _5000 : 'tv_expr = Obj.magic _5000 in - let _4000 : unit = Obj.magic _4000 in - let _3000 : 'tv_pattern = Obj.magic _3000 in - let _2000 : unit = Obj.magic _2000 in - let _1100 : unit = Obj.magic _1100 in + let _11000 : 'tv_simple_expr_call = Obj.magic _11000 in + let _9000 : unit = Obj.magic _9000 in + let _8000 : 'tv_expr = Obj.magic _8000 in + let _7000 : 'tv_direction_flag = Obj.magic _7000 in + let _6000 : 'tv_expr = Obj.magic _6000 in + let _5000 : unit = Obj.magic _5000 in + let _4000 : 'tv_pattern = Obj.magic _4000 in + let _3000 : unit = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in + let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1100_ in - let _endpos = _endpos__10000_ in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__11000_ in let _v : 'tv_expr = let _1 = - let _startpos__110_ = _startpos__1100_ in - let _endpos__1000_ = _endpos__10000_ in - let _startpos__1000_ = _startpos__10000_ in - let _1000 = _10000 in + let _endpos__1100_ = _endpos__11000_ in + let _startpos__1100_ = _startpos__11000_ in + let _startpos__100_ = _startpos__1000_ in + let _1100 = _11000 in + let _900 = _9000 in let _800 = _8000 in let _700 = _7000 in let _600 = _6000 in @@ -65405,12 +60128,13 @@ module Tables = struct let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in - let _110 = _1100 in + let _100 = _1000 in let _1 = - let _startpos__11_ = _startpos__110_ in - let _endpos__100_ = _endpos__1000_ in - let _startpos__100_ = _startpos__1000_ in - let _100 = _1000 in + let _endpos__110_ = _endpos__1100_ in + let _startpos__110_ = _startpos__1100_ in + let _startpos__10_ = _startpos__100_ in + let _110 = _1100 in + let _90 = _900 in let _80 = _800 in let _70 = _700 in let _60 = _600 in @@ -65418,11 +60142,12 @@ module Tables = struct let _40 = _400 in let _30 = _300 in let _20 = _200 in - let _11 = _110 in + let _10 = _100 in let x = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in - let _10 = _100 in + let _endpos__11_ = _endpos__110_ in + let _startpos__11_ = _startpos__110_ in + let _11 = _110 in + let _9 = _90 in let _8 = _80 in let _7 = _70 in let _6 = _60 in @@ -65430,45 +60155,45 @@ module Tables = struct let _4 = _40 in let _3 = _30 in let _2 = _20 in - let _1 = _11 in - let _9 = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in - let _1 = _10 in + let _1 = _10 in + let _10 = + let _endpos__1_ = _endpos__11_ in + let _startpos__1_ = _startpos__11_ in + let _1 = _11 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 16461 "reason_parser.ml" +# 18756 "reason_parser.ml" in -# 2567 "reason_parser.mly" - ( mkexp(Pexp_for(_3, _5, _7, _6, _9)) ) -# 16467 "reason_parser.ml" +# 2775 "reason_parser.mly" + ( _2 (mkexp (Pexp_for(_4, _6, _8, _7, _10))) ) +# 18762 "reason_parser.ml" in - let _endpos_x_ = _endpos__100_ in - let _startpos_x_ = _startpos__11_ in + let _endpos_x_ = _endpos__110_ in + let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16477 "reason_parser.ml" +# 18772 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16483 "reason_parser.ml" +# 18778 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16489 "reason_parser.ml" +# 18784 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65574,12 +60299,12 @@ module Tables = struct let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 2569 "reason_parser.mly" +# 2777 "reason_parser.mly" ( let loc_colon = mklocation _startpos__2_ _endpos__2_ in let loc = mklocation _symbolstartpos _endpos in mkexp_cons loc_colon (mkexp ~ghost:true ~loc (Pexp_tuple[_5;_7])) loc ) -# 16600 "reason_parser.ml" +# 18895 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -65587,21 +60312,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16610 "reason_parser.ml" +# 18905 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16616 "reason_parser.ml" +# 18911 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16622 "reason_parser.ml" +# 18917 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65631,9 +60356,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 984 "reason_parser.mly" +# 1104 "reason_parser.mly" (string) -# 16654 "reason_parser.ml" +# 18949 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -65668,9 +60393,9 @@ module Tables = struct let x = let _1 = _10 in -# 4044 "reason_parser.mly" +# 4358 "reason_parser.mly" ( _1 ) -# 16691 "reason_parser.ml" +# 18986 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -65678,15 +60403,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 16701 "reason_parser.ml" +# 18996 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 16707 "reason_parser.ml" +# 19002 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -65694,21 +60419,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16717 "reason_parser.ml" +# 19012 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16723 "reason_parser.ml" +# 19018 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16729 "reason_parser.ml" +# 19024 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65738,9 +60463,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 985 "reason_parser.mly" +# 1105 "reason_parser.mly" (string) -# 16761 "reason_parser.ml" +# 19056 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -65775,9 +60500,9 @@ module Tables = struct let x = let _1 = _10 in -# 4045 "reason_parser.mly" +# 4359 "reason_parser.mly" ( _1 ) -# 16798 "reason_parser.ml" +# 19093 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -65785,15 +60510,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 16808 "reason_parser.ml" +# 19103 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 16814 "reason_parser.ml" +# 19109 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -65801,21 +60526,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16824 "reason_parser.ml" +# 19119 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16830 "reason_parser.ml" +# 19125 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16836 "reason_parser.ml" +# 19131 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65845,9 +60570,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 986 "reason_parser.mly" +# 1106 "reason_parser.mly" (string) -# 16868 "reason_parser.ml" +# 19163 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -65882,9 +60607,9 @@ module Tables = struct let x = let _1 = _10 in -# 4046 "reason_parser.mly" +# 4360 "reason_parser.mly" ( _1 ) -# 16905 "reason_parser.ml" +# 19200 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -65892,15 +60617,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 16915 "reason_parser.ml" +# 19210 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 16921 "reason_parser.ml" +# 19216 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -65908,21 +60633,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 16931 "reason_parser.ml" +# 19226 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 16937 "reason_parser.ml" +# 19232 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 16943 "reason_parser.ml" +# 19238 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -65952,9 +60677,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 987 "reason_parser.mly" +# 1107 "reason_parser.mly" (string) -# 16975 "reason_parser.ml" +# 19270 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -65989,9 +60714,9 @@ module Tables = struct let x = let _1 = _10 in -# 4047 "reason_parser.mly" +# 4361 "reason_parser.mly" ( _1 ) -# 17012 "reason_parser.ml" +# 19307 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -65999,15 +60724,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17022 "reason_parser.ml" +# 19317 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17028 "reason_parser.ml" +# 19323 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66015,21 +60740,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17038 "reason_parser.ml" +# 19333 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17044 "reason_parser.ml" +# 19339 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17050 "reason_parser.ml" +# 19345 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66092,9 +60817,9 @@ module Tables = struct let x = let _1 = _10 in -# 4049 "reason_parser.mly" +# 4363 "reason_parser.mly" ( "/>" ) -# 17115 "reason_parser.ml" +# 19410 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66102,15 +60827,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17125 "reason_parser.ml" +# 19420 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17131 "reason_parser.ml" +# 19426 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66118,21 +60843,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17141 "reason_parser.ml" +# 19436 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17147 "reason_parser.ml" +# 19442 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17153 "reason_parser.ml" +# 19448 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66162,9 +60887,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 990 "reason_parser.mly" +# 1110 "reason_parser.mly" (string) -# 17185 "reason_parser.ml" +# 19480 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -66199,9 +60924,9 @@ module Tables = struct let x = let _1 = _10 in -# 4050 "reason_parser.mly" +# 4364 "reason_parser.mly" ( _1 ) -# 17222 "reason_parser.ml" +# 19517 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66209,15 +60934,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17232 "reason_parser.ml" +# 19527 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17238 "reason_parser.ml" +# 19533 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66225,21 +60950,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17248 "reason_parser.ml" +# 19543 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17254 "reason_parser.ml" +# 19549 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17260 "reason_parser.ml" +# 19555 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66302,9 +61027,9 @@ module Tables = struct let x = let _1 = _10 in -# 4051 "reason_parser.mly" +# 4365 "reason_parser.mly" ( "+" ) -# 17325 "reason_parser.ml" +# 19620 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66312,15 +61037,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17335 "reason_parser.ml" +# 19630 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17341 "reason_parser.ml" +# 19636 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66328,21 +61053,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17351 "reason_parser.ml" +# 19646 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17357 "reason_parser.ml" +# 19652 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17363 "reason_parser.ml" +# 19658 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66405,9 +61130,9 @@ module Tables = struct let x = let _1 = _10 in -# 4052 "reason_parser.mly" +# 4366 "reason_parser.mly" ( "+." ) -# 17428 "reason_parser.ml" +# 19723 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66415,15 +61140,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17438 "reason_parser.ml" +# 19733 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17444 "reason_parser.ml" +# 19739 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66431,21 +61156,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17454 "reason_parser.ml" +# 19749 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17460 "reason_parser.ml" +# 19755 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17466 "reason_parser.ml" +# 19761 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66508,9 +61233,9 @@ module Tables = struct let x = let _1 = _10 in -# 4053 "reason_parser.mly" +# 4367 "reason_parser.mly" ( "-" ) -# 17531 "reason_parser.ml" +# 19826 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66518,15 +61243,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17541 "reason_parser.ml" +# 19836 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17547 "reason_parser.ml" +# 19842 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66534,21 +61259,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17557 "reason_parser.ml" +# 19852 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17563 "reason_parser.ml" +# 19858 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17569 "reason_parser.ml" +# 19864 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66611,9 +61336,9 @@ module Tables = struct let x = let _1 = _10 in -# 4054 "reason_parser.mly" +# 4368 "reason_parser.mly" ( "-." ) -# 17634 "reason_parser.ml" +# 19929 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66621,15 +61346,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17644 "reason_parser.ml" +# 19939 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17650 "reason_parser.ml" +# 19945 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66637,21 +61362,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17660 "reason_parser.ml" +# 19955 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17666 "reason_parser.ml" +# 19961 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17672 "reason_parser.ml" +# 19967 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66714,9 +61439,9 @@ module Tables = struct let x = let _1 = _10 in -# 4055 "reason_parser.mly" +# 4369 "reason_parser.mly" ( "*" ) -# 17737 "reason_parser.ml" +# 20032 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66724,15 +61449,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17747 "reason_parser.ml" +# 20042 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17753 "reason_parser.ml" +# 20048 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66740,21 +61465,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17763 "reason_parser.ml" +# 20058 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17769 "reason_parser.ml" +# 20064 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17775 "reason_parser.ml" +# 20070 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66817,9 +61542,9 @@ module Tables = struct let x = let _1 = _10 in -# 4056 "reason_parser.mly" +# 4370 "reason_parser.mly" ( "<" ) -# 17840 "reason_parser.ml" +# 20135 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66827,15 +61552,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17850 "reason_parser.ml" +# 20145 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17856 "reason_parser.ml" +# 20151 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66843,21 +61568,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17866 "reason_parser.ml" +# 20161 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17872 "reason_parser.ml" +# 20167 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17878 "reason_parser.ml" +# 20173 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -66920,9 +61645,9 @@ module Tables = struct let x = let _1 = _10 in -# 4057 "reason_parser.mly" +# 4371 "reason_parser.mly" ( ">" ) -# 17943 "reason_parser.ml" +# 20238 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -66930,15 +61655,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 17953 "reason_parser.ml" +# 20248 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 17959 "reason_parser.ml" +# 20254 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -66946,21 +61671,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 17969 "reason_parser.ml" +# 20264 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 17975 "reason_parser.ml" +# 20270 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 17981 "reason_parser.ml" +# 20276 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67023,9 +61748,9 @@ module Tables = struct let x = let _1 = _10 in -# 4058 "reason_parser.mly" +# 4372 "reason_parser.mly" ( "or" ) -# 18046 "reason_parser.ml" +# 20341 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67033,15 +61758,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18056 "reason_parser.ml" +# 20351 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18062 "reason_parser.ml" +# 20357 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67049,21 +61774,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18072 "reason_parser.ml" +# 20367 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18078 "reason_parser.ml" +# 20373 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18084 "reason_parser.ml" +# 20379 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67126,9 +61851,9 @@ module Tables = struct let x = let _1 = _10 in -# 4059 "reason_parser.mly" +# 4373 "reason_parser.mly" ( "||" ) -# 18149 "reason_parser.ml" +# 20444 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67136,15 +61861,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18159 "reason_parser.ml" +# 20454 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18165 "reason_parser.ml" +# 20460 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67152,21 +61877,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18175 "reason_parser.ml" +# 20470 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18181 "reason_parser.ml" +# 20476 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18187 "reason_parser.ml" +# 20482 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67229,9 +61954,9 @@ module Tables = struct let x = let _1 = _10 in -# 4060 "reason_parser.mly" +# 4374 "reason_parser.mly" ( "&" ) -# 18252 "reason_parser.ml" +# 20547 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67239,15 +61964,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18262 "reason_parser.ml" +# 20557 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18268 "reason_parser.ml" +# 20563 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67255,21 +61980,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18278 "reason_parser.ml" +# 20573 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18284 "reason_parser.ml" +# 20579 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18290 "reason_parser.ml" +# 20585 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67332,9 +62057,9 @@ module Tables = struct let x = let _1 = _10 in -# 4061 "reason_parser.mly" +# 4375 "reason_parser.mly" ( "&&" ) -# 18355 "reason_parser.ml" +# 20650 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67342,15 +62067,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18365 "reason_parser.ml" +# 20660 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18371 "reason_parser.ml" +# 20666 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67358,21 +62083,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18381 "reason_parser.ml" +# 20676 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18387 "reason_parser.ml" +# 20682 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18393 "reason_parser.ml" +# 20688 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67435,9 +62160,9 @@ module Tables = struct let x = let _1 = _10 in -# 4062 "reason_parser.mly" +# 4376 "reason_parser.mly" ( ":=" ) -# 18458 "reason_parser.ml" +# 20753 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67445,15 +62170,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18468 "reason_parser.ml" +# 20763 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18474 "reason_parser.ml" +# 20769 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67461,21 +62186,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18484 "reason_parser.ml" +# 20779 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18490 "reason_parser.ml" +# 20785 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18496 "reason_parser.ml" +# 20791 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67538,9 +62263,9 @@ module Tables = struct let x = let _1 = _10 in -# 4063 "reason_parser.mly" +# 4377 "reason_parser.mly" ( "+=" ) -# 18561 "reason_parser.ml" +# 20856 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67548,15 +62273,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18571 "reason_parser.ml" +# 20866 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18577 "reason_parser.ml" +# 20872 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67564,21 +62289,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18587 "reason_parser.ml" +# 20882 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18593 "reason_parser.ml" +# 20888 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18599 "reason_parser.ml" +# 20894 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67641,9 +62366,9 @@ module Tables = struct let x = let _1 = _10 in -# 4064 "reason_parser.mly" +# 4378 "reason_parser.mly" ( "%" ) -# 18664 "reason_parser.ml" +# 20959 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67651,15 +62376,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18674 "reason_parser.ml" +# 20969 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18680 "reason_parser.ml" +# 20975 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67667,21 +62392,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18690 "reason_parser.ml" +# 20985 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18696 "reason_parser.ml" +# 20991 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18702 "reason_parser.ml" +# 20997 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67744,9 +62469,9 @@ module Tables = struct let x = let _1 = _10 in -# 4071 "reason_parser.mly" +# 4385 "reason_parser.mly" ( "<..>" ) -# 18767 "reason_parser.ml" +# 21062 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -67754,15 +62479,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18777 "reason_parser.ml" +# 21072 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18783 "reason_parser.ml" +# 21078 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67770,21 +62495,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18793 "reason_parser.ml" +# 21088 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18799 "reason_parser.ml" +# 21094 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18805 "reason_parser.ml" +# 21100 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67858,9 +62583,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4072 "reason_parser.mly" +# 4386 "reason_parser.mly" ( ">>" ) -# 18881 "reason_parser.ml" +# 21176 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -67868,15 +62593,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18891 "reason_parser.ml" +# 21186 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 18897 "reason_parser.ml" +# 21192 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -67884,21 +62609,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18907 "reason_parser.ml" +# 21202 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18913 "reason_parser.ml" +# 21208 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 18919 "reason_parser.ml" +# 21214 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -67950,15 +62675,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 18973 "reason_parser.ml" +# 21268 "reason_parser.ml" in -# 2576 "reason_parser.mly" +# 2784 "reason_parser.mly" ( mkuminus _1 _2 ) -# 18979 "reason_parser.ml" +# 21274 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -67966,21 +62691,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 18989 "reason_parser.ml" +# 21284 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 18995 "reason_parser.ml" +# 21290 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19001 "reason_parser.ml" +# 21296 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68032,15 +62757,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 19055 "reason_parser.ml" +# 21350 "reason_parser.ml" in -# 2578 "reason_parser.mly" +# 2786 "reason_parser.mly" ( mkuplus _1 _2 ) -# 19061 "reason_parser.ml" +# 21356 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -68048,21 +62773,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19071 "reason_parser.ml" +# 21366 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19077 "reason_parser.ml" +# 21372 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19083 "reason_parser.ml" +# 21378 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68114,9 +62839,9 @@ module Tables = struct let x = let _1 = _10 in -# 2579 "reason_parser.mly" +# 2787 "reason_parser.mly" ("!") -# 19137 "reason_parser.ml" +# 21432 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -68124,15 +62849,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 19147 "reason_parser.ml" +# 21442 "reason_parser.ml" in -# 2580 "reason_parser.mly" +# 2788 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _1, [Nolabel,_2])) ) -# 19153 "reason_parser.ml" +# 21448 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -68140,21 +62865,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19163 "reason_parser.ml" +# 21458 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19169 "reason_parser.ml" +# 21464 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19175 "reason_parser.ml" +# 21470 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68239,9 +62964,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 19262 "reason_parser.ml" +# 21557 "reason_parser.ml" in let _1 = @@ -68251,15 +62976,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19274 "reason_parser.ml" +# 21569 "reason_parser.ml" in -# 2582 "reason_parser.mly" +# 2790 "reason_parser.mly" ( mkexp(Pexp_setfield(_1, _3, _5)) ) -# 19280 "reason_parser.ml" +# 21575 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -68267,21 +62992,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19290 "reason_parser.ml" +# 21585 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19296 "reason_parser.ml" +# 21591 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19302 "reason_parser.ml" +# 21597 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68370,22 +63095,22 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19393 "reason_parser.ml" +# 21688 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2584 "reason_parser.mly" +# 2792 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "Array" "set") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_3; Nolabel,_6])) ) -# 19406 "reason_parser.ml" +# 21701 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -68393,21 +63118,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19416 "reason_parser.ml" +# 21711 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19422 "reason_parser.ml" +# 21717 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19428 "reason_parser.ml" +# 21723 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68505,22 +63230,22 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19528 "reason_parser.ml" +# 21823 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 2590 "reason_parser.mly" +# 2798 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "String" "set") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_4; Nolabel,_7])) ) -# 19541 "reason_parser.ml" +# 21836 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -68528,21 +63253,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19551 "reason_parser.ml" +# 21846 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19557 "reason_parser.ml" +# 21852 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19563 "reason_parser.ml" +# 21858 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68640,20 +63365,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19663 "reason_parser.ml" +# 21958 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 2596 "reason_parser.mly" +# 2804 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in bigarray_set ~loc _1 _4 _7 ) -# 19674 "reason_parser.ml" +# 21969 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -68661,21 +63386,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19684 "reason_parser.ml" +# 21979 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19690 "reason_parser.ml" +# 21985 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19696 "reason_parser.ml" +# 21991 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68706,9 +63431,9 @@ module Tables = struct let _3000 : 'tv_expr = Obj.magic _3000 in let _2000 : unit = Obj.magic _2000 in let _100000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 19729 "reason_parser.ml" +# 22024 "reason_parser.ml" ) = Obj.magic _100000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100000_ in @@ -68740,9 +63465,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 19763 "reason_parser.ml" +# 22058 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -68750,15 +63475,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 19773 "reason_parser.ml" +# 22068 "reason_parser.ml" in -# 2600 "reason_parser.mly" +# 2808 "reason_parser.mly" ( mkexp(Pexp_setinstvar(_1, _3)) ) -# 19779 "reason_parser.ml" +# 22074 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -68766,21 +63491,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19789 "reason_parser.ml" +# 22084 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19795 "reason_parser.ml" +# 22090 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19801 "reason_parser.ml" +# 22096 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68832,15 +63557,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19855 "reason_parser.ml" +# 22150 "reason_parser.ml" in -# 2602 "reason_parser.mly" +# 2810 "reason_parser.mly" ( mkexp (Pexp_assert _2) ) -# 19861 "reason_parser.ml" +# 22156 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -68848,21 +63573,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19871 "reason_parser.ml" +# 22166 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19877 "reason_parser.ml" +# 22172 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19883 "reason_parser.ml" +# 22178 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -68914,15 +63639,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 19937 "reason_parser.ml" +# 22232 "reason_parser.ml" in -# 2604 "reason_parser.mly" +# 2812 "reason_parser.mly" ( mkexp (Pexp_lazy _2) ) -# 19943 "reason_parser.ml" +# 22238 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -68930,21 +63655,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 19953 "reason_parser.ml" +# 22248 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 19959 "reason_parser.ml" +# 22254 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 19965 "reason_parser.ml" +# 22260 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69025,7 +63750,7 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2630 "reason_parser.mly" +# 2838 "reason_parser.mly" ( (* Should use ghost expressions, but not sure how that would work with source maps *) (* So ? will become true and : becomes false for now*) let loc_question = mklocation _startpos__2_ _endpos__2_ in @@ -69038,7 +63763,7 @@ module Tables = struct let fauxMatchCaseFalse = Exp.case fauxFalsePat _5 in mkexp (Pexp_match (_1, [fauxMatchCaseTrue; fauxMatchCaseFalse])) ) -# 20059 "reason_parser.ml" +# 22354 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -69046,21 +63771,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 20069 "reason_parser.ml" +# 22364 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 20075 "reason_parser.ml" +# 22370 "reason_parser.ml" in -# 2651 "reason_parser.mly" +# 2859 "reason_parser.mly" ( _1 ) -# 20081 "reason_parser.ml" +# 22376 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69097,9 +63822,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2653 "reason_parser.mly" +# 2861 "reason_parser.mly" ( {_2 with pexp_attributes = _1 :: _2.pexp_attributes} ) -# 20120 "reason_parser.ml" +# 22415 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -69107,15 +63832,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 20130 "reason_parser.ml" +# 22425 "reason_parser.ml" in -# 2656 "reason_parser.mly" +# 2864 "reason_parser.mly" ( _1 ) -# 20136 "reason_parser.ml" +# 22431 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69127,26 +63852,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in + let _3 : 'tv_option_COMMA_ = Obj.magic _3 in let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in + let _endpos = _endpos__3_ in let _v : 'tv_expr_comma_seq_extension = -# 3079 "reason_parser.mly" +# 3332 "reason_parser.mly" ( ([], Some _2) ) -# 20167 "reason_parser.ml" +# 22468 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69175,9 +63906,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_expr_comma_seq_extension = -# 3081 "reason_parser.mly" +# 3334 "reason_parser.mly" ( ([_1], None) ) -# 20198 "reason_parser.ml" +# 22499 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69212,9 +63943,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_expr_comma_seq_extension = -# 3083 "reason_parser.mly" +# 3336 "reason_parser.mly" ( let seq, ext = _3 in (_1::seq, ext) ) -# 20235 "reason_parser.ml" +# 22536 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69245,15 +63976,15 @@ module Tables = struct let _v : 'tv_expr_list = let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 20268 "reason_parser.ml" +# 22569 "reason_parser.ml" in -# 3073 "reason_parser.mly" +# 3326 "reason_parser.mly" ( _1 ) -# 20274 "reason_parser.ml" +# 22575 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69276,9 +64007,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_expr_optional_constraint = -# 3106 "reason_parser.mly" +# 3359 "reason_parser.mly" ( _1 ) -# 20299 "reason_parser.ml" +# 22600 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69309,9 +64040,9 @@ module Tables = struct let _v : 'tv_expr_optional_constraint = let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3108 "reason_parser.mly" +# 3361 "reason_parser.mly" ( ghexp_constraint (mklocation _symbolstartpos _endpos) _1 _2 ) -# 20332 "reason_parser.ml" +# 22633 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69352,9 +64083,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_extension = -# 4318 "reason_parser.mly" +# 4632 "reason_parser.mly" ( (_2, _3) ) -# 20375 "reason_parser.ml" +# 22676 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69379,9 +64110,9 @@ module Tables = struct } = _menhir_stack in let _2 : 'tv_generalized_constructor_arguments = Obj.magic _2 in let _100 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 20402 "reason_parser.ml" +# 22703 "reason_parser.ml" ) = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in @@ -69393,9 +64124,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 20416 "reason_parser.ml" +# 22717 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -69403,21 +64134,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20426 "reason_parser.ml" +# 22727 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20438 "reason_parser.ml" +# 22739 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69460,9 +64191,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 20483 "reason_parser.ml" +# 22784 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -69470,21 +64201,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20493 "reason_parser.ml" +# 22794 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20505 "reason_parser.ml" +# 22806 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69527,9 +64258,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 20550 "reason_parser.ml" +# 22851 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -69537,21 +64268,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20560 "reason_parser.ml" +# 22861 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20572 "reason_parser.ml" +# 22873 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69586,9 +64317,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 20609 "reason_parser.ml" +# 22910 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -69596,21 +64327,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20619 "reason_parser.ml" +# 22920 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20631 "reason_parser.ml" +# 22932 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69645,9 +64376,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 20668 "reason_parser.ml" +# 22969 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -69655,21 +64386,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20678 "reason_parser.ml" +# 22979 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20690 "reason_parser.ml" +# 22991 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69704,9 +64435,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 20727 "reason_parser.ml" +# 23028 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -69714,21 +64445,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20737 "reason_parser.ml" +# 23038 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3656 "reason_parser.mly" +# 3954 "reason_parser.mly" ( let args, res = _2 in let loc = mklocation _symbolstartpos _endpos in Te.decl _1 ~args ?res ~loc ) -# 20749 "reason_parser.ml" +# 23050 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69759,9 +64490,9 @@ module Tables = struct let x0 : 'tv_constr_longident = Obj.magic x0 in let _2 : unit = Obj.magic _2 in let _100 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 20782 "reason_parser.ml" +# 23083 "reason_parser.ml" ) = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in @@ -69773,9 +64504,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20796 "reason_parser.ml" +# 23097 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -69786,9 +64517,9 @@ module Tables = struct let x = let _1 = _10 in -# 4082 "reason_parser.mly" +# 4396 "reason_parser.mly" ( _1 ) -# 20809 "reason_parser.ml" +# 23110 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -69796,20 +64527,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20819 "reason_parser.ml" +# 23120 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 20830 "reason_parser.ml" +# 23131 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69856,9 +64587,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20879 "reason_parser.ml" +# 23180 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -69871,9 +64602,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4083 "reason_parser.mly" +# 4397 "reason_parser.mly" ( "[]" ) -# 20894 "reason_parser.ml" +# 23195 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -69881,20 +64612,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20904 "reason_parser.ml" +# 23205 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 20915 "reason_parser.ml" +# 23216 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -69941,9 +64672,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20964 "reason_parser.ml" +# 23265 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -69956,9 +64687,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4084 "reason_parser.mly" +# 4398 "reason_parser.mly" ( "()" ) -# 20979 "reason_parser.ml" +# 23280 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -69966,20 +64697,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 20989 "reason_parser.ml" +# 23290 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 21000 "reason_parser.ml" +# 23301 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70020,9 +64751,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21043 "reason_parser.ml" +# 23344 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -70033,9 +64764,9 @@ module Tables = struct let x = let _1 = _10 in -# 4085 "reason_parser.mly" +# 4399 "reason_parser.mly" ( "::" ) -# 21056 "reason_parser.ml" +# 23357 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -70043,20 +64774,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21066 "reason_parser.ml" +# 23367 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 21077 "reason_parser.ml" +# 23378 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70097,9 +64828,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21120 "reason_parser.ml" +# 23421 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -70110,9 +64841,9 @@ module Tables = struct let x = let _1 = _10 in -# 4087 "reason_parser.mly" +# 4401 "reason_parser.mly" ( "false" ) -# 21133 "reason_parser.ml" +# 23434 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -70120,20 +64851,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21143 "reason_parser.ml" +# 23444 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 21154 "reason_parser.ml" +# 23455 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70174,9 +64905,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21197 "reason_parser.ml" +# 23498 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -70187,9 +64918,9 @@ module Tables = struct let x = let _1 = _10 in -# 4088 "reason_parser.mly" +# 4402 "reason_parser.mly" ( "true" ) -# 21210 "reason_parser.ml" +# 23511 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -70197,20 +64928,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21220 "reason_parser.ml" +# 23521 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 3664 "reason_parser.mly" +# 3962 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in Te.rebind _1 _3 ~loc ) -# 21231 "reason_parser.ml" +# 23532 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70241,9 +64972,9 @@ module Tables = struct let _3 : 'tv_expr = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 21264 "reason_parser.ml" +# 23565 "reason_parser.ml" ) = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x0_ in @@ -70255,15 +64986,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 21278 "reason_parser.ml" +# 23579 "reason_parser.ml" in -# 3167 "reason_parser.mly" +# 3446 "reason_parser.mly" ( (_1, _3) ) -# 21284 "reason_parser.ml" +# 23585 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70282,9 +65013,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 21305 "reason_parser.ml" +# 23606 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -70292,13 +65023,469 @@ module Tables = struct let _v : 'tv_field_expr = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 3169 "reason_parser.mly" +# 3448 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let lident_loc = mkloc _1 loc in let lident_lident_loc = mkloc (Lident _1) loc in (lident_loc, mkexp (Pexp_ident lident_lident_loc)) ) -# 21319 "reason_parser.ml" +# 23620 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_core_type___ = Obj.magic _2 in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUAL_core_type_ = let _1 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 23673 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__10_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 23692 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_core_type___ = Obj.magic _2 in + let _3000 : unit = Obj.magic _3000 in + let _20000 : 'tv_option_COMMA_ = Obj.magic _20000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _100000 in + let _1000 : unit = Obj.magic _1000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUAL_core_type_ = let _1 = + let _300 = _3000 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in + let _1 = + let _30 = _300 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 23767 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 23773 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 23779 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 23785 "reason_parser.ml" + + in + +# 2548 "reason_parser.mly" + ( + (_1, false) + ) +# 23793 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__1000_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 23812 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _30; + MenhirLib.EngineTypes.startp = _startpos__30_; + MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_core_type___ = Obj.magic _2 in + let _30 : unit = Obj.magic _30 in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUAL_core_type_ = let _1 = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 2551 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) + ) +# 23872 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__10_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 23891 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _21; + MenhirLib.EngineTypes.startp = _startpos__21_; + MenhirLib.EngineTypes.endp = _endpos__21_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_core_type___ = Obj.magic _2 in + let _40 : unit = Obj.magic _40 in + let _200 : 'tv_option_COMMA_ = Obj.magic _200 in + let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1000 in + let _21 : unit = Obj.magic _21 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUAL_core_type_ = let _1 = + let _4 = _40 in + let _20 = _200 in + let _100 = _1000 in + let _2 = _21 in + let _1 = _10 in + let _3 = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 23963 "reason_parser.ml" + + in + +# 2541 "reason_parser.mly" + ( _1 ) +# 23969 "reason_parser.ml" + + in + +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) + ) +# 23985 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__10_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 24004 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUALGREATER_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_non_arrowed_core_type___ = Obj.magic _2 in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = let _1 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 2544 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], false) + ) +# 24057 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__10_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 24076 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70322,88 +65509,103 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__3000_; MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs0000; - MenhirLib.EngineTypes.startp = _startpos_xs0000_; - MenhirLib.EngineTypes.endp = _endpos_xs0000_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _3 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _3 in - let _2 : 'tv_option_preceded_COLON_only_core_type_core_type___ = Obj.magic _2 in + let _3 : 'tv_either_preceded_EQUALGREATER_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_non_arrowed_core_type___ = Obj.magic _2 in let _3000 : unit = Obj.magic _3000 in - let xs0000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = Obj.magic xs0000 in + let _20000 : 'tv_option_COMMA_ = Obj.magic _20000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _100000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in let _endpos = _endpos__3_ in - let _v : 'tv_fun_def_EQUAL_core_type_ = let _1 = - let _endpos__300_ = _endpos__3000_ in - let _startpos__100_ = _startpos__1000_ in + let _v : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = let _1 = let _300 = _3000 in - let xs000 = xs0000 in + let _2000 = _20000 in + let _10000 = _100000 in let _100 = _1000 in let _1 = let _30 = _300 in - let xs00 = xs000 in + let _200 = _2000 in + let _1000 = _10000 in let _10 = _100 in let _1 = let _3 = _30 in - let xs0 = xs00 in + let _20 = _200 in + let _100 = _1000 in let _1 = _10 in let x = - let xs = xs0 in + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 24151 "reason_parser.ml" + + in -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 21384 "reason_parser.ml" +# 2541 "reason_parser.mly" + ( _1 ) +# 24157 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 21390 "reason_parser.ml" +# 24163 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 21396 "reason_parser.ml" +# 24169 "reason_parser.ml" in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in -# 2395 "reason_parser.mly" - ( match _1 with - | [] -> - let loc = mklocation _startpos _endpos in - [mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc] - | pats -> pats +# 2548 "reason_parser.mly" + ( + (_1, false) ) -# 21411 "reason_parser.ml" +# 24177 "reason_parser.ml" in let _startpos__1_ = _startpos__1000_ in let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 3063 "reason_parser.mly" - ( List.fold_right mkexp_fun _1 - (match _2 with - | None -> _3 - | Some ct -> Exp.constraint_ ~loc:(mklocation _startpos _endpos) _3 ct) +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp ) -# 21424 "reason_parser.ml" +# 24196 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70423,19 +65625,108 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _30; + MenhirLib.EngineTypes.startp = _startpos__30_; + MenhirLib.EngineTypes.endp = _endpos__30_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs0000; - MenhirLib.EngineTypes.startp = _startpos_xs0000_; - MenhirLib.EngineTypes.endp = _endpos_xs0000_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _3 : 'tv_either_preceded_EQUALGREATER_expr__braced_expr_ = Obj.magic _3 in + let _2 : 'tv_option_preceded_COLON_only_core_type_non_arrowed_core_type___ = Obj.magic _2 in + let _30 : unit = Obj.magic _30 in + let _20 : unit = Obj.magic _20 in + let _10 : unit = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__3_ in + let _v : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = let _1 = + let _endpos__3_ = _endpos__30_ in + let _startpos__1_ = _startpos__10_ in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 2551 "reason_parser.mly" + ( + let loc = mklocation _startpos _endpos in + ([mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc], true) + ) +# 24256 "reason_parser.ml" + + in + let _startpos__1_ = _startpos__10_ in + let _endpos = _endpos__3_ in + let _startpos = _startpos__1_ in + +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 24275 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _1000; MenhirLib.EngineTypes.startp = _startpos__1000_; MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _21; + MenhirLib.EngineTypes.startp = _startpos__21_; + MenhirLib.EngineTypes.endp = _endpos__21_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -70443,72 +65734,70 @@ module Tables = struct } = _menhir_stack in let _3 : 'tv_either_preceded_EQUALGREATER_expr__braced_expr_ = Obj.magic _3 in let _2 : 'tv_option_preceded_COLON_only_core_type_non_arrowed_core_type___ = Obj.magic _2 in - let _3000 : unit = Obj.magic _3000 in - let xs0000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = Obj.magic xs0000 in - let _1000 : unit = Obj.magic _1000 in + let _40 : unit = Obj.magic _40 in + let _200 : 'tv_option_COMMA_ = Obj.magic _200 in + let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1000 in + let _21 : unit = Obj.magic _21 in + let _10 : unit = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1000_ in + let _startpos = _startpos__10_ in let _endpos = _endpos__3_ in let _v : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = let _1 = - let _endpos__300_ = _endpos__3000_ in - let _startpos__100_ = _startpos__1000_ in - let _300 = _3000 in - let xs000 = xs0000 in + let _4 = _40 in + let _20 = _200 in let _100 = _1000 in - let _1 = - let _30 = _300 in - let xs00 = xs000 in + let _2 = _21 in + let _1 = _10 in + let _3 = + let _2 = _20 in let _10 = _100 in let _1 = - let _3 = _30 in - let xs0 = xs00 in let _1 = _10 in - let x = - let xs = xs0 in - -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 21489 "reason_parser.ml" - - in -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 21495 "reason_parser.ml" +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 24347 "reason_parser.ml" in -# 4429 "reason_parser.mly" - ( _1 ) -# 21501 "reason_parser.ml" +# 2541 "reason_parser.mly" + ( _1 ) +# 24353 "reason_parser.ml" in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in -# 2395 "reason_parser.mly" - ( match _1 with - | [] -> - let loc = mklocation _startpos _endpos in - [mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc] - | pats -> pats +# 2555 "reason_parser.mly" + ( + let () = List.iter (fun p -> + match p.txt with + | Term (Labelled _, _, _) + | Term (Optional _, _, _) -> + raise Syntax_util.(Error(p.loc, (Syntax_error "Uncurried function definition with labelled arguments is not supported at the moment."))); + () + | _ -> () + ) _3 in + (_3, true) ) -# 21516 "reason_parser.ml" +# 24369 "reason_parser.ml" in - let _startpos__1_ = _startpos__1000_ in + let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 3063 "reason_parser.mly" - ( List.fold_right mkexp_fun _1 - (match _2 with - | None -> _3 - | Some ct -> Exp.constraint_ ~loc:(mklocation _startpos _endpos) _3 ct) +# 3310 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (pl, uncurried) = _1 in + let exp = List.fold_right mkexp_fun pl + (match _2 with + | None -> _3 + | Some ct -> Exp.constraint_ ~loc _3 ct) + in + if uncurried then + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp ) -# 21529 "reason_parser.ml" +# 24388 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70539,11 +65828,11 @@ module Tables = struct let _v : 'tv_functor_parameters = let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 1299 "reason_parser.mly" +# 1423 "reason_parser.mly" ( let loc = mklocation _startpos _endpos in [mkloc (Some (mkloc "*" loc), None) loc] ) -# 21564 "reason_parser.ml" +# 24423 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70555,52 +65844,75 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let x00 : 'tv_module_parameter = Obj.magic x00 in - let _100 : unit = Obj.magic _100 in + let _3 : unit = Obj.magic _3 in + let _2 : 'tv_module_parameter = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_functor_parameters = let _1 = - let _30 = _300 in - let x0 = x00 in - let _10 = _100 in - let _1 = - let _3 = _30 in - let x = x0 in - let _1 = _10 in - -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 21609 "reason_parser.ml" - - in - -# 4429 "reason_parser.mly" - ( _1 ) -# 21615 "reason_parser.ml" - - in - -# 1302 "reason_parser.mly" - ( [_1] ) -# 21621 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_functor_parameters = +# 1434 "reason_parser.mly" + ([_2]) +# 24460 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : 'tv_module_parameter = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_functor_parameters = +# 1435 "reason_parser.mly" + ([_2]) +# 24503 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70616,82 +65928,101 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.semv = _2100; + MenhirLib.EngineTypes.startp = _startpos__2100_; + MenhirLib.EngineTypes.endp = _endpos__2100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _11000; + MenhirLib.EngineTypes.startp = _startpos__11000_; + MenhirLib.EngineTypes.endp = _endpos__11000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = Obj.magic _10000 in - let _2000 : unit = Obj.magic _2000 in - let _1100 : 'tv_module_parameter = Obj.magic _1100 in + let _2100 : 'tv_option_COMMA_ = Obj.magic _2100 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = Obj.magic _100000 in + let _20000 : unit = Obj.magic _20000 in + let _11000 : 'tv_module_parameter = Obj.magic _11000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_functor_parameters = let _1 = let _30 = _300 in - let _1000 = _10000 in - let _200 = _2000 in - let _110 = _1100 in + let _210 = _2100 in + let _10000 = _100000 in + let _2000 = _20000 in + let _1100 = _11000 in let _10 = _100 in let _1 = let _3 = _30 in - let _100 = _1000 in - let _20 = _200 in - let _11 = _110 in + let _21 = _210 in + let _1000 = _10000 in + let _200 = _2000 in + let _110 = _1100 in let _1 = _10 in let x = - let _10 = _100 in - let _2 = _20 in - let _1 = _11 in - let _3 = - let _1 = _10 in - -# 4419 "reason_parser.mly" + let _2 = _21 in + let _100 = _1000 in + let _20 = _200 in + let _11 = _110 in + let _1 = + let _10 = _100 in + let _2 = _20 in + let _1 = _11 in + let _3 = + let _1 = _10 in + +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 21688 "reason_parser.ml" +# 24583 "reason_parser.ml" + + in + +# 4742 "reason_parser.mly" + ( _1 :: _3 ) +# 24589 "reason_parser.ml" in -# 4427 "reason_parser.mly" - ( _1 :: _3 ) -# 21694 "reason_parser.ml" +# 1418 "reason_parser.mly" + (_1) +# 24595 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 21700 "reason_parser.ml" +# 24601 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 21706 "reason_parser.ml" +# 24607 "reason_parser.ml" in -# 1303 "reason_parser.mly" - ( _1 ) -# 21712 "reason_parser.ml" +# 1436 "reason_parser.mly" + ( _1 ) +# 24613 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70720,9 +66051,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_generalized_constructor_arguments = -# 3573 "reason_parser.mly" +# 3859 "reason_parser.mly" ( ((match _1 with None -> Pcstr_tuple [] | Some x -> x), _2) ) -# 21743 "reason_parser.ml" +# 24644 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70741,17 +66072,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 21764 "reason_parser.ml" +# 24665 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_ident = -# 4036 "reason_parser.mly" +# 4350 "reason_parser.mly" ( _1 ) -# 21772 "reason_parser.ml" +# 24673 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70770,17 +66101,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 21793 "reason_parser.ml" +# 24694 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_ident = -# 4036 "reason_parser.mly" +# 4350 "reason_parser.mly" ( _1 ) -# 21801 "reason_parser.ml" +# 24702 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70809,13 +66140,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : ( -# 1203 "reason_parser.mly" +# 1323 "reason_parser.mly" (Ast_404.Parsetree.structure) -# 21832 "reason_parser.ml" +# 24733 "reason_parser.ml" ) = -# 1246 "reason_parser.mly" +# 1366 "reason_parser.mly" ( apply_mapper_to_structure _1 reason_mapper ) -# 21836 "reason_parser.ml" +# 24737 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70844,13 +66175,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : ( -# 1205 "reason_parser.mly" +# 1325 "reason_parser.mly" (Ast_404.Parsetree.signature) -# 21867 "reason_parser.ml" +# 24768 "reason_parser.ml" ) = -# 1251 "reason_parser.mly" +# 1371 "reason_parser.mly" ( apply_mapper_to_signature _1 reason_mapper ) -# 21871 "reason_parser.ml" +# 24772 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70891,9 +66222,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_item_extension = -# 4322 "reason_parser.mly" +# 4636 "reason_parser.mly" ( (_2, _3) ) -# 21914 "reason_parser.ml" +# 24815 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70922,9 +66253,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_item_extension_sugar = -# 4314 "reason_parser.mly" +# 4628 "reason_parser.mly" ( ([], _2) ) -# 21945 "reason_parser.ml" +# 24846 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70961,12 +66292,12 @@ module Tables = struct let _v : 'tv_jsx = let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 2451 "reason_parser.mly" +# 2637 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let body = mktailexp_extension loc _2 None in makeFrag loc body ) -# 21987 "reason_parser.ml" +# 24888 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -70997,7 +66328,7 @@ module Tables = struct let _v : 'tv_jsx = let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 2456 "reason_parser.mly" +# 2642 "reason_parser.mly" ( let (component, _) = _1 in let loc = mklocation _symbolstartpos _endpos in component [ @@ -71005,7 +66336,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22026 "reason_parser.ml" +# 24927 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71039,9 +66370,9 @@ module Tables = struct }; } = _menhir_stack in let _4 : ( -# 1042 "reason_parser.mly" +# 1162 "reason_parser.mly" (string) -# 22062 "reason_parser.ml" +# 24963 "reason_parser.ml" ) = Obj.magic _4 in let _3 : 'tv_list_simple_expr_no_call_ = Obj.magic _3 in let _2 : unit = Obj.magic _2 in @@ -71052,7 +66383,7 @@ module Tables = struct let _v : 'tv_jsx = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2464 "reason_parser.mly" +# 2650 "reason_parser.mly" ( let (component, start) = _1 in let loc = mklocation _symbolstartpos _endpos in (* TODO: Make this tag check simply a warning *) @@ -71064,7 +66395,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22085 "reason_parser.ml" +# 24986 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71103,9 +66434,9 @@ module Tables = struct }; } = _menhir_stack in let _5 : ( -# 1042 "reason_parser.mly" +# 1162 "reason_parser.mly" (string) -# 22126 "reason_parser.ml" +# 25027 "reason_parser.ml" ) = Obj.magic _5 in let _4 : 'tv_simple_expr_no_call = Obj.magic _4 in let _3 : unit = Obj.magic _3 in @@ -71117,7 +66448,7 @@ module Tables = struct let _v : 'tv_jsx = let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2477 "reason_parser.mly" +# 2663 "reason_parser.mly" ( let (component, start) = _1 in let loc = mklocation _symbolstartpos _endpos in (* TODO: Make this tag check simply a warning *) @@ -71129,7 +66460,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22150 "reason_parser.ml" +# 25051 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71145,9 +66476,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_jsx_arguments = -# 2413 "reason_parser.mly" +# 2576 "reason_parser.mly" ( [] ) -# 22168 "reason_parser.ml" +# 25069 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71190,9 +66521,9 @@ module Tables = struct let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22213 "reason_parser.ml" +# 25114 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -71204,17 +66535,17 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 22227 "reason_parser.ml" +# 25128 "reason_parser.ml" in -# 2415 "reason_parser.mly" +# 2578 "reason_parser.mly" ( (* a=?b *) [(Optional _1, _4)] @ _5 ) -# 22235 "reason_parser.ml" +# 25136 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71244,21 +66575,21 @@ module Tables = struct } = _menhir_stack in let _3 : 'tv_jsx_arguments = Obj.magic _3 in let _2 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22267 "reason_parser.ml" +# 25168 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_jsx_arguments = -# 2419 "reason_parser.mly" +# 2582 "reason_parser.mly" ( (* punning with explicitly passed optional *) let loc_lident = mklocation _startpos__2_ _endpos__2_ in [(Optional _2, mkexp (Pexp_ident {txt = Lident _2; loc = loc_lident}) ~loc:loc_lident)] @ _3 ) -# 22279 "reason_parser.ml" +# 25180 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71295,9 +66626,9 @@ module Tables = struct let _10 : 'tv_simple_expr_call = Obj.magic _10 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22318 "reason_parser.ml" +# 25219 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -71309,17 +66640,17 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 22332 "reason_parser.ml" +# 25233 "reason_parser.ml" in -# 2424 "reason_parser.mly" +# 2587 "reason_parser.mly" ( (* a=b *) [(Labelled _1, _3)] @ _4 ) -# 22340 "reason_parser.ml" +# 25241 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71344,20 +66675,78 @@ module Tables = struct } = _menhir_stack in let _2 : 'tv_jsx_arguments = Obj.magic _2 in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22367 "reason_parser.ml" +# 25268 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_jsx_arguments = -# 2428 "reason_parser.mly" +# 2591 "reason_parser.mly" ( (* a (punning) *) let loc_lident = mklocation _startpos__1_ _endpos__1_ in [(Labelled _1, mkexp (Pexp_ident {txt = Lident _1; loc = loc_lident}) ~loc:loc_lident)] @ _2 ) -# 22378 "reason_parser.ml" +# 25279 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x0 : ( +# 1107 "reason_parser.mly" + (string) +# 25300 "reason_parser.ml" + ) = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_x0_ in + let _v : 'tv_jsx_arguments = let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 25314 "reason_parser.ml" + + in + +# 2600 "reason_parser.mly" + ( + match _1.txt with + | "/>>" -> + let err = Syntax_util.Syntax_error {|JSX in a JSX-argument needs to be wrapped in braces. + If you wrote: + > child + Try wrapping in braces. + }> child |} in + raise (Syntax_util.Error(_1.loc, err)) + | "/>/>" -> + let err = Syntax_util.Syntax_error {|JSX in a JSX-argument needs to be wrapped in braces. + If you wrote: + /> + Try wrapping in braces. + } />|} in + raise (Syntax_util.Error(_1.loc, err)) + | _ -> syntax_error () + ) +# 25337 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71382,19 +66771,19 @@ module Tables = struct } = _menhir_stack in let _2 : 'tv_jsx_arguments = Obj.magic _2 in let _1 : ( -# 1005 "reason_parser.mly" +# 1125 "reason_parser.mly" (string) -# 22405 "reason_parser.ml" +# 25364 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_jsx_start_tag_and_args = -# 2436 "reason_parser.mly" +# 2622 "reason_parser.mly" ( let name = Longident.parse _1 in (jsx_component name _2, name) ) -# 22415 "reason_parser.ml" +# 25374 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71423,9 +66812,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_jsx_start_tag_and_args_without_leading_less = -# 2443 "reason_parser.mly" +# 2629 "reason_parser.mly" ( (jsx_component _1 _2, _1) ) -# 22446 "reason_parser.ml" +# 25405 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71450,18 +66839,18 @@ module Tables = struct } = _menhir_stack in let _2 : 'tv_jsx_arguments = Obj.magic _2 in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22473 "reason_parser.ml" +# 25432 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_jsx_start_tag_and_args_without_leading_less = -# 2445 "reason_parser.mly" +# 2631 "reason_parser.mly" ( let lident = Longident.Lident _1 in (jsx_component lident _2, lident) ) -# 22482 "reason_parser.ml" +# 25441 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71498,13 +66887,13 @@ module Tables = struct let _v : 'tv_jsx_without_leading_less = let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 2491 "reason_parser.mly" +# 2677 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let body = mktailexp_extension loc _2 None in makeFrag loc body ) -# 22525 "reason_parser.ml" +# 25484 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71535,7 +66924,7 @@ module Tables = struct let _v : 'tv_jsx_without_leading_less = let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 2496 "reason_parser.mly" +# 2682 "reason_parser.mly" ( let (component, _) = _1 in let loc = mklocation _symbolstartpos _endpos in @@ -71544,7 +66933,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22565 "reason_parser.ml" +# 25524 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71578,9 +66967,9 @@ module Tables = struct }; } = _menhir_stack in let _4 : ( -# 1042 "reason_parser.mly" +# 1162 "reason_parser.mly" (string) -# 22601 "reason_parser.ml" +# 25560 "reason_parser.ml" ) = Obj.magic _4 in let _3 : 'tv_list_simple_expr_no_call_ = Obj.magic _3 in let _2 : unit = Obj.magic _2 in @@ -71591,7 +66980,7 @@ module Tables = struct let _v : 'tv_jsx_without_leading_less = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2504 "reason_parser.mly" +# 2690 "reason_parser.mly" ( let (component, start) = _1 in let loc = mklocation _symbolstartpos _endpos in @@ -71604,7 +66993,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22625 "reason_parser.ml" +# 25584 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71643,9 +67032,9 @@ module Tables = struct }; } = _menhir_stack in let _5 : ( -# 1042 "reason_parser.mly" +# 1162 "reason_parser.mly" (string) -# 22666 "reason_parser.ml" +# 25625 "reason_parser.ml" ) = Obj.magic _5 in let _4 : 'tv_simple_expr_no_call = Obj.magic _4 in let _3 : unit = Obj.magic _3 in @@ -71657,7 +67046,7 @@ module Tables = struct let _v : 'tv_jsx_without_leading_less = let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2516 "reason_parser.mly" +# 2702 "reason_parser.mly" ( let (component, start) = _1 in let loc = mklocation _symbolstartpos _endpos in @@ -71670,7 +67059,7 @@ module Tables = struct (Nolabel, mkexp_constructor_unit loc loc) ] loc ) -# 22691 "reason_parser.ml" +# 25650 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71694,9 +67083,9 @@ module Tables = struct }; } = _menhir_stack in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22717 "reason_parser.ml" +# 25676 "reason_parser.ml" ) = Obj.magic x0 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -71709,18 +67098,18 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 22732 "reason_parser.ml" +# 25691 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in let _startpos__3_ = _startpos_x0_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 22741 "reason_parser.ml" +# 25700 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -71734,11 +67123,11 @@ module Tables = struct else _startpos__3_ in -# 3588 "reason_parser.mly" +# 3878 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in - (Type.field _3 (mkct _3) ~mut:_2 ~loc, _1) + Type.field _3 (mkct _3) ~attrs:_1 ~mut:_2 ~loc ) -# 22759 "reason_parser.ml" +# 25718 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71767,9 +67156,9 @@ module Tables = struct }; } = _menhir_stack in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22790 "reason_parser.ml" +# 25749 "reason_parser.ml" ) = Obj.magic x0 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in @@ -71783,9 +67172,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 22806 "reason_parser.ml" +# 25765 "reason_parser.ml" in let _endpos__3_ = _endpos_x0_ in @@ -71795,15 +67184,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 22818 "reason_parser.ml" +# 25777 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 22824 "reason_parser.ml" +# 25783 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -71817,11 +67206,11 @@ module Tables = struct else _startpos__3_ in -# 3588 "reason_parser.mly" +# 3878 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in - (Type.field _3 (mkct _3) ~mut:_2 ~loc, _1) + Type.field _3 (mkct _3) ~attrs:_1 ~mut:_2 ~loc ) -# 22842 "reason_parser.ml" +# 25801 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71857,9 +67246,9 @@ module Tables = struct let _5 : 'tv_poly_type = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22880 "reason_parser.ml" +# 25839 "reason_parser.ml" ) = Obj.magic x0 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -71872,17 +67261,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 22895 "reason_parser.ml" +# 25854 "reason_parser.ml" in let _startpos__3_ = _startpos_x0_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 22903 "reason_parser.ml" +# 25862 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -71896,11 +67285,11 @@ module Tables = struct else _startpos__3_ in -# 3592 "reason_parser.mly" +# 3882 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in - (Type.field _3 _5 ~mut:_2 ~loc, _1) + Type.field _3 _5 ~attrs:_1 ~mut:_2 ~loc ) -# 22921 "reason_parser.ml" +# 25880 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -71941,9 +67330,9 @@ module Tables = struct let _5 : 'tv_poly_type = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 22964 "reason_parser.ml" +# 25923 "reason_parser.ml" ) = Obj.magic x0 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in @@ -71957,9 +67346,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 22980 "reason_parser.ml" +# 25939 "reason_parser.ml" in let _startpos__3_ = _startpos_x0_ in @@ -71968,15 +67357,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 22991 "reason_parser.ml" +# 25950 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 22997 "reason_parser.ml" +# 25956 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -71990,11 +67379,11 @@ module Tables = struct else _startpos__3_ in -# 3592 "reason_parser.mly" +# 3882 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in - (Type.field _3 _5 ~mut:_2 ~loc, _1) + Type.field _3 _5 ~attrs:_1 ~mut:_2 ~loc ) -# 23015 "reason_parser.ml" +# 25974 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72013,17 +67402,273 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 23036 "reason_parser.ml" +# 25995 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_label_longident = -# 4105 "reason_parser.mly" +# 4419 "reason_parser.mly" ( Lident _1 ) -# 23044 "reason_parser.ml" +# 26003 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 1131 "reason_parser.mly" + (string) +# 26034 "reason_parser.ml" + ) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_mod_longident = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_label_longident = +# 4420 "reason_parser.mly" + ( Ldot(_1, _3) ) +# 26044 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x0 : 'tv_simple_expr_direct_argument = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_x0_ in + let _v : 'tv_labeled_arguments = let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 26075 "reason_parser.ml" + + in + +# 3107 "reason_parser.mly" + ( [(Nolabel, _1)] ) +# 26081 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _300 : unit = Obj.magic _300 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _100 : unit = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_labeled_arguments = let _1 = + let _30 = _300 in + let _200 = _2000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _1 = _10 in + let x = + let _2 = _20 in + let _1 = + +# 4730 "reason_parser.mly" + ( [] ) +# 26129 "reason_parser.ml" + + in + +# 3103 "reason_parser.mly" + ( _1 ) +# 26135 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 26141 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 26147 "reason_parser.ml" + + in + let _endpos__1_ = _endpos__300_ in + let _startpos__1_ = _startpos__100_ in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 3109 "reason_parser.mly" + ( match _1 with + | [] -> let loc = mklocation _startpos _endpos in + [(Nolabel, mkexp_constructor_unit loc loc)] + | xs -> xs + ) +# 26161 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _300 : unit = Obj.magic _300 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_labeled_expr_ = Obj.magic _100000 in + let _100 : unit = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_labeled_arguments = let _1 = + let _30 = _300 in + let _200 = _2000 in + let _10000 = _100000 in + let _10 = _100 in + let _1 = + let _3 = _30 in + let _20 = _200 in + let _1000 = _10000 in + let _1 = _10 in + let x = + let _2 = _20 in + let _100 = _1000 in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 26221 "reason_parser.ml" + + in + +# 4731 "reason_parser.mly" + ( _1 ) +# 26227 "reason_parser.ml" + + in + +# 3103 "reason_parser.mly" + ( _1 ) +# 26233 "reason_parser.ml" + + in + +# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 26239 "reason_parser.ml" + + in + +# 4744 "reason_parser.mly" + ( _1 ) +# 26245 "reason_parser.ml" + + in + let _endpos__1_ = _endpos__300_ in + let _startpos__1_ = _startpos__100_ in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 3109 "reason_parser.mly" + ( match _1 with + | [] -> let loc = mklocation _startpos _endpos in + [(Nolabel, mkexp_constructor_unit loc loc)] + | xs -> xs + ) +# 26259 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72051,130 +67696,20 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : ( -# 1011 "reason_parser.mly" - (string) -# 23075 "reason_parser.ml" - ) = Obj.magic _3 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_mod_longident = Obj.magic _1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_label_longident = -# 4106 "reason_parser.mly" - ( Ldot(_1, _3) ) -# 23085 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x0 : 'tv_simple_expr_direct_argument = Obj.magic x0 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_labeled_arguments = let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 23116 "reason_parser.ml" - - in - -# 2888 "reason_parser.mly" - ( [(Nolabel, _1)] ) -# 23122 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs000; - MenhirLib.EngineTypes.startp = _startpos_xs000_; - MenhirLib.EngineTypes.endp = _endpos_xs000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let xs000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_expr__ = Obj.magic xs000 in - let _100 : unit = Obj.magic _100 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_labeled_arguments = let _1 = - let _30 = _300 in - let xs00 = xs000 in - let _10 = _100 in - let _1 = - let _3 = _30 in - let xs0 = xs00 in - let _1 = _10 in - let x = - let xs = xs0 in - -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 23169 "reason_parser.ml" - - in - -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 23175 "reason_parser.ml" - - in - -# 4429 "reason_parser.mly" - ( _1 ) -# 23181 "reason_parser.ml" - - in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in + let _v : 'tv_labeled_arguments = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2890 "reason_parser.mly" - ( match _1 with - | [] -> let loc = mklocation _startpos _endpos in - [(Nolabel, mkexp_constructor_unit loc loc)] - | xs -> xs +# 3115 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + [(Nolabel, mkexp_constructor_unit ~uncurried:true loc loc)] ) -# 23195 "reason_parser.ml" +# 26300 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72197,9 +67732,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_labeled_expr = -# 2911 "reason_parser.mly" +# 3145 "reason_parser.mly" ( (Nolabel, _1) ) -# 23220 "reason_parser.ml" +# 26325 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72234,18 +67769,18 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23257 "reason_parser.ml" +# 26362 "reason_parser.ml" in -# 2913 "reason_parser.mly" +# 3147 "reason_parser.mly" ( (* add(:a, :b) -> parses :a & :b *) let exp = mkexp (Pexp_ident _2) ~loc:_2.loc in (Labelled (String.concat "" (Longident.flatten _2.txt)), exp) ) -# 23266 "reason_parser.ml" +# 26371 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72286,18 +67821,18 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23309 "reason_parser.ml" +# 26414 "reason_parser.ml" in -# 2918 "reason_parser.mly" +# 3152 "reason_parser.mly" ( (* foo(:a?) -> parses :a? *) let exp = mkexp (Pexp_ident _2) ~loc:_2.loc in (Optional (String.concat "" (Longident.flatten _2.txt)), exp) ) -# 23318 "reason_parser.ml" +# 26423 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72350,17 +67885,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23373 "reason_parser.ml" +# 26478 "reason_parser.ml" in -# 2923 "reason_parser.mly" +# 3157 "reason_parser.mly" ( (* foo(:bar=?Some(1)) or add(:x=1, :y=2) -> parses :bar=?Some(1) & :x=1 & :y=1 *) (_4 (String.concat "" (Longident.flatten _2.txt)), _5 _2) ) -# 23381 "reason_parser.ml" +# 26486 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72391,9 +67926,9 @@ module Tables = struct let _3 : 'tv_labeled_expr_constraint = Obj.magic _3 in let _2 : 'tv_optional = Obj.magic _2 in let x0 : ( -# 994 "reason_parser.mly" +# 1114 "reason_parser.mly" (string) -# 23414 "reason_parser.ml" +# 26519 "reason_parser.ml" ) = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x0_ in @@ -72405,21 +67940,208 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23428 "reason_parser.ml" +# 26533 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in -# 2927 "reason_parser.mly" +# 3161 "reason_parser.mly" ( let loc = (mklocation _symbolstartpos _endpos) in (_2 _1.txt, _3 (mkloc (Longident.parse _1.txt) loc)) ) -# 23440 "reason_parser.ml" +# 26545 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let x1 : unit = Obj.magic x1 in + let _4 : 'tv_optional = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let x0 : 'tv_val_longident = Obj.magic x0 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_x1_ in + let _v : 'tv_labeled_expr = let _5 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 26600 "reason_parser.ml" + + in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 26612 "reason_parser.ml" + + in + +# 3166 "reason_parser.mly" + ( (* foo(~l =_) *) + let loc = _5.loc in + let exp = mkexp (Pexp_ident (mkloc (Lident "_") loc)) ~loc in + (_4 (String.concat "" (Longident.flatten _2.txt)), exp) + ) +# 26622 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let x1 : unit = Obj.magic x1 in + let _2 : 'tv_optional = Obj.magic _2 in + let x0 : ( +# 1114 "reason_parser.mly" + (string) +# 26655 "reason_parser.ml" + ) = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_x1_ in + let _v : 'tv_labeled_expr = let _3 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 26669 "reason_parser.ml" + + in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 26681 "reason_parser.ml" + + in + +# 3172 "reason_parser.mly" + ( (* foo(~l=_) *) + let loc = _3.loc in + let exp = mkexp (Pexp_ident (mkloc (Lident "_") loc)) ~loc in + (_2 _1.txt, exp) + ) +# 26691 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x0 : unit = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_x0_ in + let _v : 'tv_labeled_expr = let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 26722 "reason_parser.ml" + + in + +# 3178 "reason_parser.mly" + ( (* foo(_) *) + let loc = _1.loc in + let exp = mkexp (Pexp_ident (mkloc (Lident "_") loc)) ~loc in + (Nolabel, exp) + ) +# 26732 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72442,9 +68164,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_labeled_expr_constraint = -# 2898 "reason_parser.mly" +# 3121 "reason_parser.mly" ( fun _punned -> _1 ) -# 23465 "reason_parser.ml" +# 26757 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72462,22 +68184,21 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_option_type_constraint_ = Obj.magic _1 in + let _1 : 'tv_type_constraint = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_labeled_expr_constraint = let _endpos = _endpos__1_ in -# 2900 "reason_parser.mly" +# 3123 "reason_parser.mly" ( fun punned -> let exp = mkexp (Pexp_ident punned) ~loc:punned.loc in match _1 with - | None -> exp - | Some typ -> + | typ -> let loc = mklocation punned.loc.loc_start _endpos in ghexp_constraint loc exp typ ) -# 23498 "reason_parser.ml" +# 26789 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72507,9 +68228,9 @@ module Tables = struct } = _menhir_stack in let _300 : 'tv_labeled_pattern_constraint = Obj.magic _300 in let x000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 23530 "reason_parser.ml" +# 26821 "reason_parser.ml" ) = Obj.magic x000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -72536,15 +68257,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23559 "reason_parser.ml" +# 26850 "reason_parser.ml" in -# 2375 "reason_parser.mly" +# 2521 "reason_parser.mly" ( Term (Labelled _2.txt, None, _3 _2) ) -# 23565 "reason_parser.ml" +# 26856 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -72552,15 +68273,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23575 "reason_parser.ml" +# 26866 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23581 "reason_parser.ml" +# 26872 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72602,9 +68323,9 @@ module Tables = struct let _400 : unit = Obj.magic _400 in let _300 : 'tv_labeled_pattern_constraint = Obj.magic _300 in let x000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 23625 "reason_parser.ml" +# 26916 "reason_parser.ml" ) = Obj.magic x000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -72635,15 +68356,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23658 "reason_parser.ml" +# 26949 "reason_parser.ml" in -# 2377 "reason_parser.mly" +# 2523 "reason_parser.mly" ( Term (Optional _2.txt, Some _5, _3 _2) ) -# 23664 "reason_parser.ml" +# 26955 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -72651,15 +68372,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23674 "reason_parser.ml" +# 26965 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23680 "reason_parser.ml" +# 26971 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72701,9 +68422,9 @@ module Tables = struct let _400 : unit = Obj.magic _400 in let _300 : 'tv_labeled_pattern_constraint = Obj.magic _300 in let x000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 23724 "reason_parser.ml" +# 27015 "reason_parser.ml" ) = Obj.magic x000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -72734,15 +68455,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23757 "reason_parser.ml" +# 27048 "reason_parser.ml" in -# 2379 "reason_parser.mly" +# 2525 "reason_parser.mly" ( Term (Optional _2.txt, None, _3 _2) ) -# 23763 "reason_parser.ml" +# 27054 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -72750,15 +68471,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23773 "reason_parser.ml" +# 27064 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23779 "reason_parser.ml" +# 27070 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72783,9 +68504,9 @@ module Tables = struct } = _menhir_stack in let _200 : 'tv_expr = Obj.magic _200 in let x000 : ( -# 994 "reason_parser.mly" +# 1114 "reason_parser.mly" (string) -# 23806 "reason_parser.ml" +# 27097 "reason_parser.ml" ) = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -72809,19 +68530,19 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23832 "reason_parser.ml" +# 27123 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 2381 "reason_parser.mly" +# 2527 "reason_parser.mly" ( let loc = (mklocation _symbolstartpos _endpos) in Term (Optional _1.txt, Some _2, pat_of_label (mkloc (Longident.parse _1.txt) loc)) ) -# 23842 "reason_parser.ml" +# 27133 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -72829,15 +68550,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23852 "reason_parser.ml" +# 27143 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23858 "reason_parser.ml" +# 27149 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72862,9 +68583,9 @@ module Tables = struct } = _menhir_stack in let _200 : unit = Obj.magic _200 in let x000 : ( -# 994 "reason_parser.mly" +# 1114 "reason_parser.mly" (string) -# 23885 "reason_parser.ml" +# 27176 "reason_parser.ml" ) = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -72888,19 +68609,19 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23911 "reason_parser.ml" +# 27202 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 2384 "reason_parser.mly" +# 2530 "reason_parser.mly" ( let loc = (mklocation _symbolstartpos _endpos) in Term (Optional _1.txt, None, pat_of_label (mkloc (Longident.parse _1.txt) loc)) ) -# 23921 "reason_parser.ml" +# 27212 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -72908,15 +68629,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23931 "reason_parser.ml" +# 27222 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23937 "reason_parser.ml" +# 27228 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72945,9 +68666,9 @@ module Tables = struct let x = let _1 = _10 in -# 2387 "reason_parser.mly" +# 2533 "reason_parser.mly" ( Term (Nolabel, None, _1) ) -# 23968 "reason_parser.ml" +# 27259 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -72955,15 +68676,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 23978 "reason_parser.ml" +# 27269 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 23984 "reason_parser.ml" +# 27275 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -72987,9 +68708,9 @@ module Tables = struct }; } = _menhir_stack in let _200 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 24010 "reason_parser.ml" +# 27301 "reason_parser.ml" ) = Obj.magic _200 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -73004,9 +68725,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2389 "reason_parser.mly" +# 2535 "reason_parser.mly" ( Type _2 ) -# 24027 "reason_parser.ml" +# 27318 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -73014,15 +68735,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24037 "reason_parser.ml" +# 27328 "reason_parser.ml" in -# 2390 "reason_parser.mly" +# 2536 "reason_parser.mly" ( _1 ) -# 24043 "reason_parser.ml" +# 27334 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73051,9 +68772,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_labeled_pattern_constraint = -# 2360 "reason_parser.mly" +# 2506 "reason_parser.mly" ( fun _punned -> _2 ) -# 24074 "reason_parser.ml" +# 27365 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73077,7 +68798,7 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : 'tv_labeled_pattern_constraint = let _endpos = _endpos__1_ in -# 2362 "reason_parser.mly" +# 2508 "reason_parser.mly" ( fun punned -> let pat = mkpat (Ppat_var punned) ~loc:punned.loc in match _1 with @@ -73086,93 +68807,7 @@ module Tables = struct let loc = mklocation punned.loc.loc_start _endpos in mkpat ~loc (Ppat_constraint(pat, typ)) ) -# 24107 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : 'tv_expr = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let x0 : 'tv_label_longident = Obj.magic x0 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos__3_ in - let _v : 'tv_lbl_expr = let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24150 "reason_parser.ml" - - in - -# 3121 "reason_parser.mly" - ( (_1, _3) ) -# 24156 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x0 : 'tv_label_longident = Obj.magic x0 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_lbl_expr = let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24187 "reason_parser.ml" - - in - -# 3122 "reason_parser.mly" - ( (_1, exp_of_label _1) ) -# 24193 "reason_parser.ml" +# 27398 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73213,15 +68848,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24236 "reason_parser.ml" +# 27441 "reason_parser.ml" in -# 3394 "reason_parser.mly" +# 3678 "reason_parser.mly" ( (_1,_3) ) -# 24242 "reason_parser.ml" +# 27447 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73250,15 +68885,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24273 "reason_parser.ml" +# 27478 "reason_parser.ml" in -# 3395 "reason_parser.mly" +# 3679 "reason_parser.mly" ( (_1, pat_of_label _1) ) -# 24279 "reason_parser.ml" +# 27484 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73299,9 +68934,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24322 "reason_parser.ml" +# 27527 "reason_parser.ml" in let _1 = @@ -73311,18 +68946,18 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 24334 "reason_parser.ml" +# 27539 "reason_parser.ml" in -# 3397 "reason_parser.mly" +# 3681 "reason_parser.mly" ( (* punning with alias eg. {ReasonReact.state as prevState} * -> {ReasonReact.state: state as prevState} *) (_1, mkpat(Ppat_alias(pat_of_label _1, _3))) ) -# 24343 "reason_parser.ml" +# 27548 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73345,9 +68980,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_lbl_pattern_list = -# 3386 "reason_parser.mly" +# 3670 "reason_parser.mly" ( ([_1], Closed) ) -# 24368 "reason_parser.ml" +# 27573 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73376,9 +69011,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_lbl_pattern_list = -# 3387 "reason_parser.mly" +# 3671 "reason_parser.mly" ( ([_1], Closed) ) -# 24399 "reason_parser.ml" +# 27604 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73419,9 +69054,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_lbl_pattern_list = -# 3388 "reason_parser.mly" +# 3672 "reason_parser.mly" ( ([_1], Open) ) -# 24442 "reason_parser.ml" +# 27647 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73456,78 +69091,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_lbl_pattern_list = -# 3390 "reason_parser.mly" +# 3674 "reason_parser.mly" ( let (fields, closed) = _3 in _1 :: fields, closed ) -# 24479 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _5 : 'tv_let_binding_body = Obj.magic _5 in - let _4 : 'tv_rec_flag = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__3_ in - let _endpos = _endpos__5_ in - let _v : 'tv_let_binding = let _2 = - -# 4309 "reason_parser.mly" - ( [] ) -# 24517 "reason_parser.ml" - - in - let _endpos__2_ = _endpos__0_ in - let _startpos__2_ = _endpos__0_ in - let _1 = - -# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( None ) -# 24526 "reason_parser.ml" - - in - let _endpos__1_ = _endpos__0_ in - let _startpos__1_ = _endpos__0_ in - let _endpos = _endpos__5_ in - let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then - _startpos__1_ - else - if Pervasives.(!=) _startpos__2_ _endpos__2_ then - _startpos__2_ - else - _startpos__3_ in - -# 2948 "reason_parser.mly" - ( let (ext_attrs, ext_id) = match _1 with - | Some (ext_attrs, ext_id) -> (ext_attrs, Some ext_id) - | None -> ([], None) - in - let loc = mklocation _symbolstartpos _endpos in - mklbs (ext_attrs, ext_id) _4 (mklb _5 _2 loc) loc - ) -# 24548 "reason_parser.ml" +# 27684 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73552,9 +69118,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -73562,34 +69128,16 @@ module Tables = struct } = _menhir_stack in let _5 : 'tv_let_binding_body = Obj.magic _5 in let _4 : 'tv_rec_flag = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in + let _3 : 'tv_option_item_extension_sugar_ = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in + let _startpos = _startpos__2_ in let _endpos = _endpos__5_ in - let _v : 'tv_let_binding = let _2 = - let _10 = _100 in - let _1 = - let _1 = _10 in - -# 4305 "reason_parser.mly" - ( _1 ) -# 24595 "reason_parser.ml" - - in - -# 4310 "reason_parser.mly" - ( List.map (fun x -> x.txt) _1 ) -# 24601 "reason_parser.ml" + let _v : 'tv_let_binding = let _1 = - in - let _endpos__2_ = _endpos__100_ in - let _startpos__2_ = _startpos__100_ in - let _1 = - -# 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( None ) -# 24610 "reason_parser.ml" +# 4623 "reason_parser.mly" + ( [] ) +# 27728 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -73598,96 +69146,12 @@ module Tables = struct let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then _startpos__1_ else - if Pervasives.(!=) _startpos__2_ _endpos__2_ then - _startpos__2_ - else - _startpos__3_ in - -# 2948 "reason_parser.mly" - ( let (ext_attrs, ext_id) = match _1 with - | Some (ext_attrs, ext_id) -> (ext_attrs, Some ext_id) - | None -> ([], None) - in - let loc = mklocation _symbolstartpos _endpos in - mklbs (ext_attrs, ext_id) _4 (mklb _5 _2 loc) loc - ) -# 24632 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let _5 : 'tv_let_binding_body = Obj.magic _5 in - let _4 : 'tv_rec_flag = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let x0 : 'tv_item_extension_sugar = Obj.magic x0 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos__5_ in - let _v : 'tv_let_binding = let _2 = - -# 4309 "reason_parser.mly" - ( [] ) -# 24676 "reason_parser.ml" - - in - let _endpos__2_ = _endpos_x0_ in - let _startpos__2_ = _endpos_x0_ in - let _1 = - let x = x0 in - -# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( Some x ) -# 24686 "reason_parser.ml" - - in - let _endpos__1_ = _endpos_x0_ in - let _startpos__1_ = _startpos_x0_ in - let _endpos = _endpos__5_ in - let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then - _startpos__1_ - else - if Pervasives.(!=) _startpos__2_ _endpos__2_ then - _startpos__2_ - else - _startpos__3_ in + _startpos__2_ in -# 2948 "reason_parser.mly" - ( let (ext_attrs, ext_id) = match _1 with - | Some (ext_attrs, ext_id) -> (ext_attrs, Some ext_id) - | None -> ([], None) - in - let loc = mklocation _symbolstartpos _endpos in - mklbs (ext_attrs, ext_id) _4 (mklb _5 _2 loc) loc - ) -# 24708 "reason_parser.ml" +# 3200 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + mklbs _3 _4 (mklb _5 _1 loc) loc ) +# 27742 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73711,14 +69175,14 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__3_; MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -73727,58 +69191,40 @@ module Tables = struct } = _menhir_stack in let _5 : 'tv_let_binding_body = Obj.magic _5 in let _4 : 'tv_rec_flag = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in + let _3 : 'tv_option_item_extension_sugar_ = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in - let x0 : 'tv_item_extension_sugar = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in + let _startpos = _startpos__100_ in let _endpos = _endpos__5_ in - let _v : 'tv_let_binding = let _2 = + let _v : 'tv_let_binding = let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 24761 "reason_parser.ml" +# 27795 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 24767 "reason_parser.ml" - - in - let _endpos__2_ = _endpos__100_ in - let _startpos__2_ = _startpos__100_ in - let _1 = - let x = x0 in - -# 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( Some x ) -# 24777 "reason_parser.ml" +# 27801 "reason_parser.ml" in - let _endpos__1_ = _endpos_x0_ in - let _startpos__1_ = _startpos_x0_ in + let _endpos__1_ = _endpos__100_ in + let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__5_ in let _symbolstartpos = if Pervasives.(!=) _startpos__1_ _endpos__1_ then _startpos__1_ else - if Pervasives.(!=) _startpos__2_ _endpos__2_ then - _startpos__2_ - else - _startpos__3_ in + _startpos__2_ in -# 2948 "reason_parser.mly" - ( let (ext_attrs, ext_id) = match _1 with - | Some (ext_attrs, ext_id) -> (ext_attrs, Some ext_id) - | None -> ([], None) - in - let loc = mklocation _symbolstartpos _endpos in - mklbs (ext_attrs, ext_id) _4 (mklb _5 _2 loc) loc - ) -# 24799 "reason_parser.ml" +# 3200 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + mklbs _3 _4 (mklb _5 _1 loc) loc ) +# 27815 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73825,20 +69271,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4397 "reason_parser.mly" +# 4712 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkpat ~loc (Ppat_var (mkloc x loc)) ) -# 24849 "reason_parser.ml" +# 27865 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2959 "reason_parser.mly" +# 3206 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in (_1, ghexp_constraint loc _4 _2) ) -# 24859 "reason_parser.ml" +# 27875 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73873,16 +69319,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4397 "reason_parser.mly" +# 4712 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkpat ~loc (Ppat_var (mkloc x loc)) ) -# 24897 "reason_parser.ml" +# 27913 "reason_parser.ml" in -# 2962 "reason_parser.mly" +# 3209 "reason_parser.mly" ( (_1, _2) ) -# 24903 "reason_parser.ml" +# 27919 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -73947,9 +69393,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 24970 "reason_parser.ml" +# 27986 "reason_parser.ml" in let _endpos__7_ = _endpos_x1_ in @@ -73960,9 +69406,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 24983 "reason_parser.ml" +# 27999 "reason_parser.ml" in let _1 = @@ -73972,22 +69418,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4397 "reason_parser.mly" +# 4712 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkpat ~loc (Ppat_var (mkloc x loc)) ) -# 24996 "reason_parser.ml" +# 28012 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 2965 "reason_parser.mly" +# 3212 "reason_parser.mly" ( let typ = mktyp ~ghost:true (Ptyp_poly(_3, _5)) in let loc = mklocation _symbolstartpos _endpos in (mkpat ~ghost:true ~loc (Ppat_constraint(_1, typ)), _7) ) -# 25008 "reason_parser.ml" +# 28024 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74058,9 +69504,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 25081 "reason_parser.ml" +# 28097 "reason_parser.ml" in let _endpos__8_ = _endpos_x1_ in @@ -74071,9 +69517,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 25094 "reason_parser.ml" +# 28110 "reason_parser.ml" in let _1 = @@ -74083,22 +69529,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4397 "reason_parser.mly" +# 4712 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkpat ~loc (Ppat_var (mkloc x loc)) ) -# 25107 "reason_parser.ml" +# 28123 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 3018 "reason_parser.mly" +# 3265 "reason_parser.mly" ( let exp, poly = wrap_type_annotation _4 _6 _8 in let loc = mklocation _symbolstartpos _endpos in (mkpat ~ghost:true ~loc (Ppat_constraint(_1, poly)), exp) ) -# 25119 "reason_parser.ml" +# 28135 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74133,9 +69579,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_let_binding_body = -# 3034 "reason_parser.mly" +# 3281 "reason_parser.mly" ( (_1, _3) ) -# 25156 "reason_parser.ml" +# 28172 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74188,19 +69634,19 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 25211 "reason_parser.ml" +# 28227 "reason_parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 3036 "reason_parser.mly" +# 3283 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in (mkpat ~loc (Ppat_constraint(_1, _3)), _5) ) -# 25221 "reason_parser.ml" +# 28237 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74229,9 +69675,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_let_bindings = -# 2943 "reason_parser.mly" +# 3195 "reason_parser.mly" ( addlbs _1 _2 ) -# 25252 "reason_parser.ml" +# 28268 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74249,7 +69695,7 @@ module Tables = struct let _v : 'tv_list_and_class_declaration_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25270 "reason_parser.ml" +# 28286 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74280,7 +69726,7 @@ module Tables = struct let _v : 'tv_list_and_class_declaration_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25301 "reason_parser.ml" +# 28317 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74298,7 +69744,7 @@ module Tables = struct let _v : 'tv_list_and_class_description_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25319 "reason_parser.ml" +# 28335 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74329,7 +69775,7 @@ module Tables = struct let _v : 'tv_list_and_class_description_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25350 "reason_parser.ml" +# 28366 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74347,7 +69793,7 @@ module Tables = struct let _v : 'tv_list_and_class_type_declaration_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25368 "reason_parser.ml" +# 28384 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74378,7 +69824,7 @@ module Tables = struct let _v : 'tv_list_and_class_type_declaration_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25399 "reason_parser.ml" +# 28415 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74396,7 +69842,7 @@ module Tables = struct let _v : 'tv_list_and_let_binding_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25417 "reason_parser.ml" +# 28433 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74437,9 +69883,9 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 25460 "reason_parser.ml" +# 28476 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -74450,15 +69896,15 @@ module Tables = struct else _startpos__2_ in -# 2940 "reason_parser.mly" +# 3192 "reason_parser.mly" ( mklb _3 _1 (mklocation _symbolstartpos _endpos) ) -# 25473 "reason_parser.ml" +# 28489 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25479 "reason_parser.ml" +# 28495 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74511,15 +69957,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 25534 "reason_parser.ml" +# 28550 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 25540 "reason_parser.ml" +# 28556 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -74530,15 +69976,15 @@ module Tables = struct else _startpos__2_ in -# 2940 "reason_parser.mly" +# 3192 "reason_parser.mly" ( mklb _3 _1 (mklocation _symbolstartpos _endpos) ) -# 25553 "reason_parser.ml" +# 28569 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25559 "reason_parser.ml" +# 28575 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74556,7 +70002,7 @@ module Tables = struct let _v : 'tv_list_and_module_bindings_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25577 "reason_parser.ml" +# 28593 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74587,7 +70033,7 @@ module Tables = struct let _v : 'tv_list_and_module_bindings_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25608 "reason_parser.ml" +# 28624 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74605,7 +70051,7 @@ module Tables = struct let _v : 'tv_list_and_module_rec_declaration_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25626 "reason_parser.ml" +# 28642 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74636,7 +70082,7 @@ module Tables = struct let _v : 'tv_list_and_module_rec_declaration_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25657 "reason_parser.ml" +# 28673 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74654,7 +70100,7 @@ module Tables = struct let _v : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25675 "reason_parser.ml" +# 28691 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74670,9 +70116,9 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _20; @@ -74683,31 +70129,38 @@ module Tables = struct }; } = _menhir_stack in let xs : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__20_ in let _endpos = _endpos_xs_ in let _v : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in + let _4 = _40 in let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 28732 "reason_parser.ml" + + in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 25716 "reason_parser.ml" +# 28739 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 25722 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 28745 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25728 "reason_parser.ml" +# 28751 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74723,9 +70176,85 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let xs : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__20_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _100 = _1000 in + let _2 = _20 in + let _3 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 28802 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 28808 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 28815 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 28821 "reason_parser.ml" + + in + +# 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 28827 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _20; MenhirLib.EngineTypes.startp = _startpos__20_; @@ -74741,42 +70270,141 @@ module Tables = struct }; } = _menhir_stack in let xs : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in let _endpos = _endpos_xs_ in let _v : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in + let _4 = _40 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 28875 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 28885 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 28891 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 28897 "reason_parser.ml" + + in + +# 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 28903 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1000_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _101 = _1010 in let _2 = _20 in let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 28961 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 28967 "reason_parser.ml" + + in let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 25779 "reason_parser.ml" +# 28977 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 25785 "reason_parser.ml" +# 28983 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 25791 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 28989 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25797 "reason_parser.ml" +# 28995 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74794,7 +70422,7 @@ module Tables = struct let _v : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25815 "reason_parser.ml" +# 29013 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74810,9 +70438,9 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _20; @@ -74823,31 +70451,38 @@ module Tables = struct }; } = _menhir_stack in let xs : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__20_ in let _endpos = _endpos_xs_ in let _v : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in + let _4 = _40 in let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 29054 "reason_parser.ml" + + in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 25856 "reason_parser.ml" +# 29061 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 25862 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 29067 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25868 "reason_parser.ml" +# 29073 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74863,9 +70498,85 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let xs : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__20_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in + let _100 = _1000 in + let _2 = _20 in + let _3 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 29124 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 29130 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 29137 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 29143 "reason_parser.ml" + + in + +# 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 29149 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _20; MenhirLib.EngineTypes.startp = _startpos__20_; @@ -74881,42 +70592,141 @@ module Tables = struct }; } = _menhir_stack in let xs : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in let _endpos = _endpos_xs_ in let _v : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in + let _4 = _40 in let _2 = _20 in let _100 = _1000 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 29197 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 29207 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 29213 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 29219 "reason_parser.ml" + + in + +# 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 29225 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1000_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in + let _101 = _1010 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 29283 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 29289 "reason_parser.ml" + + in let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 25919 "reason_parser.ml" +# 29299 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 25925 "reason_parser.ml" +# 29305 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 25931 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 29311 "reason_parser.ml" in # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25937 "reason_parser.ml" +# 29317 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74934,7 +70744,7 @@ module Tables = struct let _v : 'tv_list_bar_row_field_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 25955 "reason_parser.ml" +# 29335 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74965,7 +70775,7 @@ module Tables = struct let _v : 'tv_list_bar_row_field_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 25986 "reason_parser.ml" +# 29366 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -74983,7 +70793,7 @@ module Tables = struct let _v : 'tv_list_simple_expr_no_call_ = # 185 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26004 "reason_parser.ml" +# 29384 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75014,7 +70824,7 @@ module Tables = struct let _v : 'tv_list_simple_expr_no_call_ = # 187 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 26035 "reason_parser.ml" +# 29415 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75030,9 +70840,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_llist_aux_match_case_expr__ = -# 4410 "reason_parser.mly" +# 4725 "reason_parser.mly" ( [] ) -# 26053 "reason_parser.ml" +# 29433 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75061,9 +70871,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_llist_aux_match_case_expr__ = -# 4411 "reason_parser.mly" +# 4726 "reason_parser.mly" ( _2 :: _1 ) -# 26084 "reason_parser.ml" +# 29464 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75078,10 +70888,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = -# 4410 "reason_parser.mly" + let _v : 'tv_llist_aux_match_case_seq_expr__ = +# 4725 "reason_parser.mly" ( [] ) -# 26102 "reason_parser.ml" +# 29482 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75104,15 +70914,15 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_match_case_semi_terminated_seq_expr_ = Obj.magic _2 in - let _1 : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = Obj.magic _1 in + let _2 : 'tv_match_case_seq_expr_ = Obj.magic _2 in + let _1 : 'tv_llist_aux_match_case_seq_expr__ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = -# 4411 "reason_parser.mly" + let _v : 'tv_llist_aux_match_case_seq_expr__ = +# 4726 "reason_parser.mly" ( _2 :: _1 ) -# 26133 "reason_parser.ml" +# 29513 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75128,9 +70938,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = -# 4410 "reason_parser.mly" +# 4725 "reason_parser.mly" ( [] ) -# 26151 "reason_parser.ml" +# 29531 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75142,59 +70952,93 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x0000; + MenhirLib.EngineTypes.startp = _startpos_x0000_; + MenhirLib.EngineTypes.endp = _endpos_x0000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let x0 : 'tv_lbl_expr = Obj.magic x0 in + let _3000 : 'tv_expr = Obj.magic _3000 in + let _2000 : unit = Obj.magic _2000 in + let x0000 : 'tv_label_longident = Obj.magic x0000 in let _10 : unit = Obj.magic _10 in let _1 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x0_ in + let _endpos = _endpos__3000_ in let _v : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = let _2 = - let x = x0 in + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let _300 = _3000 in + let _200 = _2000 in + let x000 = x0000 in let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 29605 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 29611 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 29617 "reason_parser.ml" + + in # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26191 "reason_parser.ml" +# 29623 "reason_parser.ml" in -# 4411 "reason_parser.mly" +# 4726 "reason_parser.mly" ( _2 :: _1 ) -# 26197 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_llist_aux_preceded_COMMA_string_literal_expr__ = -# 4410 "reason_parser.mly" - ( [] ) -# 26215 "reason_parser.ml" +# 29629 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75206,9 +71050,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = x0000; + MenhirLib.EngineTypes.startp = _startpos_x0000_; + MenhirLib.EngineTypes.endp = _endpos_x0000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _10; MenhirLib.EngineTypes.startp = _startpos__10_; @@ -75222,25 +71066,59 @@ module Tables = struct }; }; } = _menhir_stack in - let x0 : 'tv_string_literal_expr = Obj.magic x0 in + let x0000 : 'tv_label_longident = Obj.magic x0000 in let _10 : unit = Obj.magic _10 in - let _1 : 'tv_llist_aux_preceded_COMMA_string_literal_expr__ = Obj.magic _1 in + let _1 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_llist_aux_preceded_COMMA_string_literal_expr__ = let _2 = - let x = x0 in + let _endpos = _endpos_x0000_ in + let _v : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = let _2 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let x000 = x0000 in let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 29685 "reason_parser.ml" + + in + +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 29691 "reason_parser.ml" + + in + +# 3383 "reason_parser.mly" + (_1) +# 29697 "reason_parser.ml" + + in # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26255 "reason_parser.ml" +# 29703 "reason_parser.ml" in -# 4411 "reason_parser.mly" +# 4726 "reason_parser.mly" ( _2 :: _1 ) -# 26261 "reason_parser.ml" +# 29709 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75258,7 +71136,7 @@ module Tables = struct let _v : 'tv_loption_class_type_parameters_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26279 "reason_parser.ml" +# 29727 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75274,66 +71152,84 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__3000_; MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _100000; + MenhirLib.EngineTypes.startp = _startpos__100000_; + MenhirLib.EngineTypes.endp = _endpos__100000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _3000 : unit = Obj.magic _3000 in - let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _10000 in - let _1100 : unit = Obj.magic _1100 in + let _20000 : 'tv_option_COMMA_ = Obj.magic _20000 in + let _100000 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _100000 in + let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1100_ in + let _startpos = _startpos__1000_ in let _endpos = _endpos__3000_ in let _v : 'tv_loption_class_type_parameters_ = let x = let _300 = _3000 in - let _1000 = _10000 in - let _110 = _1100 in + let _2000 = _20000 in + let _10000 = _100000 in + let _100 = _1000 in let _1 = let _30 = _300 in - let _100 = _1000 in - let _11 = _110 in + let _200 = _2000 in + let _1000 = _10000 in + let _10 = _100 in let _1 = let _3 = _30 in - let _10 = _100 in - let _1 = _11 in + let _20 = _200 in + let _100 = _1000 in + let _1 = _10 in let x = - let _1 = _10 in - -# 4419 "reason_parser.mly" + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 26330 "reason_parser.ml" +# 29790 "reason_parser.ml" + + in + +# 2321 "reason_parser.mly" + (_1) +# 29796 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26336 "reason_parser.ml" +# 29802 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 26342 "reason_parser.ml" +# 29808 "reason_parser.ml" in -# 2179 "reason_parser.mly" +# 2325 "reason_parser.mly" ( _1 ) -# 26348 "reason_parser.ml" +# 29814 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26354 "reason_parser.ml" +# 29820 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75351,7 +71247,7 @@ module Tables = struct let _v : 'tv_loption_functor_parameters_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26372 "reason_parser.ml" +# 29838 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75376,7 +71272,7 @@ module Tables = struct let _v : 'tv_loption_functor_parameters_ = # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26397 "reason_parser.ml" +# 29863 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75394,7 +71290,7 @@ module Tables = struct let _v : 'tv_loption_label_declarations_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26415 "reason_parser.ml" +# 29881 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75428,125 +71324,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 26451 "reason_parser.ml" +# 29917 "reason_parser.ml" in -# 3975 "reason_parser.mly" +# 4289 "reason_parser.mly" ( _1 ) -# 26457 "reason_parser.ml" - - in - -# 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 26463 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_loption_labeled_pattern_list_ = -# 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [] ) -# 26481 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs0000; - MenhirLib.EngineTypes.startp = _startpos_xs0000_; - MenhirLib.EngineTypes.endp = _endpos_xs0000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3000 : unit = Obj.magic _3000 in - let xs0000 : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = Obj.magic xs0000 in - let _1000 : unit = Obj.magic _1000 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1000_ in - let _endpos = _endpos__3000_ in - let _v : 'tv_loption_labeled_pattern_list_ = let x = - let _endpos__300_ = _endpos__3000_ in - let _startpos__100_ = _startpos__1000_ in - let _300 = _3000 in - let xs000 = xs0000 in - let _100 = _1000 in - let _1 = - let _30 = _300 in - let xs00 = xs000 in - let _10 = _100 in - let _1 = - let _3 = _30 in - let xs0 = xs00 in - let _1 = _10 in - let x = - let xs = xs0 in - -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 26534 "reason_parser.ml" - - in - -# 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 26540 "reason_parser.ml" - - in - -# 4429 "reason_parser.mly" - ( _1 ) -# 26546 "reason_parser.ml" - - in - let _endpos__1_ = _endpos__300_ in - let _startpos__1_ = _startpos__100_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - -# 2395 "reason_parser.mly" - ( match _1 with - | [] -> - let loc = mklocation _startpos _endpos in - [mkloc (Term (Nolabel, None, mkpat_constructor_unit loc loc)) loc] - | pats -> pats - ) -# 26561 "reason_parser.ml" +# 29923 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26567 "reason_parser.ml" +# 29929 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75564,7 +71356,7 @@ module Tables = struct let _v : 'tv_loption_located_attributes_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26585 "reason_parser.ml" +# 29947 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75589,15 +71381,15 @@ module Tables = struct let _v : 'tv_loption_located_attributes_ = let x = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 26612 "reason_parser.ml" +# 29974 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26618 "reason_parser.ml" +# 29980 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75612,10 +71404,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_only_core_type_core_type____ = + let _v : 'tv_loption_parenthesized_class_type_arguments_comma_list__ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26636 "reason_parser.ml" +# 29998 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75644,12 +71436,12 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = Obj.magic x00 in + let x00 : 'tv_class_type_arguments_comma_list = Obj.magic x00 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in - let _v : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_only_core_type_core_type____ = let x = + let _v : 'tv_loption_parenthesized_class_type_arguments_comma_list__ = let x = let _30 = _300 in let x0 = x00 in let _10 = _100 in @@ -75660,19 +71452,19 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26681 "reason_parser.ml" +# 30043 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 26687 "reason_parser.ml" +# 30049 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26693 "reason_parser.ml" +# 30055 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75687,10 +71479,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = + let _v : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26711 "reason_parser.ml" +# 30073 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75719,12 +71511,12 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_type_variable_with_variance_ = Obj.magic x00 in + let x00 : 'tv_type_variables_with_variance_comma_list = Obj.magic x00 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in - let _v : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = let x = + let _v : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = let x = let _30 = _300 in let x0 = x00 in let _10 = _100 in @@ -75735,19 +71527,19 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26756 "reason_parser.ml" +# 30118 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 26762 "reason_parser.ml" +# 30124 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26768 "reason_parser.ml" +# 30130 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75765,7 +71557,7 @@ module Tables = struct let _v : 'tv_loption_preceded_GREATER_nonempty_list_name_tag___ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26786 "reason_parser.ml" +# 30148 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75799,13 +71591,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26820 "reason_parser.ml" +# 30182 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26826 "reason_parser.ml" +# 30188 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75823,7 +71615,7 @@ module Tables = struct let _v : 'tv_loption_preceded_WITH_separated_nonempty_list_AND_package_type_cstr___ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26844 "reason_parser.ml" +# 30206 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75857,13 +71649,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26878 "reason_parser.ml" +# 30240 "reason_parser.ml" in # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26884 "reason_parser.ml" +# 30246 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75881,7 +71673,7 @@ module Tables = struct let _v : 'tv_loption_row_field_list_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26902 "reason_parser.ml" +# 30264 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75906,7 +71698,7 @@ module Tables = struct let _v : 'tv_loption_row_field_list_ = # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26927 "reason_parser.ml" +# 30289 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75921,10 +71713,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_loption_separated_nonempty_list_COMMA_labeled_expr__ = + let _v : 'tv_loption_terminated_pattern_comma_list_option_COMMA___ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26945 "reason_parser.ml" +# 30307 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75936,20 +71728,51 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_separated_nonempty_list_COMMA_labeled_expr_ = Obj.magic x in + let _20 : 'tv_option_COMMA_ = Obj.magic _20 in + let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_separated_nonempty_list_COMMA_labeled_expr__ = + let _startpos = _startpos__1000_ in + let _endpos = _endpos__20_ in + let _v : 'tv_loption_terminated_pattern_comma_list_option_COMMA___ = let x = + let _2 = _20 in + let _100 = _1000 in + let x = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 30345 "reason_parser.ml" + + in + +# 3661 "reason_parser.mly" + ( _1 ) +# 30351 "reason_parser.ml" + + in + +# 165 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 30357 "reason_parser.ml" + + in + # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 26970 "reason_parser.ml" +# 30363 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75964,10 +71787,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = + let _v : 'tv_loption_type_parameters_ = # 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [] ) -# 26988 "reason_parser.ml" +# 30381 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -75985,14 +71808,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_separated_nonempty_list_COMMA_labeled_pattern_ = Obj.magic x in + let x : 'tv_type_parameters = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_loption_separated_nonempty_list_COMMA_labeled_pattern__ = + let _v : 'tv_loption_type_parameters_ = # 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 27013 "reason_parser.ml" +# 30406 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76003,14 +71826,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_with_constraint = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_loption_separated_nonempty_list_COMMA_module_complex_expr__ = -# 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [] ) -# 27031 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = +# 4737 "reason_parser.mly" + ( [_1] ) +# 30431 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76022,20 +71852,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : 'tv_separated_nonempty_list_COMMA_module_complex_expr_ = Obj.magic x in + let _3 : 'tv_with_constraint = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_separated_nonempty_list_COMMA_module_complex_expr__ = -# 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 27056 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = +# 4738 "reason_parser.mly" + ( _3 :: _1 ) +# 30468 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76046,14 +71888,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_expr_optional_constraint = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_loption_terminated_pattern_comma_list_option_SEMI___ = -# 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [] ) -# 27074 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = +# 4737 "reason_parser.mly" + ( [_1] ) +# 30493 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76065,51 +71914,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _20 : 'tv_option_SEMI_ = Obj.magic _20 in - let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _1000 in + let _3 : 'tv_expr_optional_constraint = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1000_ in - let _endpos = _endpos__20_ in - let _v : 'tv_loption_terminated_pattern_comma_list_option_SEMI___ = let x = - let _2 = _20 in - let _100 = _1000 in - let x = - let _10 = _100 in - let _1 = - let _1 = _10 in - -# 4419 "reason_parser.mly" - ( List.rev _1 ) -# 27112 "reason_parser.ml" - - in - -# 3377 "reason_parser.mly" - ( _1 ) -# 27118 "reason_parser.ml" - - in - -# 165 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 27124 "reason_parser.ml" - - in - -# 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 27130 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = +# 4738 "reason_parser.mly" + ( _3 :: _1 ) +# 30530 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76120,14 +71950,58 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_field_expr = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : 'tv_loption_type_parameters_ = -# 128 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [] ) -# 27148 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = +# 4737 "reason_parser.mly" + ( [_1] ) +# 30555 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_field_expr = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = +# 4738 "reason_parser.mly" + ( _3 :: _1 ) +# 30592 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76140,19 +72014,56 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_type_parameters = Obj.magic x in + let _1 : 'tv_label_declaration = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_type_parameters_ = -# 130 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 27173 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = +# 4737 "reason_parser.mly" + ( [_1] ) +# 30617 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_label_declaration = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = +# 4738 "reason_parser.mly" + ( _3 :: _1 ) +# 30654 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76170,14 +72081,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_with_constraint = Obj.magic _1 in + let _1 : 'tv_labeled_pattern = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27198 "reason_parser.ml" +# 30679 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76205,16 +72116,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_with_constraint = Obj.magic _3 in + let _3 : 'tv_labeled_pattern = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_AND_with_constraint_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_labeled_pattern_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27235 "reason_parser.ml" +# 30716 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76227,31 +72138,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x0 : 'tv_arrow_type_parameter = Obj.magic x0 in + let _1 : 'tv_mod_ext_longident = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_as_loc_arrow_type_parameter__ = let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 27266 "reason_parser.ml" - - in - -# 4422 "reason_parser.mly" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27272 "reason_parser.ml" +# 30741 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76263,9 +72162,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; @@ -76279,28 +72178,16 @@ module Tables = struct }; }; } = _menhir_stack in - let x0 : 'tv_arrow_type_parameter = Obj.magic x0 in + let _3 : 'tv_mod_ext_longident = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_as_loc_arrow_type_parameter__ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_as_loc_arrow_type_parameter__ = let _3 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 27315 "reason_parser.ml" - - in - -# 4423 "reason_parser.mly" + let _endpos = _endpos__3_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27321 "reason_parser.ml" +# 30778 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76318,14 +72205,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_expr_optional_constraint = Obj.magic _1 in + let _1 : 'tv_module_complex_expr = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_complex_expr_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27346 "reason_parser.ml" +# 30803 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76353,16 +72240,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_expr_optional_constraint = Obj.magic _3 in + let _3 : 'tv_module_complex_expr = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_module_complex_expr_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_complex_expr_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27383 "reason_parser.ml" +# 30840 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76380,14 +72267,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_field_expr = Obj.magic _1 in + let _1 : 'tv_module_parameter = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27408 "reason_parser.ml" +# 30865 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76415,16 +72302,102 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_field_expr = Obj.magic _3 in + let _3 : 'tv_module_parameter = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_field_expr_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = +# 4738 "reason_parser.mly" + ( _3 :: _1 ) +# 30902 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _10 : 'tv_core_type = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__10_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = let _1 = + let _endpos__1_ = _endpos__10_ in + let _startpos__1_ = _startpos__10_ in + let _1 = _10 in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + +# 4652 "reason_parser.mly" + ( only_core_type _1 _symbolstartpos _endpos ) +# 30933 "reason_parser.ml" + + in + +# 4737 "reason_parser.mly" + ( [_1] ) +# 30939 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _10 : 'tv_core_type = Obj.magic _10 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__10_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = let _3 = + let _endpos__1_ = _endpos__10_ in + let _startpos__1_ = _startpos__10_ in + let _1 = _10 in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + +# 4652 "reason_parser.mly" + ( only_core_type _1 _symbolstartpos _endpos ) +# 30982 "reason_parser.ml" + + in + +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27445 "reason_parser.ml" +# 30988 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76442,14 +72415,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_label_declaration = Obj.magic _1 in + let _1 : 'tv_pattern = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27470 "reason_parser.ml" +# 31013 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76477,16 +72450,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_label_declaration = Obj.magic _3 in + let _3 : 'tv_pattern = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_label_declaration_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27507 "reason_parser.ml" +# 31050 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76504,14 +72477,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_lbl_expr = Obj.magic _1 in + let _1 : 'tv_pattern_optional_constraint = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_lbl_expr_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27532 "reason_parser.ml" +# 31075 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76539,16 +72512,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_lbl_expr = Obj.magic _3 in + let _3 : 'tv_pattern_optional_constraint = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_lbl_expr_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_lbl_expr_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27569 "reason_parser.ml" +# 31112 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76566,14 +72539,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_mod_ext_longident = Obj.magic _1 in + let _1 : 'tv_string_literal_expr_maybe_punned = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_expr_maybe_punned_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27594 "reason_parser.ml" +# 31137 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76601,16 +72574,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_mod_ext_longident = Obj.magic _3 in + let _3 : 'tv_string_literal_expr_maybe_punned = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_expr_maybe_punned_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_expr_maybe_punned_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27631 "reason_parser.ml" +# 31174 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76628,14 +72601,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_module_parameter = Obj.magic _1 in + let _1 : 'tv_string_literal_lbl = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27656 "reason_parser.ml" +# 31199 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76663,16 +72636,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_module_parameter = Obj.magic _3 in + let _3 : 'tv_string_literal_lbl = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_module_parameter_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27693 "reason_parser.ml" +# 31236 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76690,14 +72663,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_pattern = Obj.magic _1 in + let _1 : 'tv_type_parameter = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27718 "reason_parser.ml" +# 31261 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76725,16 +72698,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_pattern = Obj.magic _3 in + let _3 : 'tv_type_parameter = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27755 "reason_parser.ml" +# 31298 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76752,14 +72725,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_pattern_optional_constraint = Obj.magic _1 in + let _1 : 'tv_type_variable_with_variance = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = -# 4422 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_variable_with_variance_ = +# 4737 "reason_parser.mly" ( [_1] ) -# 27780 "reason_parser.ml" +# 31323 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76787,16 +72760,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_pattern_optional_constraint = Obj.magic _3 in + let _3 : 'tv_type_variable_with_variance = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_type_variable_with_variance_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = -# 4423 "reason_parser.mly" + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_variable_with_variance_ = +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27817 "reason_parser.ml" +# 31360 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76808,20 +72781,54 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_string_literal_lbl = Obj.magic _1 in + let x00 : 'tv_arrow_type_parameter = Obj.magic x00 in + let _10 : 'tv_option_DOT_ = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = -# 4422 "reason_parser.mly" + let _startpos = _startpos__10_ in + let _endpos = _endpos_x00_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_arrow_type_parameter_ = let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = _10 in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 31402 "reason_parser.ml" + + in + +# 4166 "reason_parser.mly" + ( let uncurried = match _1 with | Some _ -> true | None -> false in + match _2.txt with + | (Labelled _, _) when uncurried -> + raise Syntax_util.(Error(_2.loc, (Syntax_error "An uncurried function type with labelled arguments is not supported at the moment."))) + | _ -> (_2, uncurried) + ) +# 31413 "reason_parser.ml" + + in + +# 4737 "reason_parser.mly" ( [_1] ) -# 27842 "reason_parser.ml" +# 31419 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76833,32 +72840,66 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : 'tv_string_literal_lbl = Obj.magic _3 in + let x00 : 'tv_arrow_type_parameter = Obj.magic x00 in + let _10 : 'tv_option_DOT_ = Obj.magic _10 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_arrow_type_parameter_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_lbl_ = -# 4423 "reason_parser.mly" + let _endpos = _endpos_x00_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_arrow_type_parameter_ = let _3 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = _10 in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 31473 "reason_parser.ml" + + in + +# 4166 "reason_parser.mly" + ( let uncurried = match _1 with | Some _ -> true | None -> false in + match _2.txt with + | (Labelled _, _) when uncurried -> + raise Syntax_util.(Error(_2.loc, (Syntax_error "An uncurried function type with labelled arguments is not supported at the moment."))) + | _ -> (_2, uncurried) + ) +# 31484 "reason_parser.ml" + + in + +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27879 "reason_parser.ml" +# 31490 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76870,20 +72911,47 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_type_parameter = Obj.magic _1 in + let _20 : 'tv_labeled_expr = Obj.magic _20 in + let _10 : 'tv_option_DOT_ = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = -# 4422 "reason_parser.mly" + let _startpos = _startpos__10_ in + let _endpos = _endpos__20_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_labeled_expr_ = let _1 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 3133 "reason_parser.mly" + ( + let uncurried = match _1 with | Some _ -> true | None _ -> false in + if uncurried then + let (lbl, argExpr) = _2 in + let loc = mklocation _startpos _endpos in + let up = uncurry_payload ~name:"uncurry" loc in + (lbl, {argExpr with pexp_attributes = up::argExpr.pexp_attributes}) + else _2 + ) +# 31536 "reason_parser.ml" + + in + +# 4737 "reason_parser.mly" ( [_1] ) -# 27904 "reason_parser.ml" +# 31542 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76895,32 +72963,59 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : 'tv_type_parameter = Obj.magic _3 in + let _20 : 'tv_labeled_expr = Obj.magic _20 in + let _10 : 'tv_option_DOT_ = Obj.magic _10 in let _2 : unit = Obj.magic _2 in - let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = Obj.magic _1 in + let _1 : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_labeled_expr_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_lseparated_nonempty_list_aux_COMMA_type_parameter_ = -# 4423 "reason_parser.mly" + let _endpos = _endpos__20_ in + let _v : 'tv_lseparated_nonempty_list_aux_COMMA_uncurried_labeled_expr_ = let _3 = + let _endpos__2_ = _endpos__20_ in + let _startpos__1_ = _startpos__10_ in + let _2 = _20 in + let _1 = _10 in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 3133 "reason_parser.mly" + ( + let uncurried = match _1 with | Some _ -> true | None _ -> false in + if uncurried then + let (lbl, argExpr) = _2 in + let loc = mklocation _startpos _endpos in + let up = uncurry_payload ~name:"uncurry" loc in + (lbl, {argExpr with pexp_attributes = up::argExpr.pexp_attributes}) + else _2 + ) +# 31600 "reason_parser.ml" + + in + +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 27941 "reason_parser.ml" +# 31606 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76943,9 +73038,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_lseparated_nonempty_list_aux_SEMI_class_field_ = -# 4422 "reason_parser.mly" +# 4737 "reason_parser.mly" ( [_1] ) -# 27966 "reason_parser.ml" +# 31631 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -76980,9 +73075,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_lseparated_nonempty_list_aux_SEMI_class_field_ = -# 4423 "reason_parser.mly" +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 28003 "reason_parser.ml" +# 31668 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77005,9 +73100,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_lseparated_nonempty_list_aux_SEMI_class_sig_field_ = -# 4422 "reason_parser.mly" +# 4737 "reason_parser.mly" ( [_1] ) -# 28028 "reason_parser.ml" +# 31693 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77042,9 +73137,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_lseparated_nonempty_list_aux_SEMI_class_sig_field_ = -# 4423 "reason_parser.mly" +# 4738 "reason_parser.mly" ( _3 :: _1 ) -# 28065 "reason_parser.ml" +# 31730 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77091,9 +73186,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_match_case_expr_ = -# 3056 "reason_parser.mly" +# 3303 "reason_parser.mly" ( Exp.case _2 ?guard:_3 _5 ) -# 28114 "reason_parser.ml" +# 31779 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77131,7 +73226,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _5 : 'tv_semi_terminated_seq_expr = Obj.magic _5 in + let _5 : 'tv_seq_expr = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let _3 : 'tv_option_preceded_WHEN_expr__ = Obj.magic _3 in let _2 : 'tv_pattern = Obj.magic _2 in @@ -77139,10 +73234,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : 'tv_match_case_semi_terminated_seq_expr_ = -# 3056 "reason_parser.mly" + let _v : 'tv_match_case_seq_expr_ = +# 3303 "reason_parser.mly" ( Exp.case _2 ?guard:_3 _5 ) -# 28163 "reason_parser.ml" +# 31828 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77183,9 +73278,9 @@ module Tables = struct let _5 : 'tv_poly_type = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 28206 "reason_parser.ml" +# 31871 "reason_parser.ml" ) = Obj.magic _100 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_override_flag = Obj.magic _1 in @@ -77199,9 +73294,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 28222 "reason_parser.ml" +# 31887 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -77209,17 +73304,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 28232 "reason_parser.ml" +# 31897 "reason_parser.ml" in -# 1939 "reason_parser.mly" +# 2073 "reason_parser.mly" ( if _1 = Override then syntax_error (); (_3, Cfk_virtual _5) ) -# 28240 "reason_parser.ml" +# 31905 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77249,9 +73344,9 @@ module Tables = struct } = _menhir_stack in let _3 : 'tv_fun_def_EQUAL_core_type_ = Obj.magic _3 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 28272 "reason_parser.ml" +# 31937 "reason_parser.ml" ) = Obj.magic _100 in let _1 : 'tv_override_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -77264,9 +73359,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 28287 "reason_parser.ml" +# 31952 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -77274,9 +73369,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 28297 "reason_parser.ml" +# 31962 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in @@ -77286,11 +73381,11 @@ module Tables = struct else _startpos__2_ in -# 1943 "reason_parser.mly" +# 2077 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in (_2, Cfk_concrete (_1, mkexp ~ghost:true ~loc (Pexp_poly (_3, None)))) ) -# 28311 "reason_parser.ml" +# 31976 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77326,9 +73421,9 @@ module Tables = struct let _4 : 'tv_either_preceded_EQUAL_expr__braced_expr_ = Obj.magic _4 in let _3 : 'tv_option_preceded_COLON_poly_type__ = Obj.magic _3 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 28349 "reason_parser.ml" +# 32014 "reason_parser.ml" ) = Obj.magic _100 in let _1 : 'tv_override_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -77341,9 +73436,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 28364 "reason_parser.ml" +# 32029 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -77351,9 +73446,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 28374 "reason_parser.ml" +# 32039 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in @@ -77363,11 +73458,11 @@ module Tables = struct else _startpos__2_ in -# 1949 "reason_parser.mly" +# 2083 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in (_2, Cfk_concrete (_1, mkexp ~ghost:true ~loc (Pexp_poly(_4, _3)))) ) -# 28388 "reason_parser.ml" +# 32053 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77427,9 +73522,9 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 28450 "reason_parser.ml" +# 32115 "reason_parser.ml" ) = Obj.magic _100 in let _1 : 'tv_override_flag = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -77442,9 +73537,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 28465 "reason_parser.ml" +# 32130 "reason_parser.ml" in let _2 = @@ -77454,9 +73549,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 28477 "reason_parser.ml" +# 32142 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -77464,9 +73559,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 28487 "reason_parser.ml" +# 32152 "reason_parser.ml" in let _startpos__2_ = _startpos__100_ in @@ -77476,7 +73571,7 @@ module Tables = struct else _startpos__2_ in -# 1957 "reason_parser.mly" +# 2091 "reason_parser.mly" ( (* For non, methods we'd create a pattern binding: ((Ppat_constraint(mkpatvar ..., Ptyp_poly (typeVars, poly_type_varified))), @@ -77490,7 +73585,7 @@ module Tables = struct let loc = mklocation _symbolstartpos _endpos in (_2, Cfk_concrete (_1, mkexp ~ghost:true ~loc exp)) ) -# 28511 "reason_parser.ml" +# 32176 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77537,9 +73632,9 @@ module Tables = struct let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = Obj.magic _1000 in let _110 : unit = Obj.magic _110 in let _300 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28560 "reason_parser.ml" +# 32225 "reason_parser.ml" ) = Obj.magic _300 in let _200 : unit = Obj.magic _200 in let _100 : 'tv_mod_ext_longident = Obj.magic _100 in @@ -77557,21 +73652,21 @@ module Tables = struct let x = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 28580 "reason_parser.ml" +# 32245 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28586 "reason_parser.ml" +# 32251 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 28592 "reason_parser.ml" +# 32257 "reason_parser.ml" in let _endpos__2_ = _endpos__301_ in @@ -77584,27 +73679,27 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4138 "reason_parser.mly" +# 4452 "reason_parser.mly" ( Ldot(_1, _3) ) -# 28607 "reason_parser.ml" +# 32272 "reason_parser.ml" in # 54 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28613 "reason_parser.ml" +# 32278 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 4145 "reason_parser.mly" +# 4459 "reason_parser.mly" ( if not !Clflags.applicative_functors then raise Syntaxerr.(Error(Applicative_path(mklocation _startpos _endpos))); List.fold_left (fun p1 p2 -> Lapply (p1, p2)) _1 _2 ) -# 28625 "reason_parser.ml" +# 32290 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77655,21 +73750,21 @@ module Tables = struct let x = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 28678 "reason_parser.ml" +# 32343 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28684 "reason_parser.ml" +# 32349 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 28690 "reason_parser.ml" +# 32355 "reason_parser.ml" in let _endpos__2_ = _endpos__300_ in @@ -77678,27 +73773,27 @@ module Tables = struct let x = let _1 = _10 in -# 4140 "reason_parser.mly" +# 4454 "reason_parser.mly" ( _1 ) -# 28701 "reason_parser.ml" +# 32366 "reason_parser.ml" in # 54 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28707 "reason_parser.ml" +# 32372 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 4145 "reason_parser.mly" +# 4459 "reason_parser.mly" ( if not !Clflags.applicative_functors then raise Syntaxerr.(Error(Applicative_path(mklocation _startpos _endpos))); List.fold_left (fun p1 p2 -> Lapply (p1, p2)) _1 _2 ) -# 28719 "reason_parser.ml" +# 32384 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77735,9 +73830,9 @@ module Tables = struct let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_mod_ext_longident_ = Obj.magic _1000 in let _110 : unit = Obj.magic _110 in let _100 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28758 "reason_parser.ml" +# 32423 "reason_parser.ml" ) = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in @@ -77753,21 +73848,21 @@ module Tables = struct let x = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 28776 "reason_parser.ml" +# 32441 "reason_parser.ml" in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28782 "reason_parser.ml" +# 32447 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 28788 "reason_parser.ml" +# 32453 "reason_parser.ml" in let _endpos__2_ = _endpos__300_ in @@ -77776,27 +73871,27 @@ module Tables = struct let x = let _1 = _10 in -# 4142 "reason_parser.mly" +# 4456 "reason_parser.mly" ( Lident(_1) ) -# 28799 "reason_parser.ml" +# 32464 "reason_parser.ml" in # 54 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 28805 "reason_parser.ml" +# 32470 "reason_parser.ml" in let _startpos__1_ = _startpos__100_ in let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 4145 "reason_parser.mly" +# 4459 "reason_parser.mly" ( if not !Clflags.applicative_functors then raise Syntaxerr.(Error(Applicative_path(mklocation _startpos _endpos))); List.fold_left (fun p1 p2 -> Lapply (p1, p2)) _1 _2 ) -# 28817 "reason_parser.ml" +# 32482 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77815,17 +73910,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28838 "reason_parser.ml" +# 32503 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_mod_ext_longident = -# 4131 "reason_parser.mly" +# 4445 "reason_parser.mly" ( Lident _1 ) -# 28846 "reason_parser.ml" +# 32511 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77854,9 +73949,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28877 "reason_parser.ml" +# 32542 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_ext_longident = Obj.magic _1 in @@ -77864,9 +73959,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_mod_ext_longident = -# 4132 "reason_parser.mly" +# 4446 "reason_parser.mly" ( Ldot(_1, _3) ) -# 28887 "reason_parser.ml" +# 32552 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77889,9 +73984,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_mod_ext_longident = -# 4133 "reason_parser.mly" +# 4447 "reason_parser.mly" ( _1 ) -# 28912 "reason_parser.ml" +# 32577 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77910,17 +74005,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28933 "reason_parser.ml" +# 32598 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_mod_longident = -# 4126 "reason_parser.mly" +# 4440 "reason_parser.mly" ( Lident _1 ) -# 28941 "reason_parser.ml" +# 32606 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77949,9 +74044,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 28972 "reason_parser.ml" +# 32637 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_longident = Obj.magic _1 in @@ -77959,9 +74054,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_mod_longident = -# 4127 "reason_parser.mly" +# 4441 "reason_parser.mly" ( Ldot(_1, _3) ) -# 28982 "reason_parser.ml" +# 32647 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -77984,9 +74079,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_module_arguments = -# 1331 "reason_parser.mly" +# 1467 "reason_parser.mly" ( [_1] ) -# 29007 "reason_parser.ml" +# 32672 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78002,9 +74097,9 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = xs000; - MenhirLib.EngineTypes.startp = _startpos_xs000_; - MenhirLib.EngineTypes.endp = _endpos_xs000_; + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _100; @@ -78015,37 +74110,29 @@ module Tables = struct }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let xs000 : 'tv_loption_separated_nonempty_list_COMMA_module_complex_expr__ = Obj.magic xs000 in + let x00 : 'tv_module_arguments_comma_list = Obj.magic x00 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_module_arguments = let _1 = let _30 = _300 in - let xs00 = xs000 in + let x0 = x00 in let _10 = _100 in let _1 = let _3 = _30 in - let xs0 = xs00 in + let x = x0 in let _1 = _10 in - let x = - let xs = xs0 in - -# 206 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( xs ) -# 29054 "reason_parser.ml" - - in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 29060 "reason_parser.ml" +# 32717 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 29066 "reason_parser.ml" +# 32723 "reason_parser.ml" in let _endpos__1_ = _endpos__300_ in @@ -78053,12 +74140,91 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 1333 "reason_parser.mly" +# 1469 "reason_parser.mly" ( match _1 with | [] -> [mkmod ~loc:(mklocation _startpos _endpos) (Pmod_structure [])] | xs -> xs ) -# 29079 "reason_parser.ml" +# 32736 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__2_ in + let _endpos = _endpos__2_ in + let _v : 'tv_module_arguments_comma_list = let _1 = + +# 4730 "reason_parser.mly" + ( [] ) +# 32762 "reason_parser.ml" + + in + +# 1464 "reason_parser.mly" + (_1) +# 32768 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _100 : 'tv_lseparated_nonempty_list_aux_COMMA_module_complex_expr_ = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__2_ in + let _v : 'tv_module_arguments_comma_list = let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 32803 "reason_parser.ml" + + in + +# 4731 "reason_parser.mly" + ( _1 ) +# 32809 "reason_parser.ml" + + in + +# 1464 "reason_parser.mly" + (_1) +# 32815 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78087,9 +74253,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_module_binding_body = -# 1565 "reason_parser.mly" +# 1693 "reason_parser.mly" ( mk_functor_mod _1 _2 ) -# 29110 "reason_parser.ml" +# 32846 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78130,10 +74296,10 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_module_binding_body = -# 1567 "reason_parser.mly" +# 1695 "reason_parser.mly" ( let loc = mklocation _startpos__3_ _endpos__4_ in mk_functor_mod _1 (mkmod ~loc (Pmod_constraint(_4, _3))) ) -# 29154 "reason_parser.ml" +# 32890 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78162,9 +74328,9 @@ module Tables = struct let x = let _1 = _10 in -# 1309 "reason_parser.mly" +# 1442 "reason_parser.mly" ( _1 ) -# 29185 "reason_parser.ml" +# 32921 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -78172,15 +74338,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29195 "reason_parser.ml" +# 32931 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29201 "reason_parser.ml" +# 32937 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78225,9 +74391,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1311 "reason_parser.mly" +# 1444 "reason_parser.mly" ( mkmod(Pmod_constraint(_1, _3)) ) -# 29248 "reason_parser.ml" +# 32984 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -78235,15 +74401,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29258 "reason_parser.ml" +# 32994 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29264 "reason_parser.ml" +# 33000 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78280,9 +74446,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1313 "reason_parser.mly" +# 1446 "reason_parser.mly" ( mkmod(Pmod_unpack _2) ) -# 29303 "reason_parser.ml" +# 33039 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -78290,15 +74456,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29313 "reason_parser.ml" +# 33049 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29319 "reason_parser.ml" +# 33055 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78355,11 +74521,11 @@ module Tables = struct let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 1315 "reason_parser.mly" +# 1448 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkmod (Pmod_unpack( mkexp ~ghost:true ~loc (Pexp_constraint(_2, mktyp ~ghost:true ~loc (Ptyp_package _4))))) ) -# 29380 "reason_parser.ml" +# 33116 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -78367,15 +74533,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29390 "reason_parser.ml" +# 33126 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29396 "reason_parser.ml" +# 33132 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78448,12 +74614,12 @@ module Tables = struct let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 1319 "reason_parser.mly" +# 1452 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkmod (Pmod_unpack( mkexp ~ghost:true ~loc (Pexp_coerce(_2, Some(mktyp ~ghost:true ~loc (Ptyp_package _4)), mktyp ~ghost:true ~loc (Ptyp_package _6))))) ) -# 29474 "reason_parser.ml" +# 33210 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -78461,15 +74627,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29484 "reason_parser.ml" +# 33220 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29490 "reason_parser.ml" +# 33226 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78526,12 +74692,12 @@ module Tables = struct let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 1324 "reason_parser.mly" +# 1457 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos and ghost = true in let mty = mktyp ~ghost ~loc (Ptyp_package _4) in mkmod (Pmod_unpack(mkexp ~ghost ~loc (Pexp_coerce(_2, None, mty)))) ) -# 29552 "reason_parser.ml" +# 33288 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -78539,15 +74705,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29562 "reason_parser.ml" +# 33298 "reason_parser.ml" in -# 1328 "reason_parser.mly" +# 1461 "reason_parser.mly" (_1) -# 29568 "reason_parser.ml" +# 33304 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78576,9 +74742,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_module_declaration = -# 1781 "reason_parser.mly" +# 1909 "reason_parser.mly" ( mk_functor_mty _1 _2 ) -# 29599 "reason_parser.ml" +# 33335 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78615,15 +74781,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 29638 "reason_parser.ml" +# 33374 "reason_parser.ml" in -# 1349 "reason_parser.mly" +# 1485 "reason_parser.mly" ( mkmod(Pmod_ident _1) ) -# 29644 "reason_parser.ml" +# 33380 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -78631,15 +74797,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29654 "reason_parser.ml" +# 33390 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29660 "reason_parser.ml" +# 33396 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78668,9 +74834,9 @@ module Tables = struct let x = let _1 = _10 in -# 1350 "reason_parser.mly" +# 1486 "reason_parser.mly" ( _1 ) -# 29691 "reason_parser.ml" +# 33427 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -78678,15 +74844,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29701 "reason_parser.ml" +# 33437 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29707 "reason_parser.ml" +# 33443 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78759,9 +74925,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 29782 "reason_parser.ml" +# 33518 "reason_parser.ml" in let _1 = @@ -78771,15 +74937,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 29794 "reason_parser.ml" +# 33530 "reason_parser.ml" in -# 1352 "reason_parser.mly" +# 1488 "reason_parser.mly" ( unclosed_mod (with_txt _1 "(") (with_txt _5 ")")) -# 29800 "reason_parser.ml" +# 33536 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -78787,15 +74953,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29810 "reason_parser.ml" +# 33546 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29816 "reason_parser.ml" +# 33552 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78840,9 +75006,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1354 "reason_parser.mly" +# 1490 "reason_parser.mly" ( _2 ) -# 29863 "reason_parser.ml" +# 33599 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -78850,15 +75016,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29873 "reason_parser.ml" +# 33609 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29879 "reason_parser.ml" +# 33615 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78895,9 +75061,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1356 "reason_parser.mly" +# 1492 "reason_parser.mly" ( mkmod (Pmod_structure []) ) -# 29918 "reason_parser.ml" +# 33654 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -78905,15 +75071,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29928 "reason_parser.ml" +# 33664 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29934 "reason_parser.ml" +# 33670 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -78942,9 +75108,9 @@ module Tables = struct let x = let _1 = _10 in -# 1358 "reason_parser.mly" +# 1494 "reason_parser.mly" ( mkmod (Pmod_extension _1) ) -# 29965 "reason_parser.ml" +# 33701 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -78952,15 +75118,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 29975 "reason_parser.ml" +# 33711 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 29981 "reason_parser.ml" +# 33717 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79025,7 +75191,7 @@ module Tables = struct let _1 = _10 in let _endpos = _endpos__5_ in -# 1366 "reason_parser.mly" +# 1502 "reason_parser.mly" ( let me = match _3 with | None -> _5 | Some mt -> @@ -79034,7 +75200,7 @@ module Tables = struct in mk_functor_mod _2 me ) -# 30055 "reason_parser.ml" +# 33791 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -79042,15 +75208,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30065 "reason_parser.ml" +# 33801 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30071 "reason_parser.ml" +# 33807 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79087,9 +75253,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1375 "reason_parser.mly" +# 1511 "reason_parser.mly" ( List.fold_left mkmod_app _1 _2 ) -# 30110 "reason_parser.ml" +# 33846 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -79097,15 +75263,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30120 "reason_parser.ml" +# 33856 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30126 "reason_parser.ml" +# 33862 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79171,9 +75337,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30194 "reason_parser.ml" +# 33930 "reason_parser.ml" in let _2 = @@ -79183,15 +75349,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30206 "reason_parser.ml" +# 33942 "reason_parser.ml" in -# 1377 "reason_parser.mly" +# 1513 "reason_parser.mly" ( unclosed_mod (with_txt _2 "(") (with_txt _4 ")") ) -# 30212 "reason_parser.ml" +# 33948 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -79199,15 +75365,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30222 "reason_parser.ml" +# 33958 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30228 "reason_parser.ml" +# 33964 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79264,9 +75430,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30287 "reason_parser.ml" +# 34023 "reason_parser.ml" in let _1 = @@ -79276,15 +75442,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30299 "reason_parser.ml" +# 34035 "reason_parser.ml" in -# 1379 "reason_parser.mly" +# 1515 "reason_parser.mly" ( unclosed_mod (with_txt _1 "(") (with_txt _3 ")") ) -# 30305 "reason_parser.ml" +# 34041 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -79292,15 +75458,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30315 "reason_parser.ml" +# 34051 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30321 "reason_parser.ml" +# 34057 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79373,9 +75539,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30396 "reason_parser.ml" +# 34132 "reason_parser.ml" in let _1 = @@ -79385,15 +75551,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30408 "reason_parser.ml" +# 34144 "reason_parser.ml" in -# 1381 "reason_parser.mly" +# 1517 "reason_parser.mly" ( unclosed_mod (with_txt _1 "(") (with_txt _5 ")") ) -# 30414 "reason_parser.ml" +# 34150 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -79401,15 +75567,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30424 "reason_parser.ml" +# 34160 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30430 "reason_parser.ml" +# 34166 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79482,9 +75648,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30505 "reason_parser.ml" +# 34241 "reason_parser.ml" in let _1 = @@ -79494,15 +75660,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30517 "reason_parser.ml" +# 34253 "reason_parser.ml" in -# 1383 "reason_parser.mly" +# 1519 "reason_parser.mly" ( unclosed_mod (with_txt _1 "(") (with_txt _5 ")") ) -# 30523 "reason_parser.ml" +# 34259 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -79510,15 +75676,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30533 "reason_parser.ml" +# 34269 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30539 "reason_parser.ml" +# 34275 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79583,9 +75749,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30606 "reason_parser.ml" +# 34342 "reason_parser.ml" in let _1 = @@ -79595,15 +75761,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30618 "reason_parser.ml" +# 34354 "reason_parser.ml" in -# 1385 "reason_parser.mly" +# 1521 "reason_parser.mly" ( unclosed_mod (with_txt _1 "(") (with_txt _4 ")") ) -# 30624 "reason_parser.ml" +# 34360 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -79611,15 +75777,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30634 "reason_parser.ml" +# 34370 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30640 "reason_parser.ml" +# 34376 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79656,9 +75822,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1387 "reason_parser.mly" +# 1523 "reason_parser.mly" ( {_2 with pmod_attributes = _1 :: _2.pmod_attributes} ) -# 30679 "reason_parser.ml" +# 34415 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -79666,15 +75832,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4340 "reason_parser.mly" +# 4655 "reason_parser.mly" ( {x with pmod_loc = {x.pmod_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 30689 "reason_parser.ml" +# 34425 "reason_parser.ml" in -# 1388 "reason_parser.mly" +# 1524 "reason_parser.mly" (_1) -# 30695 "reason_parser.ml" +# 34431 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79708,13 +75874,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 30729 "reason_parser.ml" +# 34465 "reason_parser.ml" in -# 1339 "reason_parser.mly" +# 1475 "reason_parser.mly" ( _1 ) -# 30735 "reason_parser.ml" +# 34471 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79737,9 +75903,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_module_expr_body = -# 1339 "reason_parser.mly" +# 1475 "reason_parser.mly" ( _1 ) -# 30760 "reason_parser.ml" +# 34496 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79776,9 +75942,9 @@ module Tables = struct let _v : 'tv_module_expr_structure = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 1343 "reason_parser.mly" +# 1479 "reason_parser.mly" ( mkmod ~loc:(mklocation _startpos _endpos) (Pmod_structure(_2)) ) -# 30799 "reason_parser.ml" +# 34535 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79819,9 +75985,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 1290 "reason_parser.mly" +# 1410 "reason_parser.mly" ( (Some (mkloc "*" (mklocation _startpos _endpos)), None) ) -# 30842 "reason_parser.ml" +# 34578 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -79829,15 +75995,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30852 "reason_parser.ml" +# 34588 "reason_parser.ml" in -# 1295 "reason_parser.mly" +# 1415 "reason_parser.mly" (_1) -# 30858 "reason_parser.ml" +# 34594 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79868,9 +76034,9 @@ module Tables = struct let _300 : 'tv_module_type = Obj.magic _300 in let _200 : unit = Obj.magic _200 in let _10000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 30891 "reason_parser.ml" +# 34627 "reason_parser.ml" ) = Obj.magic _10000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in @@ -79895,9 +76061,9 @@ module Tables = struct let x = let _1 = _10 in -# 1291 "reason_parser.mly" +# 1411 "reason_parser.mly" (_1) -# 30918 "reason_parser.ml" +# 34654 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -79905,15 +76071,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30928 "reason_parser.ml" +# 34664 "reason_parser.ml" in -# 1292 "reason_parser.mly" +# 1412 "reason_parser.mly" ( (Some _1, Some _3) ) -# 30934 "reason_parser.ml" +# 34670 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -79921,15 +76087,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 30944 "reason_parser.ml" +# 34680 "reason_parser.ml" in -# 1295 "reason_parser.mly" +# 1415 "reason_parser.mly" (_1) -# 30950 "reason_parser.ml" +# 34686 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -79983,9 +76149,9 @@ module Tables = struct let x = let _1 = _10 in -# 1291 "reason_parser.mly" +# 1411 "reason_parser.mly" ("_") -# 31006 "reason_parser.ml" +# 34742 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -79993,15 +76159,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 31016 "reason_parser.ml" +# 34752 "reason_parser.ml" in -# 1292 "reason_parser.mly" +# 1412 "reason_parser.mly" ( (Some _1, Some _3) ) -# 31022 "reason_parser.ml" +# 34758 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -80009,15 +76175,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 31032 "reason_parser.ml" +# 34768 "reason_parser.ml" in -# 1295 "reason_parser.mly" +# 1415 "reason_parser.mly" (_1) -# 31038 "reason_parser.ml" +# 34774 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80046,9 +76212,9 @@ module Tables = struct let x = let _1 = _10 in -# 1294 "reason_parser.mly" +# 1414 "reason_parser.mly" ( (None, Some _1) ) -# 31069 "reason_parser.ml" +# 34805 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -80056,15 +76222,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 31079 "reason_parser.ml" +# 34815 "reason_parser.ml" in -# 1295 "reason_parser.mly" +# 1415 "reason_parser.mly" (_1) -# 31085 "reason_parser.ml" +# 34821 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80111,15 +76277,15 @@ module Tables = struct let _3 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 31134 "reason_parser.ml" +# 34870 "reason_parser.ml" in -# 1649 "reason_parser.mly" +# 1777 "reason_parser.mly" ( mkmty (Pmty_with(_1, _3)) ) -# 31140 "reason_parser.ml" +# 34876 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -80127,15 +76293,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31150 "reason_parser.ml" +# 34886 "reason_parser.ml" in -# 1702 "reason_parser.mly" +# 1830 "reason_parser.mly" (_1) -# 31156 "reason_parser.ml" +# 34892 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80164,9 +76330,9 @@ module Tables = struct let x = let _1 = _10 in -# 1651 "reason_parser.mly" +# 1779 "reason_parser.mly" (_1) -# 31187 "reason_parser.ml" +# 34923 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -80174,15 +76340,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31197 "reason_parser.ml" +# 34933 "reason_parser.ml" in -# 1702 "reason_parser.mly" +# 1830 "reason_parser.mly" (_1) -# 31203 "reason_parser.ml" +# 34939 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80251,9 +76417,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1653 "reason_parser.mly" +# 1781 "reason_parser.mly" ( mkmty (Pmty_typeof _5) ) -# 31274 "reason_parser.ml" +# 35010 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -80261,15 +76427,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31284 "reason_parser.ml" +# 35020 "reason_parser.ml" in -# 1702 "reason_parser.mly" +# 1830 "reason_parser.mly" (_1) -# 31290 "reason_parser.ml" +# 35026 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80306,9 +76472,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1655 "reason_parser.mly" +# 1783 "reason_parser.mly" ( {_2 with pmty_attributes = _1 :: _2.pmty_attributes} ) -# 31329 "reason_parser.ml" +# 35065 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -80316,15 +76482,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31339 "reason_parser.ml" +# 35075 "reason_parser.ml" in -# 1702 "reason_parser.mly" +# 1830 "reason_parser.mly" (_1) -# 31345 "reason_parser.ml" +# 35081 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80369,9 +76535,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 1701 "reason_parser.mly" +# 1829 "reason_parser.mly" ( mk_functor_mty _1 _3 ) -# 31392 "reason_parser.ml" +# 35128 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -80379,15 +76545,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31402 "reason_parser.ml" +# 35138 "reason_parser.ml" in -# 1702 "reason_parser.mly" +# 1830 "reason_parser.mly" (_1) -# 31408 "reason_parser.ml" +# 35144 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80416,9 +76582,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_module_type_body_COLON_ = -# 1785 "reason_parser.mly" +# 1913 "reason_parser.mly" ( _2 ) -# 31439 "reason_parser.ml" +# 35175 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80441,9 +76607,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_module_type_body_COLON_ = -# 1786 "reason_parser.mly" +# 1914 "reason_parser.mly" ( _1 ) -# 31464 "reason_parser.ml" +# 35200 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80472,9 +76638,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_module_type_body_EQUAL_ = -# 1785 "reason_parser.mly" +# 1913 "reason_parser.mly" ( _2 ) -# 31495 "reason_parser.ml" +# 35231 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80497,9 +76663,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_module_type_body_EQUAL_ = -# 1786 "reason_parser.mly" +# 1914 "reason_parser.mly" ( _1 ) -# 31520 "reason_parser.ml" +# 35256 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80536,9 +76702,9 @@ module Tables = struct let _v : 'tv_module_type_signature = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 1614 "reason_parser.mly" +# 1742 "reason_parser.mly" ( mkmty ~loc:(mklocation _startpos _endpos) (Pmty_signature _2) ) -# 31559 "reason_parser.ml" +# 35295 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80561,9 +76727,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_mty_longident = -# 4152 "reason_parser.mly" +# 4466 "reason_parser.mly" ( Lident _1 ) -# 31584 "reason_parser.ml" +# 35320 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80598,9 +76764,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_mty_longident = -# 4153 "reason_parser.mly" +# 4467 "reason_parser.mly" ( Ldot(_1, _3) ) -# 31621 "reason_parser.ml" +# 35357 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80616,9 +76782,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_mutable_flag = -# 4210 "reason_parser.mly" +# 4524 "reason_parser.mly" ( Immutable ) -# 31639 "reason_parser.ml" +# 35375 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80641,9 +76807,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_mutable_flag = -# 4211 "reason_parser.mly" +# 4525 "reason_parser.mly" ( Mutable ) -# 31664 "reason_parser.ml" +# 35400 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80659,9 +76825,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_mutable_or_virtual_flags = -# 4220 "reason_parser.mly" +# 4534 "reason_parser.mly" ( Immutable, Concrete ) -# 31682 "reason_parser.ml" +# 35418 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80690,9 +76856,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_mutable_or_virtual_flags = -# 4221 "reason_parser.mly" +# 4535 "reason_parser.mly" ( _2, Virtual ) -# 31713 "reason_parser.ml" +# 35449 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80721,9 +76887,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_mutable_or_virtual_flags = -# 4222 "reason_parser.mly" +# 4536 "reason_parser.mly" ( Mutable, _2 ) -# 31744 "reason_parser.ml" +# 35480 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80746,9 +76912,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_non_arrowed_core_type = -# 3895 "reason_parser.mly" +# 4205 "reason_parser.mly" ( _1 ) -# 31769 "reason_parser.ml" +# 35505 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80783,15 +76949,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 31806 "reason_parser.ml" +# 35542 "reason_parser.ml" in -# 3897 "reason_parser.mly" +# 4207 "reason_parser.mly" ( Core_type {_2 with ptyp_attributes = _1 :: _2.ptyp_attributes} ) -# 31812 "reason_parser.ml" +# 35548 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80814,9 +76980,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_non_arrowed_simple_core_type = -# 3921 "reason_parser.mly" +# 4235 "reason_parser.mly" ( Core_type _1 ) -# 31837 "reason_parser.ml" +# 35573 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80845,20 +77011,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4360 "reason_parser.mly" +# 4675 "reason_parser.mly" ( match x with | Core_type ct -> let loc_start = _symbolstartpos and loc_end = _endpos in Core_type ({ct with ptyp_loc = {ct.ptyp_loc with loc_start; loc_end}}) | Record_type _ -> x ) -# 31873 "reason_parser.ml" +# 35609 "reason_parser.ml" in -# 3922 "reason_parser.mly" +# 4236 "reason_parser.mly" ( _1 ) -# 31879 "reason_parser.ml" +# 35615 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80887,8 +77053,8 @@ module Tables = struct let x = let _1 = _10 in -# 3908 "reason_parser.mly" - ( let prepare_arg {Location. txt = (label, ct); loc} = match label with +# 4222 "reason_parser.mly" + ( let prepare_arg ({Location. txt = (label, ct); loc}, _) = match label with | Nolabel -> ct | Optional _ | Labelled _ -> syntax_error_typ loc "Labels are not allowed inside a tuple" @@ -80898,7 +77064,7 @@ module Tables = struct | [one] -> one | many -> mktyp (Ptyp_tuple many) ) -# 31919 "reason_parser.ml" +# 35655 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -80906,15 +77072,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4356 "reason_parser.mly" +# 4671 "reason_parser.mly" ( {x with ptyp_loc = {x.ptyp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 31929 "reason_parser.ml" +# 35665 "reason_parser.ml" in -# 3918 "reason_parser.mly" +# 4232 "reason_parser.mly" (_1) -# 31935 "reason_parser.ml" +# 35671 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -80930,48 +77096,73 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_expr_optional_constraint_ = Obj.magic x00 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_expr_optional_constraint_ = Obj.magic _10000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_non_labeled_argument_list = let _1 = let _30 = _300 in - let x0 = x00 in + let _200 = _2000 in + let _1000 = _10000 in let _10 = _100 in let _1 = let _3 = _30 in - let x = x0 in + let _20 = _200 in + let _100 = _1000 in let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 35729 "reason_parser.ml" + + in + +# 3093 "reason_parser.mly" + ( _1 ) +# 35735 "reason_parser.ml" + + in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 31980 "reason_parser.ml" +# 35741 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 31986 "reason_parser.ml" +# 35747 "reason_parser.ml" in -# 2880 "reason_parser.mly" - ( _1 ) -# 31992 "reason_parser.ml" +# 3096 "reason_parser.mly" + ( _1 ) +# 35753 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81002,10 +77193,10 @@ module Tables = struct let _v : 'tv_non_labeled_argument_list = let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 2882 "reason_parser.mly" +# 3098 "reason_parser.mly" ( let loc = mklocation _startpos _endpos in [mkexp_constructor_unit loc loc] ) -# 32026 "reason_parser.ml" +# 35787 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81024,9 +77215,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 32047 "reason_parser.ml" +# 35808 "reason_parser.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -81034,7 +77225,7 @@ module Tables = struct let _v : 'tv_nonempty_list_LIDENT_ = # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32055 "reason_parser.ml" +# 35816 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81059,9 +77250,9 @@ module Tables = struct } = _menhir_stack in let xs : 'tv_nonempty_list_LIDENT_ = Obj.magic xs in let x : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 32082 "reason_parser.ml" +# 35843 "reason_parser.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -81069,7 +77260,7 @@ module Tables = struct let _v : 'tv_nonempty_list_LIDENT_ = # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32090 "reason_parser.ml" +# 35851 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81088,25 +77279,488 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 32111 "reason_parser.ml" +# 35872 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_nonempty_list___anonymous_34_ = let x = + let _v : 'tv_nonempty_list___anonymous_32_ = let x = let _1 = _10 in -# 3405 "reason_parser.mly" - ( fst _1 ) -# 32121 "reason_parser.ml" +# 3689 "reason_parser.mly" + ( fst _1 ) +# 35882 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 35888 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let xs : 'tv_nonempty_list___anonymous_32_ = Obj.magic xs in + let _10 : ( +# 1169 "reason_parser.mly" + (string * string option) +# 35915 "reason_parser.ml" + ) = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_nonempty_list___anonymous_32_ = let x = + let _1 = _10 in + +# 3689 "reason_parser.mly" + ( fst _1 ) +# 35925 "reason_parser.ml" + + in + +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 35931 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x0 : 'tv_attribute = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_x0_ in + let _v : 'tv_nonempty_list_as_loc_attribute__ = let x = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 35962 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 35968 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let xs : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic xs in + let x0 : 'tv_attribute = Obj.magic x0 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_nonempty_list_as_loc_attribute__ = let x = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 36005 "reason_parser.ml" + + in + +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 36011 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _20 : unit = Obj.magic _20 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__20_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36046 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36053 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36059 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36065 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__20_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _100 = _1000 in + let _2 = _20 in + let _3 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36110 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36116 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36123 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36129 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36135 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36177 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36187 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36193 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36199 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36205 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _101 = _1010 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36257 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36263 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36273 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36279 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36285 "reason_parser.ml" + + in + +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36291 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _20 : unit = Obj.magic _20 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__20_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36332 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36339 "reason_parser.ml" + + in + +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36345 "reason_parser.ml" in -# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 32127 "reason_parser.ml" +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 36351 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81122,34 +77776,67 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let xs : 'tv_nonempty_list___anonymous_34_ = Obj.magic xs in - let _10 : ( -# 1049 "reason_parser.mly" - (string * string option) -# 32154 "reason_parser.ml" - ) = Obj.magic _10 in + let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__10_ in + let _startpos = _startpos__20_ in let _endpos = _endpos_xs_ in - let _v : 'tv_nonempty_list___anonymous_34_ = let x = - let _1 = _10 in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _100 = _1000 in + let _2 = _20 in + let _3 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36402 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36408 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36415 "reason_parser.ml" + + in -# 3405 "reason_parser.mly" - ( fst _1 ) -# 32164 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36421 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32170 "reason_parser.ml" +# 36427 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81161,32 +77848,71 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let x0 : 'tv_attribute = Obj.magic x0 in + let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_x0_ in - let _v : 'tv_nonempty_list_as_loc_attribute__ = let x = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _startpos = _startpos__1000_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36475 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36485 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36491 "reason_parser.ml" + + in -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 32201 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36497 "reason_parser.ml" in -# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 32207 "reason_parser.ml" +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 36503 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81202,34 +77928,83 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic xs in - let x0 : 'tv_attribute = Obj.magic x0 in + let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in + let _40 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in + let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in + let _startpos = _startpos__1000_ in let _endpos = _endpos_xs_ in - let _v : 'tv_nonempty_list_as_loc_attribute__ = let x = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = + let _4 = _40 in + let _101 = _1010 in + let _2 = _20 in + let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36561 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36567 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36577 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36583 "reason_parser.ml" + + in -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 32244 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36589 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32250 "reason_parser.ml" +# 36595 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81241,9 +78016,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _20; @@ -81252,31 +78027,38 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__20_ in - let _endpos = _endpos__30_ in - let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36630 "reason_parser.ml" + + in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 32285 "reason_parser.ml" +# 36637 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32291 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36643 "reason_parser.ml" in # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32297 "reason_parser.ml" +# 36649 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81288,58 +78070,65 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in - let _20 : unit = Obj.magic _20 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1000_ in - let _endpos = _endpos__30_ in - let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in - let _2 = _20 in + let _startpos = _startpos__20_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in let _100 = _1000 in - let _1 = + let _2 = _20 in + let _3 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 32342 "reason_parser.ml" +# 36694 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 32348 "reason_parser.ml" +# 36700 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36707 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32354 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36713 "reason_parser.ml" in # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32360 "reason_parser.ml" +# 36719 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81351,48 +78140,65 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__20_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in let _2 = _20 in - let _1 = + let _100 = _1000 in + let _3 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 32401 "reason_parser.ml" +# 36761 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36771 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36777 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32407 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36783 "reason_parser.ml" in -# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 32413 "reason_parser.ml" +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36789 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81404,13 +78210,13 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _20; MenhirLib.EngineTypes.startp = _startpos__20_; @@ -81425,43 +78231,60 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = Obj.magic xs in - let _30 : 'tv_either_extension_constructor_declaration_extension_constructor_rebind_ = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in let _20 : unit = Obj.magic _20 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_nonempty_list_attributed_ext_constructor_either_extension_constructor_declaration_extension_constructor_rebind___ = let x = - let _3 = _30 in + let _endpos = _endpos__40_ in + let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = + let _4 = _40 in + let _101 = _1010 in let _2 = _20 in let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 36841 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 36847 "reason_parser.ml" + + in let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 32464 "reason_parser.ml" +# 36857 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 32470 "reason_parser.ml" +# 36863 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32476 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36869 "reason_parser.ml" in -# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 32482 "reason_parser.ml" +# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( [ x ] ) +# 36875 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81473,42 +78296,55 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in + let xs : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__20_ in - let _endpos = _endpos__30_ in + let _endpos = _endpos_xs_ in let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in + let _4 = _40 in let _2 = _20 in + let _3 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36916 "reason_parser.ml" + + in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 32517 "reason_parser.ml" +# 36923 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32523 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 36929 "reason_parser.ml" in -# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 32529 "reason_parser.ml" +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 36935 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81520,58 +78356,71 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1000; MenhirLib.EngineTypes.startp = _startpos__1000_; MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in - let _20 : unit = Obj.magic _20 in + let xs : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in + let _20 : unit = Obj.magic _20 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1000_ in - let _endpos = _endpos__30_ in + let _startpos = _startpos__20_ in + let _endpos = _endpos_xs_ in let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in - let _2 = _20 in + let _4 = _40 in let _100 = _1000 in - let _1 = + let _2 = _20 in + let _3 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 32574 "reason_parser.ml" +# 36986 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 32580 "reason_parser.ml" +# 36992 "reason_parser.ml" + + in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 36999 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32586 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 37005 "reason_parser.ml" in -# 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 32592 "reason_parser.ml" +# 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x :: xs ) +# 37011 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81587,44 +78436,67 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _20; MenhirLib.EngineTypes.startp = _startpos__20_; MenhirLib.EngineTypes.endp = _endpos__20_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let xs : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in let _20 : unit = Obj.magic _20 in + let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__20_ in + let _startpos = _startpos__1000_ in let _endpos = _endpos_xs_ in let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in + let _4 = _40 in let _2 = _20 in - let _1 = + let _100 = _1000 in + let _3 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 32633 "reason_parser.ml" +# 37059 "reason_parser.ml" + + in + let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 37069 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 37075 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32639 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 37081 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32645 "reason_parser.ml" +# 37087 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81640,60 +78512,83 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _30; - MenhirLib.EngineTypes.startp = _startpos__30_; - MenhirLib.EngineTypes.endp = _endpos__30_; + MenhirLib.EngineTypes.semv = _40; + MenhirLib.EngineTypes.startp = _startpos__40_; + MenhirLib.EngineTypes.endp = _endpos__40_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.semv = _1010; + MenhirLib.EngineTypes.startp = _startpos__1010_; + MenhirLib.EngineTypes.endp = _endpos__1010_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in let xs : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = Obj.magic xs in - let _30 : 'tv_extension_constructor_declaration = Obj.magic _30 in + let _40 : 'tv_extension_constructor_declaration = Obj.magic _40 in + let _1010 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1010 in let _20 : unit = Obj.magic _20 in let _1000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in let _endpos = _endpos_xs_ in let _v : 'tv_nonempty_list_attributed_ext_constructor_extension_constructor_declaration__ = let x = - let _3 = _30 in + let _4 = _40 in + let _101 = _1010 in let _2 = _20 in let _100 = _1000 in + let _3 = + let _10 = _101 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 37145 "reason_parser.ml" + + in + +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 37151 "reason_parser.ml" + + in let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 32696 "reason_parser.ml" +# 37161 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 32702 "reason_parser.ml" +# 37167 "reason_parser.ml" in -# 3646 "reason_parser.mly" - ( {_3 with pext_attributes = _1 @ _3.pext_attributes} ) -# 32708 "reason_parser.ml" +# 3936 "reason_parser.mly" + ( {_4 with pext_attributes = List.concat [_1; _3; _4.pext_attributes]} ) +# 37173 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32714 "reason_parser.ml" +# 37179 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81725,15 +78620,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 32748 "reason_parser.ml" +# 37213 "reason_parser.ml" in # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32754 "reason_parser.ml" +# 37219 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81771,15 +78666,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 32794 "reason_parser.ml" +# 37259 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32800 "reason_parser.ml" +# 37265 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81813,13 +78708,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 32834 "reason_parser.ml" +# 37299 "reason_parser.ml" in # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32840 "reason_parser.ml" +# 37305 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81859,13 +78754,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 32880 "reason_parser.ml" +# 37345 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32886 "reason_parser.ml" +# 37351 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81899,13 +78794,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 32920 "reason_parser.ml" +# 37385 "reason_parser.ml" in # 195 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 32926 "reason_parser.ml" +# 37391 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81945,13 +78840,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 32966 "reason_parser.ml" +# 37431 "reason_parser.ml" in # 197 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 32972 "reason_parser.ml" +# 37437 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81967,9 +78862,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_nonrec_flag = -# 4195 "reason_parser.mly" +# 4509 "reason_parser.mly" ( Recursive ) -# 32990 "reason_parser.ml" +# 37455 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -81992,9 +78887,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_nonrec_flag = -# 4196 "reason_parser.mly" +# 4510 "reason_parser.mly" ( Nonrecursive ) -# 33015 "reason_parser.ml" +# 37480 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82042,9 +78937,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : 'tv_object_body = let _3 = -# 4415 "reason_parser.mly" +# 4730 "reason_parser.mly" ( [] ) -# 33065 "reason_parser.ml" +# 37530 "reason_parser.ml" in let _2 = @@ -82060,7 +78955,7 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 33081 "reason_parser.ml" +# 37546 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -82068,16 +78963,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 33091 "reason_parser.ml" +# 37556 "reason_parser.ml" in -# 1834 "reason_parser.mly" +# 1967 "reason_parser.mly" ( let attrs = List.map (fun x -> mkcf ~loc:x.loc (Pcf_attribute x.txt)) _1 in Cstr.mk _2 (attrs @ List.concat _3) ) -# 33098 "reason_parser.ml" +# 37563 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82134,15 +79029,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 33157 "reason_parser.ml" +# 37622 "reason_parser.ml" in -# 4416 "reason_parser.mly" +# 4731 "reason_parser.mly" ( _1 ) -# 33163 "reason_parser.ml" +# 37628 "reason_parser.ml" in let _2 = @@ -82158,7 +79053,7 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 33179 "reason_parser.ml" +# 37644 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -82166,16 +79061,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 33189 "reason_parser.ml" +# 37654 "reason_parser.ml" in -# 1834 "reason_parser.mly" +# 1967 "reason_parser.mly" ( let attrs = List.map (fun x -> mkcf ~loc:x.loc (Pcf_attribute x.txt)) _1 in Cstr.mk _2 (attrs @ List.concat _3) ) -# 33196 "reason_parser.ml" +# 37661 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82199,9 +79094,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : 'tv_object_body = let _1 = -# 4415 "reason_parser.mly" +# 4730 "reason_parser.mly" ( [] ) -# 33222 "reason_parser.ml" +# 37687 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -82215,10 +79110,10 @@ module Tables = struct else _endpos in -# 1837 "reason_parser.mly" +# 1970 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _symbolstartpos in Cstr.mk (mkpat ~loc (Ppat_var (mkloc "this" loc))) (List.concat _1) ) -# 33239 "reason_parser.ml" +# 37704 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82251,15 +79146,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 33274 "reason_parser.ml" +# 37739 "reason_parser.ml" in -# 4416 "reason_parser.mly" +# 4731 "reason_parser.mly" ( _1 ) -# 33280 "reason_parser.ml" +# 37745 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -82273,10 +79168,10 @@ module Tables = struct else _endpos in -# 1837 "reason_parser.mly" +# 1970 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _symbolstartpos in Cstr.mk (mkpat ~loc (Ppat_var (mkloc "this" loc))) (List.concat _1) ) -# 33297 "reason_parser.ml" +# 37762 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82305,9 +79200,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_object_record_type = -# 3955 "reason_parser.mly" +# 4269 "reason_parser.mly" ( syntax_error () ) -# 33328 "reason_parser.ml" +# 37793 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82353,21 +79248,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 33376 "reason_parser.ml" +# 37841 "reason_parser.ml" in -# 3975 "reason_parser.mly" +# 4289 "reason_parser.mly" ( _1 ) -# 33382 "reason_parser.ml" +# 37847 "reason_parser.ml" in -# 3957 "reason_parser.mly" - ( Record_type (only_labels _2) ) -# 33388 "reason_parser.ml" +# 4271 "reason_parser.mly" + ( Record_type _2 ) +# 37853 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82419,26 +79314,26 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 33442 "reason_parser.ml" +# 37907 "reason_parser.ml" in -# 3598 "reason_parser.mly" +# 3888 "reason_parser.mly" ( _1 ) -# 33448 "reason_parser.ml" +# 37913 "reason_parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 3959 "reason_parser.mly" - ( (* `{. "foo": bar}` -> `Js.t {. foo: bar}` *) +# 4273 "reason_parser.mly" + ( (* `{. "foo": bar}` -> `Js.t({. foo: bar})` *) let loc = mklocation _symbolstartpos _endpos in mkBsObjTypeSugar ~loc ~closed:Closed _3 ) -# 33459 "reason_parser.ml" +# 37924 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82490,26 +79385,26 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 33513 "reason_parser.ml" +# 37978 "reason_parser.ml" in -# 3598 "reason_parser.mly" +# 3888 "reason_parser.mly" ( _1 ) -# 33519 "reason_parser.ml" +# 37984 "reason_parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 3964 "reason_parser.mly" - ( (* `{.. "foo": bar}` -> `Js.t {.. foo: bar}` *) +# 4278 "reason_parser.mly" + ( (* `{.. "foo": bar}` -> `Js.t({.. foo: bar})` *) let loc = mklocation _symbolstartpos _endpos in mkBsObjTypeSugar ~loc ~closed:Open _3 ) -# 33530 "reason_parser.ml" +# 37995 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82550,9 +79445,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_object_record_type = -# 3969 "reason_parser.mly" +# 4283 "reason_parser.mly" ( Core_type (mktyp (Ptyp_object (prepare_immutable_labels _3, Closed))) ) -# 33573 "reason_parser.ml" +# 38038 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82593,9 +79488,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_object_record_type = -# 3971 "reason_parser.mly" +# 4285 "reason_parser.mly" ( Core_type (mktyp (Ptyp_object (prepare_immutable_labels _3, Open))) ) -# 33616 "reason_parser.ml" +# 38081 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82636,17 +79531,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 33659 "reason_parser.ml" +# 38124 "reason_parser.ml" in let _endpos__4_ = _endpos_x0_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 33667 "reason_parser.ml" +# 38132 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -82657,9 +79552,9 @@ module Tables = struct else _startpos__2_ in -# 1776 "reason_parser.mly" +# 1904 "reason_parser.mly" ( Opn.mk _4 ~override:_3 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 33680 "reason_parser.ml" +# 38145 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82706,9 +79601,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 33729 "reason_parser.ml" +# 38194 "reason_parser.ml" in let _endpos__4_ = _endpos_x0_ in @@ -82717,15 +79612,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 33740 "reason_parser.ml" +# 38205 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 33746 "reason_parser.ml" +# 38211 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -82736,9 +79631,9 @@ module Tables = struct else _startpos__2_ in -# 1776 "reason_parser.mly" +# 1904 "reason_parser.mly" ( Opn.mk _4 ~override:_3 ~attrs:_1 ~loc:(mklocation _symbolstartpos _endpos) ) -# 33759 "reason_parser.ml" +# 38224 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82757,17 +79652,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1033 "reason_parser.mly" +# 1153 "reason_parser.mly" (string) -# 33780 "reason_parser.ml" +# 38245 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_operator = -# 4076 "reason_parser.mly" +# 4390 "reason_parser.mly" ( _1 ) -# 33788 "reason_parser.ml" +# 38253 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82786,17 +79681,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1034 "reason_parser.mly" +# 1154 "reason_parser.mly" (string) -# 33809 "reason_parser.ml" +# 38274 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_operator = -# 4077 "reason_parser.mly" +# 4391 "reason_parser.mly" ( _1 ) -# 33817 "reason_parser.ml" +# 38282 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82819,9 +79714,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_operator = -# 4078 "reason_parser.mly" +# 4392 "reason_parser.mly" ( "!" ) -# 33842 "reason_parser.ml" +# 38307 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82840,9 +79735,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 984 "reason_parser.mly" +# 1104 "reason_parser.mly" (string) -# 33863 "reason_parser.ml" +# 38328 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in @@ -82850,15 +79745,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4044 "reason_parser.mly" +# 4358 "reason_parser.mly" ( _1 ) -# 33873 "reason_parser.ml" +# 38338 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 33879 "reason_parser.ml" +# 38344 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82877,9 +79772,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 985 "reason_parser.mly" +# 1105 "reason_parser.mly" (string) -# 33900 "reason_parser.ml" +# 38365 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in @@ -82887,15 +79782,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4045 "reason_parser.mly" +# 4359 "reason_parser.mly" ( _1 ) -# 33910 "reason_parser.ml" +# 38375 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 33916 "reason_parser.ml" +# 38381 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82914,9 +79809,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 986 "reason_parser.mly" +# 1106 "reason_parser.mly" (string) -# 33937 "reason_parser.ml" +# 38402 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in @@ -82924,15 +79819,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4046 "reason_parser.mly" +# 4360 "reason_parser.mly" ( _1 ) -# 33947 "reason_parser.ml" +# 38412 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 33953 "reason_parser.ml" +# 38418 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82951,9 +79846,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 987 "reason_parser.mly" +# 1107 "reason_parser.mly" (string) -# 33974 "reason_parser.ml" +# 38439 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in @@ -82961,15 +79856,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4047 "reason_parser.mly" +# 4361 "reason_parser.mly" ( _1 ) -# 33984 "reason_parser.ml" +# 38449 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 33990 "reason_parser.ml" +# 38455 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -82994,15 +79889,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4049 "reason_parser.mly" +# 4363 "reason_parser.mly" ( "/>" ) -# 34017 "reason_parser.ml" +# 38482 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34023 "reason_parser.ml" +# 38488 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83021,9 +79916,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _10 : ( -# 990 "reason_parser.mly" +# 1110 "reason_parser.mly" (string) -# 34044 "reason_parser.ml" +# 38509 "reason_parser.ml" ) = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in @@ -83031,15 +79926,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4050 "reason_parser.mly" +# 4364 "reason_parser.mly" ( _1 ) -# 34054 "reason_parser.ml" +# 38519 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34060 "reason_parser.ml" +# 38525 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83064,15 +79959,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4051 "reason_parser.mly" +# 4365 "reason_parser.mly" ( "+" ) -# 34087 "reason_parser.ml" +# 38552 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34093 "reason_parser.ml" +# 38558 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83097,15 +79992,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4052 "reason_parser.mly" +# 4366 "reason_parser.mly" ( "+." ) -# 34120 "reason_parser.ml" +# 38585 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34126 "reason_parser.ml" +# 38591 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83130,15 +80025,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4053 "reason_parser.mly" +# 4367 "reason_parser.mly" ( "-" ) -# 34153 "reason_parser.ml" +# 38618 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34159 "reason_parser.ml" +# 38624 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83163,15 +80058,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4054 "reason_parser.mly" +# 4368 "reason_parser.mly" ( "-." ) -# 34186 "reason_parser.ml" +# 38651 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34192 "reason_parser.ml" +# 38657 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83196,15 +80091,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4055 "reason_parser.mly" +# 4369 "reason_parser.mly" ( "*" ) -# 34219 "reason_parser.ml" +# 38684 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34225 "reason_parser.ml" +# 38690 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83229,15 +80124,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4056 "reason_parser.mly" +# 4370 "reason_parser.mly" ( "<" ) -# 34252 "reason_parser.ml" +# 38717 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34258 "reason_parser.ml" +# 38723 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83262,15 +80157,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4057 "reason_parser.mly" +# 4371 "reason_parser.mly" ( ">" ) -# 34285 "reason_parser.ml" +# 38750 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34291 "reason_parser.ml" +# 38756 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83295,15 +80190,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4058 "reason_parser.mly" +# 4372 "reason_parser.mly" ( "or" ) -# 34318 "reason_parser.ml" +# 38783 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34324 "reason_parser.ml" +# 38789 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83328,15 +80223,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4059 "reason_parser.mly" +# 4373 "reason_parser.mly" ( "||" ) -# 34351 "reason_parser.ml" +# 38816 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34357 "reason_parser.ml" +# 38822 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83361,15 +80256,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4060 "reason_parser.mly" +# 4374 "reason_parser.mly" ( "&" ) -# 34384 "reason_parser.ml" +# 38849 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34390 "reason_parser.ml" +# 38855 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83394,15 +80289,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4061 "reason_parser.mly" +# 4375 "reason_parser.mly" ( "&&" ) -# 34417 "reason_parser.ml" +# 38882 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34423 "reason_parser.ml" +# 38888 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83427,15 +80322,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4062 "reason_parser.mly" +# 4376 "reason_parser.mly" ( ":=" ) -# 34450 "reason_parser.ml" +# 38915 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34456 "reason_parser.ml" +# 38921 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83460,15 +80355,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4063 "reason_parser.mly" +# 4377 "reason_parser.mly" ( "+=" ) -# 34483 "reason_parser.ml" +# 38948 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34489 "reason_parser.ml" +# 38954 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83493,15 +80388,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4064 "reason_parser.mly" +# 4378 "reason_parser.mly" ( "%" ) -# 34516 "reason_parser.ml" +# 38981 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34522 "reason_parser.ml" +# 38987 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83526,15 +80421,15 @@ module Tables = struct let _v : 'tv_operator = let _1 = let _1 = _10 in -# 4071 "reason_parser.mly" +# 4385 "reason_parser.mly" ( "<..>" ) -# 34549 "reason_parser.ml" +# 39014 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34555 "reason_parser.ml" +# 39020 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83566,15 +80461,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4072 "reason_parser.mly" +# 4386 "reason_parser.mly" ( ">>" ) -# 34589 "reason_parser.ml" +# 39054 "reason_parser.ml" in -# 4079 "reason_parser.mly" +# 4393 "reason_parser.mly" ( _1 ) -# 34595 "reason_parser.ml" +# 39060 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83597,9 +80492,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_opt_LET_MODULE = -# 4183 "reason_parser.mly" +# 4497 "reason_parser.mly" ( () ) -# 34620 "reason_parser.ml" +# 39085 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83628,9 +80523,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_opt_LET_MODULE = -# 4183 "reason_parser.mly" +# 4497 "reason_parser.mly" ( () ) -# 34651 "reason_parser.ml" +# 39116 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83648,7 +80543,7 @@ module Tables = struct let _v : 'tv_option_COMMA_ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34669 "reason_parser.ml" +# 39134 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83673,7 +80568,50 @@ module Tables = struct let _v : 'tv_option_COMMA_ = # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34694 "reason_parser.ml" +# 39159 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : 'tv_option_DOT_ = +# 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 39177 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : unit = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_DOT_ = +# 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 39202 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83691,7 +80629,7 @@ module Tables = struct let _v : 'tv_option_LET_ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34712 "reason_parser.ml" +# 39220 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83716,7 +80654,7 @@ module Tables = struct let _v : 'tv_option_LET_ = # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34737 "reason_parser.ml" +# 39245 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83734,7 +80672,7 @@ module Tables = struct let _v : 'tv_option_OF_ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34755 "reason_parser.ml" +# 39263 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83759,7 +80697,7 @@ module Tables = struct let _v : 'tv_option_OF_ = # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34780 "reason_parser.ml" +# 39288 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83777,7 +80715,7 @@ module Tables = struct let _v : 'tv_option_SEMI_ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34798 "reason_parser.ml" +# 39306 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83802,7 +80740,7 @@ module Tables = struct let _v : 'tv_option_SEMI_ = # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34823 "reason_parser.ml" +# 39331 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83820,7 +80758,7 @@ module Tables = struct let _v : 'tv_option_constructor_arguments_ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34841 "reason_parser.ml" +# 39349 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83845,7 +80783,50 @@ module Tables = struct let _v : 'tv_option_constructor_arguments_ = # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34866 "reason_parser.ml" +# 39374 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : 'tv_option_item_extension_sugar_ = +# 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( None ) +# 39392 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : 'tv_item_extension_sugar = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_item_extension_sugar_ = +# 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( Some x ) +# 39417 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83863,7 +80844,7 @@ module Tables = struct let _v : 'tv_option_preceded_AS_LIDENT__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34884 "reason_parser.ml" +# 39435 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83887,9 +80868,9 @@ module Tables = struct }; } = _menhir_stack in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 34910 "reason_parser.ml" +# 39461 "reason_parser.ml" ) = Obj.magic x0 in let _10 : unit = Obj.magic _10 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -83901,13 +80882,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 34922 "reason_parser.ml" +# 39473 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34928 "reason_parser.ml" +# 39479 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83925,7 +80906,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_class_constructor_type__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 34946 "reason_parser.ml" +# 39497 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83959,13 +80940,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 34980 "reason_parser.ml" +# 39531 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 34986 "reason_parser.ml" +# 39537 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -83983,7 +80964,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_expr__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35004 "reason_parser.ml" +# 39555 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84017,13 +80998,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35038 "reason_parser.ml" +# 39589 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35044 "reason_parser.ml" +# 39595 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84041,7 +81022,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_only_core_type_core_type___ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35062 "reason_parser.ml" +# 39613 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84081,21 +81062,21 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 35104 "reason_parser.ml" +# 39655 "reason_parser.ml" in # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35110 "reason_parser.ml" +# 39661 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35116 "reason_parser.ml" +# 39667 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84113,7 +81094,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_only_core_type_non_arrowed_core_type___ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35134 "reason_parser.ml" +# 39685 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84153,21 +81134,21 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 35176 "reason_parser.ml" +# 39727 "reason_parser.ml" in # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35182 "reason_parser.ml" +# 39733 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35188 "reason_parser.ml" +# 39739 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84185,7 +81166,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_poly_type__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35206 "reason_parser.ml" +# 39757 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84219,13 +81200,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35240 "reason_parser.ml" +# 39791 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35246 "reason_parser.ml" +# 39797 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84243,7 +81224,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLON_simple_module_type__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35264 "reason_parser.ml" +# 39815 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84277,13 +81258,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35298 "reason_parser.ml" +# 39849 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35304 "reason_parser.ml" +# 39855 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84301,7 +81282,7 @@ module Tables = struct let _v : 'tv_option_preceded_COLONGREATER_only_core_type_core_type___ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35322 "reason_parser.ml" +# 39873 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84341,21 +81322,21 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 35364 "reason_parser.ml" +# 39915 "reason_parser.ml" in # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35370 "reason_parser.ml" +# 39921 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35376 "reason_parser.ml" +# 39927 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84373,7 +81354,7 @@ module Tables = struct let _v : 'tv_option_preceded_WHEN_expr__ = # 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 35394 "reason_parser.ml" +# 39945 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84407,13 +81388,13 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 35428 "reason_parser.ml" +# 39979 "reason_parser.ml" in # 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 35434 "reason_parser.ml" +# 39985 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84428,10 +81409,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_option_type_constraint_ = -# 100 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( None ) -# 35452 "reason_parser.ml" + let _v : 'tv_optional = +# 4648 "reason_parser.mly" + ( fun x -> Labelled x ) +# 40003 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84444,19 +81425,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_type_constraint = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_type_constraint_ = -# 102 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( Some x ) -# 35477 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_optional = +# 4649 "reason_parser.mly" + ( fun x -> Optional x ) +# 40028 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84471,10 +81452,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : 'tv_optional = -# 4333 "reason_parser.mly" - ( fun x -> Labelled x ) -# 35495 "reason_parser.ml" + let _v : 'tv_optional_expr_extension = +# 2717 "reason_parser.mly" + ( fun exp -> exp ) +# 40046 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84492,14 +81473,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : 'tv_item_extension_sugar = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_optional = -# 4334 "reason_parser.mly" - ( fun x -> Optional x ) -# 35520 "reason_parser.ml" + let _v : 'tv_optional_expr_extension = +# 2718 "reason_parser.mly" + ( fun exp -> expression_extension _1 exp ) +# 40071 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84515,9 +81496,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_override_flag = -# 4226 "reason_parser.mly" +# 4540 "reason_parser.mly" ( Fresh ) -# 35538 "reason_parser.ml" +# 40089 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84540,9 +81521,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_override_flag = -# 4227 "reason_parser.mly" +# 4541 "reason_parser.mly" ( Override ) -# 35563 "reason_parser.ml" +# 40114 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84577,15 +81558,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 35600 "reason_parser.ml" +# 40151 "reason_parser.ml" in -# 3980 "reason_parser.mly" +# 4294 "reason_parser.mly" ( (_1, _2) ) -# 35606 "reason_parser.ml" +# 40157 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84632,9 +81613,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 35655 "reason_parser.ml" +# 40206 "reason_parser.ml" in let _2 = @@ -84644,15 +81625,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 35667 "reason_parser.ml" +# 40218 "reason_parser.ml" in -# 3985 "reason_parser.mly" +# 4299 "reason_parser.mly" ( (_2, _4) ) -# 35673 "reason_parser.ml" +# 40224 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84675,9 +81656,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_parenthesized_expr = -# 2664 "reason_parser.mly" +# 2872 "reason_parser.mly" ( _1 ) -# 35698 "reason_parser.ml" +# 40249 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84689,29 +81670,35 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_parenthesized_expr = let _endpos = _endpos__2_ in + let _endpos = _endpos__3_ in + let _v : 'tv_parenthesized_expr = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2666 "reason_parser.mly" +# 2874 "reason_parser.mly" ( let loc = mklocation _startpos _endpos in - mkexp_constructor_unit loc loc ) -# 35732 "reason_parser.ml" + mkexp_constructor_unit ~uncurried:true loc loc ) +# 40289 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84748,9 +81735,9 @@ module Tables = struct let _v : 'tv_parenthesized_expr = let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2669 "reason_parser.mly" +# 2877 "reason_parser.mly" ( may_tuple _startpos _endpos _2 ) -# 35771 "reason_parser.ml" +# 40328 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84779,9 +81766,9 @@ module Tables = struct let _startpos = _startpos__10_ in let _endpos = _endpos__2_ in let _v : ( -# 1211 "reason_parser.mly" +# 1331 "reason_parser.mly" (Ast_404.Parsetree.core_type) -# 35802 "reason_parser.ml" +# 40359 "reason_parser.ml" ) = let _1 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in @@ -84789,15 +81776,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 35812 "reason_parser.ml" +# 40369 "reason_parser.ml" in -# 1272 "reason_parser.mly" +# 1392 "reason_parser.mly" ( apply_mapper_to_type _1 reason_mapper ) -# 35818 "reason_parser.ml" +# 40375 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84826,13 +81813,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : ( -# 1213 "reason_parser.mly" +# 1333 "reason_parser.mly" (Ast_404.Parsetree.expression) -# 35849 "reason_parser.ml" +# 40406 "reason_parser.ml" ) = -# 1277 "reason_parser.mly" +# 1397 "reason_parser.mly" ( apply_mapper_to_expr _1 reason_mapper ) -# 35853 "reason_parser.ml" +# 40410 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84861,13 +81848,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : ( -# 1215 "reason_parser.mly" +# 1335 "reason_parser.mly" (Ast_404.Parsetree.pattern) -# 35884 "reason_parser.ml" +# 40441 "reason_parser.ml" ) = -# 1282 "reason_parser.mly" +# 1402 "reason_parser.mly" ( apply_mapper_to_pattern _1 reason_mapper ) -# 35888 "reason_parser.ml" +# 40445 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84890,9 +81877,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pattern = -# 3189 "reason_parser.mly" +# 3468 "reason_parser.mly" ( _1 ) -# 35913 "reason_parser.ml" +# 40470 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84937,9 +81924,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3190 "reason_parser.mly" +# 3469 "reason_parser.mly" ( mkpat(Ppat_or(_1, _3)) ) -# 35960 "reason_parser.ml" +# 40517 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -84947,15 +81934,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 35970 "reason_parser.ml" +# 40527 "reason_parser.ml" in -# 3190 "reason_parser.mly" +# 3469 "reason_parser.mly" ( _1 ) -# 35976 "reason_parser.ml" +# 40533 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -84967,54 +81954,60 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in + let _5 : 'tv_option_COMMA_ = Obj.magic _5 in let _4 : 'tv_pattern = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _100 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in - let _endpos = _endpos__4_ in + let _endpos = _endpos__5_ in let _v : 'tv_pattern_comma_list_extension = let _1 = let _10 = _100 in let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 36023 "reason_parser.ml" +# 40586 "reason_parser.ml" in -# 3377 "reason_parser.mly" +# 3661 "reason_parser.mly" ( _1 ) -# 36029 "reason_parser.ml" +# 40592 "reason_parser.ml" in -# 3381 "reason_parser.mly" - ( (_1, Some _4) ) -# 36035 "reason_parser.ml" +# 3665 "reason_parser.mly" + ( (_1, Some _4) ) +# 40598 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85047,21 +82040,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 36070 "reason_parser.ml" +# 40633 "reason_parser.ml" in -# 3377 "reason_parser.mly" +# 3661 "reason_parser.mly" ( _1 ) -# 36076 "reason_parser.ml" +# 40639 "reason_parser.ml" in -# 3382 "reason_parser.mly" +# 3666 "reason_parser.mly" ( (_1, None) ) -# 36082 "reason_parser.ml" +# 40645 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85084,9 +82077,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pattern_constructor_argument = -# 3195 "reason_parser.mly" +# 3477 "reason_parser.mly" ( [_1] ) -# 36107 "reason_parser.ml" +# 40670 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85102,48 +82095,73 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_pattern_optional_constraint_ = Obj.magic x00 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = Obj.magic _10000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_pattern_constructor_argument = let _1 = let _30 = _300 in - let x0 = x00 in + let _200 = _2000 in + let _1000 = _10000 in let _10 = _100 in let _1 = let _3 = _30 in - let x = x0 in + let _20 = _200 in + let _100 = _1000 in let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 40728 "reason_parser.ml" + + in + +# 3473 "reason_parser.mly" + ( _1 ) +# 40734 "reason_parser.ml" + + in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 36152 "reason_parser.ml" +# 40740 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 36158 "reason_parser.ml" +# 40746 "reason_parser.ml" in -# 3197 "reason_parser.mly" +# 3479 "reason_parser.mly" ( _1 ) -# 36164 "reason_parser.ml" +# 40752 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85172,9 +82190,9 @@ module Tables = struct let x = let _1 = _10 in -# 3371 "reason_parser.mly" +# 3655 "reason_parser.mly" ( _1 ) -# 36195 "reason_parser.ml" +# 40783 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -85182,15 +82200,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36205 "reason_parser.ml" +# 40793 "reason_parser.ml" in -# 3373 "reason_parser.mly" +# 3657 "reason_parser.mly" (_1) -# 36211 "reason_parser.ml" +# 40799 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85244,15 +82262,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 36267 "reason_parser.ml" +# 40855 "reason_parser.ml" in -# 3372 "reason_parser.mly" +# 3656 "reason_parser.mly" ( mkpat(Ppat_constraint(_1, _3)) ) -# 36273 "reason_parser.ml" +# 40861 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -85260,15 +82278,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36283 "reason_parser.ml" +# 40871 "reason_parser.ml" in -# 3373 "reason_parser.mly" +# 3657 "reason_parser.mly" (_1) -# 36289 "reason_parser.ml" +# 40877 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85297,9 +82315,9 @@ module Tables = struct let x = let _1 = _10 in -# 3220 "reason_parser.mly" +# 3502 "reason_parser.mly" ( _1 ) -# 36320 "reason_parser.ml" +# 40908 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -85307,15 +82325,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36330 "reason_parser.ml" +# 40918 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36336 "reason_parser.ml" +# 40924 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85369,15 +82387,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 36392 "reason_parser.ml" +# 40980 "reason_parser.ml" in -# 3223 "reason_parser.mly" +# 3505 "reason_parser.mly" ( mkpat(Ppat_alias(_1, _3)) ) -# 36398 "reason_parser.ml" +# 40986 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -85385,15 +82403,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36408 "reason_parser.ml" +# 40996 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36414 "reason_parser.ml" +# 41002 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85447,15 +82465,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 36470 "reason_parser.ml" +# 41058 "reason_parser.ml" in -# 3226 "reason_parser.mly" +# 3508 "reason_parser.mly" ( expecting_pat (with_txt _3 "identifier") ) -# 36476 "reason_parser.ml" +# 41064 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -85463,15 +82481,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36486 "reason_parser.ml" +# 41074 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36492 "reason_parser.ml" +# 41080 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85518,16 +82536,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 36541 "reason_parser.ml" +# 41129 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in -# 3243 "reason_parser.mly" +# 3525 "reason_parser.mly" ( match is_pattern_list_single_any _2 with | Some singleAnyPat -> mkpat (Ppat_construct(_1, Some singleAnyPat)) @@ -85536,7 +82554,7 @@ module Tables = struct let argPattern = simple_pattern_list_to_tuple ~loc _2 in mkExplicitArityTuplePat (Ppat_construct(_1, Some argPattern)) ) -# 36557 "reason_parser.ml" +# 41145 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -85544,15 +82562,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36567 "reason_parser.ml" +# 41155 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36573 "reason_parser.ml" +# 41161 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85600,15 +82618,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 36623 "reason_parser.ml" +# 41211 "reason_parser.ml" in -# 3252 "reason_parser.mly" +# 3534 "reason_parser.mly" ( mkpat (Ppat_variant(_1, Some _2)) ) -# 36629 "reason_parser.ml" +# 41217 "reason_parser.ml" in let _endpos_x_ = _endpos__21_ in @@ -85616,15 +82634,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36639 "reason_parser.ml" +# 41227 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36645 "reason_parser.ml" +# 41233 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85679,16 +82697,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 36702 "reason_parser.ml" +# 41290 "reason_parser.ml" in -# 3255 "reason_parser.mly" - ( Location.raise_errorf ~loc:_2.loc +# 3537 "reason_parser.mly" + ( raiseSyntaxErrorFromSyntaxUtils _2.loc ":: is not supported in Reason, please use [hd, ...tl] instead" ) -# 36709 "reason_parser.ml" +# 41297 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -85696,15 +82714,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36719 "reason_parser.ml" +# 41307 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36725 "reason_parser.ml" +# 41313 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85758,15 +82776,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 36781 "reason_parser.ml" +# 41369 "reason_parser.ml" in -# 3259 "reason_parser.mly" +# 3541 "reason_parser.mly" ( expecting_pat (with_txt _3 "pattern") ) -# 36787 "reason_parser.ml" +# 41375 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -85774,15 +82792,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36797 "reason_parser.ml" +# 41385 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36803 "reason_parser.ml" +# 41391 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85875,12 +82893,12 @@ module Tables = struct let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 3262 "reason_parser.mly" +# 3544 "reason_parser.mly" ( let loc_coloncolon = mklocation _startpos__2_ _endpos__2_ in let loc = mklocation _symbolstartpos _endpos in mkpat_cons loc_coloncolon (mkpat ~ghost:true ~loc (Ppat_tuple[_5;_7])) loc ) -# 36901 "reason_parser.ml" +# 41489 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -85888,15 +82906,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 36911 "reason_parser.ml" +# 41499 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 36917 "reason_parser.ml" +# 41505 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -85993,9 +83011,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 37016 "reason_parser.ml" +# 41604 "reason_parser.ml" in let _1 = @@ -86005,15 +83023,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 37028 "reason_parser.ml" +# 41616 "reason_parser.ml" in -# 3269 "reason_parser.mly" +# 3551 "reason_parser.mly" ( unclosed_pat (with_txt _1 "(") (with_txt _8 ")") ) -# 37034 "reason_parser.ml" +# 41622 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -86021,15 +83039,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37044 "reason_parser.ml" +# 41632 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 37050 "reason_parser.ml" +# 41638 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86066,9 +83084,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3272 "reason_parser.mly" +# 3554 "reason_parser.mly" ( mkpat(Ppat_exception _2) ) -# 37089 "reason_parser.ml" +# 41677 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -86076,15 +83094,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37099 "reason_parser.ml" +# 41687 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 37105 "reason_parser.ml" +# 41693 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86121,9 +83139,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3274 "reason_parser.mly" +# 3556 "reason_parser.mly" ( mkpat(Ppat_lazy _2) ) -# 37144 "reason_parser.ml" +# 41732 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -86131,15 +83149,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37154 "reason_parser.ml" +# 41742 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 37160 "reason_parser.ml" +# 41748 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86176,9 +83194,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3282 "reason_parser.mly" +# 3564 "reason_parser.mly" ( {_2 with ppat_attributes = _1 :: _2.ppat_attributes} ) -# 37199 "reason_parser.ml" +# 41787 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -86186,15 +83204,40 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37209 "reason_parser.ml" +# 41797 "reason_parser.ml" in -# 3284 "reason_parser.mly" +# 3566 "reason_parser.mly" (_1) -# 37215 "reason_parser.ml" +# 41803 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_structure = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_payload = +# 4640 "reason_parser.mly" + ( PStr _1 ) +# 41828 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86206,20 +83249,26 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_structure = Obj.magic _1 in + let _2 : 'tv_signature = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__2_ in let _v : 'tv_payload = -# 4326 "reason_parser.mly" - ( PStr _1 ) -# 37240 "reason_parser.ml" +# 4641 "reason_parser.mly" + ( PSig _2 ) +# 41859 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86254,15 +83303,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 37277 "reason_parser.ml" +# 41896 "reason_parser.ml" in -# 4327 "reason_parser.mly" +# 4642 "reason_parser.mly" ( PTyp _2 ) -# 37283 "reason_parser.ml" +# 41902 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86291,9 +83340,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_payload = -# 4328 "reason_parser.mly" +# 4643 "reason_parser.mly" ( PPat (_2, None) ) -# 37314 "reason_parser.ml" +# 41933 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86334,9 +83383,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_payload = -# 4329 "reason_parser.mly" +# 4644 "reason_parser.mly" ( PPat (_2, Some _4) ) -# 37357 "reason_parser.ml" +# 41976 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86373,15 +83422,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 37396 "reason_parser.ml" +# 42015 "reason_parser.ml" in -# 3701 "reason_parser.mly" +# 3998 "reason_parser.mly" ( _1 ) -# 37402 "reason_parser.ml" +# 42021 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -86389,15 +83438,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4356 "reason_parser.mly" +# 4671 "reason_parser.mly" ( {x with ptyp_loc = {x.ptyp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37412 "reason_parser.ml" +# 42031 "reason_parser.ml" in -# 3704 "reason_parser.mly" +# 4001 "reason_parser.mly" (_1) -# 37418 "reason_parser.ml" +# 42037 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86451,15 +83500,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 37474 "reason_parser.ml" +# 42093 "reason_parser.ml" in -# 3703 "reason_parser.mly" +# 4000 "reason_parser.mly" ( mktyp(Ptyp_poly(_1, _3)) ) -# 37480 "reason_parser.ml" +# 42099 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -86467,15 +83516,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4356 "reason_parser.mly" +# 4671 "reason_parser.mly" ( {x with ptyp_loc = {x.ptyp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 37490 "reason_parser.ml" +# 42109 "reason_parser.ml" in -# 3704 "reason_parser.mly" +# 4001 "reason_parser.mly" (_1) -# 37496 "reason_parser.ml" +# 42115 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86498,11 +83547,11 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 37523 "reason_parser.ml" +# 42142 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -86510,18 +83559,18 @@ module Tables = struct let _v : 'tv_potentially_long_ident_and_optional_type_parameters = let _2 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 37533 "reason_parser.ml" +# 42152 "reason_parser.ml" in -# 3613 "reason_parser.mly" +# 3903 "reason_parser.mly" ( let loc = mklocation _startpos__1_ _endpos__1_ in let lident_lident_loc = mkloc (Lident _1) loc in (lident_lident_loc, _2) ) -# 37542 "reason_parser.ml" +# 42161 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86544,7 +83593,7 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : 'tv_type_strictly_longident = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x0_ in @@ -86552,9 +83601,9 @@ module Tables = struct let _v : 'tv_potentially_long_ident_and_optional_type_parameters = let _2 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 37575 "reason_parser.ml" +# 42194 "reason_parser.ml" in let _1 = @@ -86564,15 +83613,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 37587 "reason_parser.ml" +# 42206 "reason_parser.ml" in -# 3618 "reason_parser.mly" +# 3908 "reason_parser.mly" ((_1, _2)) -# 37593 "reason_parser.ml" +# 42212 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86590,14 +83639,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_nonempty_list___anonymous_34_ = Obj.magic _1 in + let _1 : 'tv_nonempty_list___anonymous_32_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primitive_declaration = -# 3405 "reason_parser.mly" +# 3689 "reason_parser.mly" ( _1 ) -# 37618 "reason_parser.ml" +# 42237 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86613,9 +83662,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_rec_flag = -# 4190 "reason_parser.mly" +# 4504 "reason_parser.mly" ( Nonrecursive ) -# 37636 "reason_parser.ml" +# 42255 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86638,187 +83687,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_rec_flag = -# 4191 "reason_parser.mly" +# 4505 "reason_parser.mly" ( Recursive ) -# 37661 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in - let x00 : 'tv_lbl_expr = Obj.magic x00 in - let _100 : unit = Obj.magic _100 in - let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__20_ in - let _v : 'tv_record_expr = let _3 = - let _2 = _20 in - let x0 = x00 in - let _10 = _100 in - let _1 = - let x = x0 in - let _1 = _10 in - -# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 37717 "reason_parser.ml" - - in - -# 4405 "reason_parser.mly" - ( _1 :: List.rev _2 ) -# 37723 "reason_parser.ml" - - in - -# 3113 "reason_parser.mly" - ( (Some _2, _3) ) -# 37729 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : 'tv_expr = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let x0 : 'tv_label_longident = Obj.magic x0 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x0_ in - let _endpos = _endpos__3_ in - let _v : 'tv_record_expr = let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 37772 "reason_parser.ml" - - in - -# 3115 "reason_parser.mly" - ( (None, [(_1, _3)]) ) -# 37778 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _20; - MenhirLib.EngineTypes.startp = _startpos__20_; - MenhirLib.EngineTypes.endp = _endpos__20_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _11; - MenhirLib.EngineTypes.startp = _startpos__11_; - MenhirLib.EngineTypes.endp = _endpos__11_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let _2 : 'tv_option_COMMA_ = Obj.magic _2 in - let _100 : 'tv_lseparated_nonempty_list_aux_COMMA_lbl_expr_ = Obj.magic _100 in - let _20 : unit = Obj.magic _20 in - let _11 : 'tv_lbl_expr = Obj.magic _11 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__11_ in - let _endpos = _endpos__2_ in - let _v : 'tv_record_expr = let _1 = - let _10 = _100 in - let _2 = _20 in - let _1 = _11 in - let _3 = - let _1 = _10 in - -# 4419 "reason_parser.mly" - ( List.rev _1 ) -# 37827 "reason_parser.ml" - - in - -# 4427 "reason_parser.mly" - ( _1 :: _3 ) -# 37833 "reason_parser.ml" - - in - -# 3117 "reason_parser.mly" - ( (None, _1) ) -# 37839 "reason_parser.ml" +# 42280 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -86830,371 +83701,125 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; - }; - }; - }; - } = _menhir_stack in - let _200 : 'tv_llist_aux_preceded_COMMA_string_literal_expr__ = Obj.magic _200 in - let x000 : 'tv_string_literal_expr = Obj.magic x000 in - let _1000 : unit = Obj.magic _1000 in - let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__200_ in - let _v : 'tv_record_expr_with_string_keys = let _3 = - let _20 = _200 in - let x00 = x000 in - let _100 = _1000 in - let _1 = - let _2 = _20 in - let x0 = x00 in - let _10 = _100 in - let _1 = - let x = x0 in - let _1 = _10 in - -# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 37899 "reason_parser.ml" - - in - -# 4405 "reason_parser.mly" - ( _1 :: List.rev _2 ) -# 37905 "reason_parser.ml" - - in - -# 3139 "reason_parser.mly" - ( _1 ) -# 37911 "reason_parser.ml" - - in - -# 3127 "reason_parser.mly" - ( (Some _2, _3) ) -# 37917 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : 'tv_expr = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 1049 "reason_parser.mly" - (string * string option) -# 37950 "reason_parser.ml" - ) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_record_expr_with_string_keys = let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - -# 3129 "reason_parser.mly" - ( let loc = mklocation _symbolstartpos _endpos in - let (s, d) = _1 in - let lident_lident_loc = mkloc (Lident s) loc in - (None, [(lident_lident_loc, _3)]) - ) -# 37964 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let _200 : 'tv_llist_aux_preceded_COMMA_string_literal_expr__ = Obj.magic _200 in - let x000 : 'tv_string_literal_expr = Obj.magic x000 in - let _1000 : unit = Obj.magic _1000 in - let _1 : 'tv_string_literal_expr = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__200_ in - let _v : 'tv_record_expr_with_string_keys = let _2 = - let _20 = _200 in - let x00 = x000 in - let _100 = _1000 in - let _1 = - let _2 = _20 in - let x0 = x00 in - let _10 = _100 in - let _1 = - let x = x0 in - let _1 = _10 in - -# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x ) -# 38018 "reason_parser.ml" - - in - -# 4405 "reason_parser.mly" - ( _1 :: List.rev _2 ) -# 38024 "reason_parser.ml" - - in - -# 3139 "reason_parser.mly" - ( _1 ) -# 38030 "reason_parser.ml" - - in - -# 3135 "reason_parser.mly" - ( (None, _1 :: _2) ) -# 38036 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_tag_field = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_row_field = -# 3994 "reason_parser.mly" - ( _1 ) -# 38061 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _10 : 'tv_non_arrowed_core_type = Obj.magic _10 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__10_ in - let _endpos = _endpos__10_ in - let _v : 'tv_row_field = let _1 = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in - let _1 = _10 in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - -# 4337 "reason_parser.mly" - ( only_core_type _1 _symbolstartpos _endpos ) -# 38092 "reason_parser.ml" - - in - -# 3995 "reason_parser.mly" - ( Rinherit _1 ) -# 38098 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : 'tv_list_bar_row_field_ = Obj.magic _2 in - let _1 : 'tv_row_field = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_row_field_list = -# 3989 "reason_parser.mly" - ( _1 :: _2 ) -# 38129 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : 'tv_list_bar_row_field_ = Obj.magic _2 in - let _1 : 'tv_bar_row_field = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_row_field_list = -# 3990 "reason_parser.mly" - ( _1 :: _2 ) -# 38160 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _200 : 'tv_semi_terminated_seq_expr_row = Obj.magic _200 in - let _100 : 'tv_item_extension_sugar = Obj.magic _100 in + let _4 : 'tv_option_COMMA_ = Obj.magic _4 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let _30000 : 'tv_expr = Obj.magic _30000 in + let _20000 : unit = Obj.magic _20000 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__200_ in - let _v : 'tv_semi_terminated_seq_expr = let _1 = - let _endpos__20_ = _endpos__200_ in - let _startpos__10_ = _startpos__100_ in - let _20 = _200 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_record_expr = let _3 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let _3000 = _30000 in + let _2000 = _20000 in + let x0000 = x00000 in let _10 = _100 in - let x = - let _2 = _20 in + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let _300 = _3000 in + let _200 = _2000 in + let x000 = x0000 in let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42380 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 42386 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 42392 "reason_parser.ml" + + in -# 2272 "reason_parser.mly" - ( extension_expression _1 _2 ) -# 38199 "reason_parser.ml" +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 42398 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38209 "reason_parser.ml" +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 42404 "reason_parser.ml" in -# 2282 "reason_parser.mly" - (_1) -# 38215 "reason_parser.ml" +# 3366 "reason_parser.mly" + ( (Some _2, _3) ) +# 42410 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87206,42 +83831,105 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _100 : 'tv_semi_terminated_seq_expr_row = Obj.magic _100 in + let _4 : 'tv_option_COMMA_ = Obj.magic _4 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__100_ in - let _v : 'tv_semi_terminated_seq_expr = let _1 = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_record_expr = let _3 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let x0000 = x00000 in let _10 = _100 in - let x = + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let x000 = x0000 in let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42490 "reason_parser.ml" + + in + +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 42496 "reason_parser.ml" + + in + +# 3383 "reason_parser.mly" + (_1) +# 42502 "reason_parser.ml" + + in -# 2274 "reason_parser.mly" - ( _1 ) -# 38246 "reason_parser.ml" +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 42508 "reason_parser.ml" in - let _endpos_x_ = _endpos__10_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38256 "reason_parser.ml" +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 42514 "reason_parser.ml" in -# 2282 "reason_parser.mly" - (_1) -# 38262 "reason_parser.ml" +# 3366 "reason_parser.mly" + ( (Some _2, _3) ) +# 42520 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87253,58 +83941,62 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _30; + MenhirLib.EngineTypes.startp = _startpos__30_; + MenhirLib.EngineTypes.endp = _endpos__30_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _300 : 'tv_semi_terminated_seq_expr = Obj.magic _300 in - let _200 : unit = Obj.magic _200 in - let _100 : 'tv_let_bindings = Obj.magic _100 in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _30 : 'tv_expr = Obj.magic _30 in + let _20 : unit = Obj.magic _20 in + let x00 : 'tv_label_longident = Obj.magic x00 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_semi_terminated_seq_expr = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in + let _startpos = _startpos_x00_ in + let _endpos = _endpos__2_ in + let _v : 'tv_record_expr = let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in -# 2277 "reason_parser.mly" - ( expr_of_let_bindings _1 _3 ) -# 38309 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42575 "reason_parser.ml" in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38319 "reason_parser.ml" +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 42581 "reason_parser.ml" in -# 2282 "reason_parser.mly" - (_1) -# 38325 "reason_parser.ml" +# 3368 "reason_parser.mly" + ( (None, [_1]) ) +# 42587 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87316,56 +84008,167 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _200 : 'tv_option_SEMI_ = Obj.magic _200 in - let _100 : 'tv_let_bindings = Obj.magic _100 in + let _3 : 'tv_option_COMMA_ = Obj.magic _3 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let _30000 : 'tv_expr = Obj.magic _30000 in + let _20000 : unit = Obj.magic _20000 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let _300 : 'tv_expr = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let x000 : 'tv_label_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__200_ in - let _v : 'tv_semi_terminated_seq_expr = let _1 = - let _endpos__20_ = _endpos__200_ in - let _startpos__10_ = _startpos__100_ in - let _20 = _200 in + let _startpos = _startpos_x000_ in + let _endpos = _endpos__3_ in + let _v : 'tv_record_expr = let _2 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let _3000 = _30000 in + let _2000 = _20000 in + let x0000 = x00000 in let _10 = _100 in - let x = - let _endpos__2_ = _endpos__20_ in - let _startpos__1_ = _startpos__10_ in - let _2 = _20 in + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let _300 = _3000 in + let _200 = _2000 in + let x000 = x0000 in let _1 = _10 in - let _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42693 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 42699 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 42705 "reason_parser.ml" + + in -# 2279 "reason_parser.mly" - ( let loc = mklocation _symbolstartpos _endpos in - expr_of_let_bindings _1 @@ ghunit ~loc () - ) -# 38370 "reason_parser.ml" +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 42711 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38380 "reason_parser.ml" +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 42717 "reason_parser.ml" + + in + let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42741 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 42747 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 42753 "reason_parser.ml" in -# 2282 "reason_parser.mly" - (_1) -# 38386 "reason_parser.ml" +# 3370 "reason_parser.mly" + ( (None, _1 :: _2) ) +# 42759 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87377,50 +84180,147 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _200 : 'tv_option_SEMI_ = Obj.magic _200 in - let _100 : 'tv_expr = Obj.magic _100 in + let _3 : 'tv_option_COMMA_ = Obj.magic _3 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let _300 : 'tv_expr = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let x000 : 'tv_label_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__200_ in - let _v : 'tv_semi_terminated_seq_expr_row = let _1 = - let _endpos__20_ = _endpos__200_ in - let _startpos__10_ = _startpos__100_ in - let _20 = _200 in + let _startpos = _startpos_x000_ in + let _endpos = _endpos__3_ in + let _v : 'tv_record_expr = let _2 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let x0000 = x00000 in let _10 = _100 in - let x = - let _2 = _20 in + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let x000 = x0000 in let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42845 "reason_parser.ml" + + in + +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 42851 "reason_parser.ml" + + in + +# 3383 "reason_parser.mly" + (_1) +# 42857 "reason_parser.ml" + + in -# 2286 "reason_parser.mly" - ( _1 ) -# 38425 "reason_parser.ml" +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 42863 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38435 "reason_parser.ml" +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 42869 "reason_parser.ml" + + in + let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 42893 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 42899 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 42905 "reason_parser.ml" in -# 2295 "reason_parser.mly" - (_1) -# 38441 "reason_parser.ml" +# 3370 "reason_parser.mly" + ( (None, _1 :: _2) ) +# 42911 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87432,94 +84332,151 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _500; - MenhirLib.EngineTypes.startp = _startpos__500_; - MenhirLib.EngineTypes.endp = _endpos__500_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _400; - MenhirLib.EngineTypes.startp = _startpos__400_; - MenhirLib.EngineTypes.endp = _endpos__400_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _30000; + MenhirLib.EngineTypes.startp = _startpos__30000_; + MenhirLib.EngineTypes.endp = _endpos__30000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = _20000; + MenhirLib.EngineTypes.startp = _startpos__20000_; + MenhirLib.EngineTypes.endp = _endpos__20000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; }; } = _menhir_stack in - let _500 : 'tv_semi_terminated_seq_expr = Obj.magic _500 in - let _400 : unit = Obj.magic _400 in - let _300 : 'tv_module_binding_body = Obj.magic _300 in - let x000 : ( -# 1057 "reason_parser.mly" - (string) -# 38485 "reason_parser.ml" - ) = Obj.magic x000 in - let _100 : 'tv_opt_LET_MODULE = Obj.magic _100 in + let _3 : 'tv_option_COMMA_ = Obj.magic _3 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let _30000 : 'tv_expr = Obj.magic _30000 in + let _20000 : unit = Obj.magic _20000 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let x000 : 'tv_label_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__500_ in - let _v : 'tv_semi_terminated_seq_expr_row = let _1 = + let _startpos = _startpos_x000_ in + let _endpos = _endpos__3_ in + let _v : 'tv_record_expr = let _2 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let _3000 = _30000 in + let _2000 = _20000 in + let x0000 = x00000 in + let _10 = _100 in + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let _300 = _3000 in + let _200 = _2000 in + let x000 = x0000 in + let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _30 = _300 in + let _20 = _200 in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let _3 = _30 in + let _2 = _20 in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 43005 "reason_parser.ml" + + in + +# 3374 "reason_parser.mly" + ( (_1, _3) ) +# 43011 "reason_parser.ml" + + in + +# 3382 "reason_parser.mly" + (_1) +# 43017 "reason_parser.ml" + + in + +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 43023 "reason_parser.ml" + + in + +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 43029 "reason_parser.ml" + + in + let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in - let _endpos__50_ = _endpos__500_ in - let _startpos__10_ = _startpos__100_ in - let _50 = _500 in - let _40 = _400 in - let _30 = _300 in let x00 = x000 in - let _10 = _100 in - let x = + let _1 = let _endpos_x0_ = _endpos_x00_ in let _startpos_x0_ = _startpos_x00_ in - let _5 = _50 in - let _4 = _40 in - let _3 = _30 in let x0 = x00 in - let _1 = _10 in - let _2 = + let _1 = let _endpos_x_ = _endpos_x0_ in let _startpos_x_ = _startpos_x0_ in let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 38518 "reason_parser.ml" +# 43049 "reason_parser.ml" in -# 2288 "reason_parser.mly" - ( mkexp (Pexp_letmodule(_2, _3, _5)) ) -# 38524 "reason_parser.ml" +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 43055 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38534 "reason_parser.ml" +# 3383 "reason_parser.mly" + (_1) +# 43061 "reason_parser.ml" in -# 2295 "reason_parser.mly" - (_1) -# 38540 "reason_parser.ml" +# 3370 "reason_parser.mly" + ( (None, _1 :: _2) ) +# 43067 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87531,98 +84488,131 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _600; - MenhirLib.EngineTypes.startp = _startpos__600_; - MenhirLib.EngineTypes.endp = _endpos__600_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _500; - MenhirLib.EngineTypes.startp = _startpos__500_; - MenhirLib.EngineTypes.endp = _endpos__500_; + MenhirLib.EngineTypes.semv = _20; + MenhirLib.EngineTypes.startp = _startpos__20_; + MenhirLib.EngineTypes.endp = _endpos__20_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.semv = x00000; + MenhirLib.EngineTypes.startp = _startpos_x00000_; + MenhirLib.EngineTypes.endp = _endpos_x00000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _600 : 'tv_semi_terminated_seq_expr = Obj.magic _600 in - let _500 : unit = Obj.magic _500 in - let x000 : 'tv_mod_longident = Obj.magic x000 in - let _300 : 'tv_override_flag = Obj.magic _300 in - let _200 : unit = Obj.magic _200 in - let _100 : 'tv_option_LET_ = Obj.magic _100 in + let _3 : 'tv_option_COMMA_ = Obj.magic _3 in + let _20 : 'tv_llist_aux_preceded_COMMA_lbl_expr__ = Obj.magic _20 in + let x00000 : 'tv_label_longident = Obj.magic x00000 in + let _100 : unit = Obj.magic _100 in + let x000 : 'tv_label_longident = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__600_ in - let _v : 'tv_semi_terminated_seq_expr_row = let _1 = + let _startpos = _startpos_x000_ in + let _endpos = _endpos__3_ in + let _v : 'tv_record_expr = let _2 = + let _endpos_x0000_ = _endpos_x00000_ in + let _startpos_x0000_ = _startpos_x00000_ in + let _2 = _20 in + let x0000 = x00000 in + let _10 = _100 in + let _1 = + let _endpos_x000_ = _endpos_x0000_ in + let _startpos_x000_ = _startpos_x0000_ in + let x000 = x0000 in + let _1 = _10 in + let x = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x00 = x000 in + let _1 = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 43141 "reason_parser.ml" + + in + +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 43147 "reason_parser.ml" + + in + +# 3383 "reason_parser.mly" + (_1) +# 43153 "reason_parser.ml" + + in + +# 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" + ( x ) +# 43159 "reason_parser.ml" + + in + +# 4720 "reason_parser.mly" + ( _1 :: List.rev _2 ) +# 43165 "reason_parser.ml" + + in + let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in - let _endpos__60_ = _endpos__600_ in - let _startpos__10_ = _startpos__100_ in - let _60 = _600 in - let _50 = _500 in let x00 = x000 in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = + let _1 = let _endpos_x0_ = _endpos_x00_ in let _startpos_x0_ = _startpos_x00_ in - let _6 = _60 in - let _5 = _50 in let x0 = x00 in - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in - let _4 = + let _1 = let _endpos_x_ = _endpos_x0_ in let _startpos_x_ = _startpos_x0_ in let x = x0 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 38621 "reason_parser.ml" +# 43185 "reason_parser.ml" in -# 2290 "reason_parser.mly" - ( mkexp (Pexp_open(_3, _4, _6)) ) -# 38627 "reason_parser.ml" +# 3378 "reason_parser.mly" + ( (_1, exp_of_label _1) ) +# 43191 "reason_parser.ml" in - let _endpos_x_ = _endpos__60_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38637 "reason_parser.ml" +# 3383 "reason_parser.mly" + (_1) +# 43197 "reason_parser.ml" in -# 2295 "reason_parser.mly" - (_1) -# 38643 "reason_parser.ml" +# 3370 "reason_parser.mly" + ( (None, _1 :: _2) ) +# 43203 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87634,59 +84624,38 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _300 : 'tv_semi_terminated_seq_expr = Obj.magic _300 in - let _200 : unit = Obj.magic _200 in - let _100 : 'tv_str_exception_declaration = Obj.magic _100 in + let _4 : 'tv_string_literal_exprs_maybe_punned = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : 'tv_expr_optional_constraint = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_semi_terminated_seq_expr_row = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in - -# 2291 "reason_parser.mly" - ( - mkexp (Pexp_letexception (_1, _3)) ) -# 38691 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38701 "reason_parser.ml" - - in - -# 2295 "reason_parser.mly" - (_1) -# 38707 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_record_expr_with_string_keys = +# 3388 "reason_parser.mly" + ( (Some _2, _4) ) +# 43246 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87698,58 +84667,143 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _300 : 'tv_semi_terminated_seq_expr = Obj.magic _300 in - let _200 : unit = Obj.magic _200 in - let _100 : 'tv_expr = Obj.magic _100 in + let _4 : 'tv_option_COMMA_ = Obj.magic _4 in + let _3 : 'tv_expr = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 1169 "reason_parser.mly" + (string * string option) +# 43285 "reason_parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_semi_terminated_seq_expr_row = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in - -# 2294 "reason_parser.mly" - ( mkexp (Pexp_sequence(_1, _3)) ) -# 38754 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_record_expr_with_string_keys = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + +# 3390 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + let (s, d) = _1 in + let lident_lident_loc = mkloc (Lident s) loc in + (None, [(lident_lident_loc, _3)]) + ) +# 43299 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_string_literal_exprs_maybe_punned = Obj.magic _2 in + let _1 : 'tv_string_literal_expr_maybe_punned_with_comma = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_record_expr_with_string_keys = +# 3395 "reason_parser.mly" + ( + (None, _1 :: _2) + ) +# 43332 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_tag_field = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_row_field = +# 4308 "reason_parser.mly" + ( _1 ) +# 43357 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _10 : 'tv_non_arrowed_core_type = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__10_ in + let _v : 'tv_row_field = let _1 = + let _endpos__1_ = _endpos__10_ in + let _startpos__1_ = _startpos__10_ in + let _1 = _10 in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in -# 4352 "reason_parser.mly" - ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 38764 "reason_parser.ml" +# 4652 "reason_parser.mly" + ( only_core_type _1 _symbolstartpos _endpos ) +# 43388 "reason_parser.ml" in -# 2295 "reason_parser.mly" - (_1) -# 38770 "reason_parser.ml" +# 4309 "reason_parser.mly" + ( Rinherit _1 ) +# 43394 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87761,20 +84815,26 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_non_arrowed_simple_core_types = Obj.magic x in + let _2 : 'tv_list_bar_row_field_ = Obj.magic _2 in + let _1 : 'tv_row_field = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 38795 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_row_field_list = +# 4303 "reason_parser.mly" + ( _1 :: _2 ) +# 43425 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87786,32 +84846,26 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let x : 'tv_non_arrowed_simple_core_types = Obj.magic x in + let _2 : 'tv_list_bar_row_field_ = Obj.magic _2 in + let _1 : 'tv_bar_row_field = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 38832 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_row_field_list = +# 4304 "reason_parser.mly" + ( _1 :: _2 ) +# 43456 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87829,14 +84883,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_package_type_cstr = Obj.magic x in + let x : 'tv_non_arrowed_simple_core_types = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_AND_package_type_cstr_ = + let _v : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = # 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 38857 "reason_parser.ml" +# 43481 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87864,16 +84918,16 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_AND_package_type_cstr_ = Obj.magic xs in + let xs : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let x : 'tv_package_type_cstr = Obj.magic x in + let x : 'tv_non_arrowed_simple_core_types = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_AND_package_type_cstr_ = + let _v : 'tv_separated_nonempty_list_AMPERSAND_non_arrowed_simple_core_types_ = # 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 38894 "reason_parser.ml" +# 43518 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87891,14 +84945,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_expr_optional_constraint = Obj.magic x in + let x : 'tv_package_type_cstr = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_expr_optional_constraint_ = + let _v : 'tv_separated_nonempty_list_AND_package_type_cstr_ = # 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( [ x ] ) -# 38919 "reason_parser.ml" +# 43543 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87926,16 +84980,16 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_expr_optional_constraint_ = Obj.magic xs in + let xs : 'tv_separated_nonempty_list_AND_package_type_cstr_ = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let x : 'tv_expr_optional_constraint = Obj.magic x in + let x : 'tv_package_type_cstr = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_expr_optional_constraint_ = + let _v : 'tv_separated_nonempty_list_AND_package_type_cstr_ = # 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x :: xs ) -# 38956 "reason_parser.ml" +# 43580 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87948,19 +85002,111 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_labeled_expr = Obj.magic x in + let _100 : 'tv_seq_expr_no_seq = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_labeled_expr_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 38981 "reason_parser.ml" + let _startpos = _startpos__100_ in + let _endpos = _endpos__100_ in + let _v : 'tv_seq_expr = let _1 = + let _endpos__10_ = _endpos__100_ in + let _startpos__10_ = _startpos__100_ in + let _10 = _100 in + let x = + let _1 = _10 in + +# 2433 "reason_parser.mly" + ( _1 ) +# 43611 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__10_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 43621 "reason_parser.ml" + + in + +# 2440 "reason_parser.mly" + ( _1 ) +# 43627 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let x000 : 'tv_seq_expr_no_seq = Obj.magic x000 in + let _100 : 'tv_item_extension_sugar = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos_x000_ in + let _v : 'tv_seq_expr = let _1 = + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let _startpos__10_ = _startpos__100_ in + let x00 = x000 in + let _10 = _100 in + let x = + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x0 = x00 in + let _1 = _10 in + let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 43675 "reason_parser.ml" + + in + +# 2435 "reason_parser.mly" + ( expression_extension _1 _2 ) +# 43681 "reason_parser.ml" + + in + let _endpos_x_ = _endpos_x00_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 43691 "reason_parser.ml" + + in + +# 2440 "reason_parser.mly" + ( _1 ) +# 43697 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -87972,57 +85118,58 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_labeled_expr_ = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let x : 'tv_labeled_expr = Obj.magic x in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_labeled_expr_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39018 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_labeled_pattern = Obj.magic x in + let _300 : 'tv_seq_expr = Obj.magic _300 in + let _200 : unit = Obj.magic _200 in + let _100 : 'tv_expr = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_labeled_pattern_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 39043 "reason_parser.ml" + let _startpos = _startpos__100_ in + let _endpos = _endpos__300_ in + let _v : 'tv_seq_expr = let _1 = + let _endpos__30_ = _endpos__300_ in + let _startpos__10_ = _startpos__100_ in + let _30 = _300 in + let _20 = _200 in + let _10 = _100 in + let x = + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + +# 2437 "reason_parser.mly" + ( mkexp (Pexp_sequence(_1, _3)) ) +# 43744 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__30_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 43754 "reason_parser.ml" + + in + +# 2440 "reason_parser.mly" + ( _1 ) +# 43760 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88034,32 +85181,66 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_labeled_pattern_ = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let x : 'tv_labeled_pattern = Obj.magic x in + let _400 : 'tv_seq_expr = Obj.magic _400 in + let _300 : unit = Obj.magic _300 in + let _200 : 'tv_expr = Obj.magic _200 in + let _100 : 'tv_item_extension_sugar = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_labeled_pattern_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39080 "reason_parser.ml" + let _startpos = _startpos__100_ in + let _endpos = _endpos__400_ in + let _v : 'tv_seq_expr = let _1 = + let _endpos__40_ = _endpos__400_ in + let _startpos__10_ = _startpos__100_ in + let _40 = _400 in + let _30 = _300 in + let _20 = _200 in + let _10 = _100 in + let x = + let _4 = _40 in + let _3 = _30 in + let _2 = _20 in + let _1 = _10 in + +# 2439 "reason_parser.mly" + ( mkexp (Pexp_sequence(expression_extension _1 _2, _4)) ) +# 43815 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__40_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4667 "reason_parser.mly" + ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 43825 "reason_parser.ml" + + in + +# 2440 "reason_parser.mly" + ( _1 ) +# 43831 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88071,20 +85252,26 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_module_complex_expr = Obj.magic x in + let _2 : 'tv_option_SEMI_ = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_module_complex_expr_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 39105 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_seq_expr_no_seq = +# 2415 "reason_parser.mly" + ( _1 ) +# 43862 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88096,32 +85283,60 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_module_complex_expr_ = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let x : 'tv_module_complex_expr = Obj.magic x in + let _5 : 'tv_seq_expr = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : 'tv_module_binding_body = Obj.magic _3 in + let x0 : ( +# 1177 "reason_parser.mly" + (string) +# 43906 "reason_parser.ml" + ) = Obj.magic x0 in + let _1 : 'tv_opt_LET_MODULE = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_module_complex_expr_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39142 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_seq_expr_no_seq = let _2 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 43921 "reason_parser.ml" + + in + +# 2417 "reason_parser.mly" + ( mkexp (Pexp_letmodule(_2, _3, _5)) ) +# 43927 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88133,32 +85348,62 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _10 : 'tv_core_type = Obj.magic _10 in + let _6 : 'tv_seq_expr = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let x0 : 'tv_mod_longident = Obj.magic x0 in + let _3 : 'tv_override_flag = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : 'tv_option_LET_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__10_ in - let _endpos = _endpos__10_ in - let _v : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = let x = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in - let _1 = _10 in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in + let _v : 'tv_seq_expr_no_seq = let _4 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in -# 4337 "reason_parser.mly" - ( only_core_type _1 _symbolstartpos _endpos ) -# 39173 "reason_parser.ml" +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 43988 "reason_parser.ml" in -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 39179 "reason_parser.ml" +# 2419 "reason_parser.mly" + ( mkexp (Pexp_open(_3, _4, _6)) ) +# 43994 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88170,69 +85415,33 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = Obj.magic xs in + let _3 : 'tv_seq_expr = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _10 : 'tv_core_type = Obj.magic _10 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__10_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = let x = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in - let _1 = _10 in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - -# 4337 "reason_parser.mly" - ( only_core_type _1 _symbolstartpos _endpos ) -# 39222 "reason_parser.ml" - - in - -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39228 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_pattern_optional_constraint = Obj.magic x in + let _1 : 'tv_str_exception_declaration = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_pattern_optional_constraint_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 39253 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_seq_expr_no_seq = +# 2420 "reason_parser.mly" + ( + mkexp (Pexp_letexception (_1, _3)) ) +# 44032 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88244,57 +85453,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_pattern_optional_constraint_ = Obj.magic xs in + let _3 : 'tv_seq_expr = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let x : 'tv_pattern_optional_constraint = Obj.magic x in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_pattern_optional_constraint_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39290 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_type_variable_with_variance = Obj.magic x in + let _1 : 'tv_let_bindings = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_COMMA_type_variable_with_variance_ = -# 215 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( [ x ] ) -# 39315 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_seq_expr_no_seq = +# 2423 "reason_parser.mly" + ( expr_of_let_bindings _1 _3 ) +# 44069 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88306,32 +85490,30 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_COMMA_type_variable_with_variance_ = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let x : 'tv_type_variable_with_variance = Obj.magic x in + let _2 : 'tv_option_SEMI_ = Obj.magic _2 in + let _1 : 'tv_let_bindings = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_COMMA_type_variable_with_variance_ = -# 217 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" - ( x :: xs ) -# 39352 "reason_parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_seq_expr_no_seq = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + +# 2425 "reason_parser.mly" + ( let loc = mklocation _symbolstartpos _endpos in + expr_of_let_bindings _1 @@ ghunit ~loc () + ) +# 44104 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88361,15 +85543,15 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_sig_exception_declaration = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 39384 "reason_parser.ml" +# 44136 "reason_parser.ml" in -# 3568 "reason_parser.mly" +# 3854 "reason_parser.mly" ( {_3 with pext_attributes = _3.pext_attributes @ _1} ) -# 39390 "reason_parser.ml" +# 44142 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88408,21 +85590,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 39431 "reason_parser.ml" +# 44183 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 39437 "reason_parser.ml" +# 44189 "reason_parser.ml" in -# 3568 "reason_parser.mly" +# 3854 "reason_parser.mly" ( {_3 with pext_attributes = _3.pext_attributes @ _1} ) -# 39443 "reason_parser.ml" +# 44195 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88476,19 +85658,19 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : 'tv_sig_type_extension = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 39499 "reason_parser.ml" +# 44251 "reason_parser.ml" in -# 3638 "reason_parser.mly" +# 3928 "reason_parser.mly" ( if _3 <> Recursive then not_expecting _startpos__3_ _endpos__3_ "nonrec flag"; let (potentially_long_ident, params) = _4 in Te.mk potentially_long_ident _7 ~params ~priv:_6 ~attrs:_1 ) -# 39509 "reason_parser.ml" +# 44261 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88551,25 +85733,25 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 39574 "reason_parser.ml" +# 44326 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 39580 "reason_parser.ml" +# 44332 "reason_parser.ml" in -# 3638 "reason_parser.mly" +# 3928 "reason_parser.mly" ( if _3 <> Recursive then not_expecting _startpos__3_ _endpos__3_ "nonrec flag"; let (potentially_long_ident, params) = _4 in Te.mk potentially_long_ident _7 ~params ~priv:_6 ~attrs:_1 ) -# 39590 "reason_parser.ml" +# 44342 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88585,9 +85767,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_signature = -# 1705 "reason_parser.mly" +# 1833 "reason_parser.mly" ( [] ) -# 39608 "reason_parser.ml" +# 44360 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88610,9 +85792,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_signature = -# 1706 "reason_parser.mly" +# 1834 "reason_parser.mly" ( _1 ) -# 39633 "reason_parser.ml" +# 44385 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88647,9 +85829,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_signature = -# 1707 "reason_parser.mly" +# 1835 "reason_parser.mly" ( _1 @ _3 ) -# 39670 "reason_parser.ml" +# 44422 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88716,9 +85898,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 39739 "reason_parser.ml" +# 44491 "reason_parser.ml" in let _endpos__5_ = _endpos__10_ in @@ -88729,16 +85911,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 39752 "reason_parser.ml" +# 44504 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 39759 "reason_parser.ml" +# 44511 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -88749,11 +85931,11 @@ module Tables = struct else _startpos__2_ in -# 1714 "reason_parser.mly" +# 1842 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_value (Val.mk _3 _5 ~attrs:_1 ~loc)) ) -# 39774 "reason_parser.ml" +# 44526 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -88761,15 +85943,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 39784 "reason_parser.ml" +# 44536 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 39790 "reason_parser.ml" +# 44542 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88848,9 +86030,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 39871 "reason_parser.ml" +# 44623 "reason_parser.ml" in let _endpos__5_ = _endpos__10_ in @@ -88861,9 +86043,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 39884 "reason_parser.ml" +# 44636 "reason_parser.ml" in let _1 = @@ -88871,15 +86053,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 39894 "reason_parser.ml" +# 44646 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 39900 "reason_parser.ml" +# 44652 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -88890,11 +86072,11 @@ module Tables = struct else _startpos__2_ in -# 1714 "reason_parser.mly" +# 1842 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_value (Val.mk _3 _5 ~attrs:_1 ~loc)) ) -# 39915 "reason_parser.ml" +# 44667 "reason_parser.ml" in let _endpos_x_ = _endpos__101_ in @@ -88902,15 +86084,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 39925 "reason_parser.ml" +# 44677 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 39931 "reason_parser.ml" +# 44683 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -88995,9 +86177,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 40018 "reason_parser.ml" +# 44770 "reason_parser.ml" in let _3 = @@ -89007,16 +86189,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40030 "reason_parser.ml" +# 44782 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 40037 "reason_parser.ml" +# 44789 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -89027,11 +86209,11 @@ module Tables = struct else _startpos__2_ in -# 1719 "reason_parser.mly" +# 1847 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_value (Val.mk _3 _5 ~prim:_7 ~attrs:_1 ~loc)) ) -# 40052 "reason_parser.ml" +# 44804 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -89039,15 +86221,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40062 "reason_parser.ml" +# 44814 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40068 "reason_parser.ml" +# 44820 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89144,9 +86326,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 40167 "reason_parser.ml" +# 44919 "reason_parser.ml" in let _3 = @@ -89156,9 +86338,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40179 "reason_parser.ml" +# 44931 "reason_parser.ml" in let _1 = @@ -89166,15 +86348,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 40189 "reason_parser.ml" +# 44941 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 40195 "reason_parser.ml" +# 44947 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -89185,11 +86367,11 @@ module Tables = struct else _startpos__2_ in -# 1719 "reason_parser.mly" +# 1847 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_value (Val.mk _3 _5 ~prim:_7 ~attrs:_1 ~loc)) ) -# 40210 "reason_parser.ml" +# 44962 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -89197,15 +86379,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40220 "reason_parser.ml" +# 44972 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40226 "reason_parser.ml" +# 44978 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89234,9 +86416,9 @@ module Tables = struct let x = let _1 = _10 in -# 1723 "reason_parser.mly" +# 1851 "reason_parser.mly" ( let (nonrec_flag, tyl) = _1 in mksig (Psig_type (nonrec_flag, tyl)) ) -# 40257 "reason_parser.ml" +# 45009 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -89244,15 +86426,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40267 "reason_parser.ml" +# 45019 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40273 "reason_parser.ml" +# 45025 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89281,9 +86463,9 @@ module Tables = struct let x = let _1 = _10 in -# 1725 "reason_parser.mly" +# 1853 "reason_parser.mly" ( mksig(Psig_typext _1) ) -# 40304 "reason_parser.ml" +# 45056 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -89291,15 +86473,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40314 "reason_parser.ml" +# 45066 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40320 "reason_parser.ml" +# 45072 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89328,9 +86510,9 @@ module Tables = struct let x = let _1 = _10 in -# 1727 "reason_parser.mly" +# 1855 "reason_parser.mly" ( mksig(Psig_exception _1) ) -# 40351 "reason_parser.ml" +# 45103 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -89338,15 +86520,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40361 "reason_parser.ml" +# 45113 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40367 "reason_parser.ml" +# 45119 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89376,9 +86558,9 @@ module Tables = struct } = _menhir_stack in let _400 : 'tv_module_declaration = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 40399 "reason_parser.ml" +# 45151 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -89407,16 +86589,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40430 "reason_parser.ml" +# 45182 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 40437 "reason_parser.ml" +# 45189 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -89427,11 +86609,11 @@ module Tables = struct else _startpos__2_ in -# 1729 "reason_parser.mly" +# 1857 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_module (Md.mk _3 _4 ~attrs:_1 ~loc)) ) -# 40452 "reason_parser.ml" +# 45204 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -89439,15 +86621,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40462 "reason_parser.ml" +# 45214 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40468 "reason_parser.ml" +# 45220 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89482,9 +86664,9 @@ module Tables = struct } = _menhir_stack in let _400 : 'tv_module_declaration = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 40505 "reason_parser.ml" +# 45257 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in @@ -89520,9 +86702,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40543 "reason_parser.ml" +# 45295 "reason_parser.ml" in let _1 = @@ -89530,15 +86712,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 40553 "reason_parser.ml" +# 45305 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 40559 "reason_parser.ml" +# 45311 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -89549,11 +86731,11 @@ module Tables = struct else _startpos__2_ in -# 1729 "reason_parser.mly" +# 1857 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_module (Md.mk _3 _4 ~attrs:_1 ~loc)) ) -# 40574 "reason_parser.ml" +# 45326 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -89561,15 +86743,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40584 "reason_parser.ml" +# 45336 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40590 "reason_parser.ml" +# 45342 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89605,9 +86787,9 @@ module Tables = struct let x100 : 'tv_mod_longident = Obj.magic x100 in let _400 : unit = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 40628 "reason_parser.ml" +# 45380 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -89640,9 +86822,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40663 "reason_parser.ml" +# 45415 "reason_parser.ml" in let _endpos__5_ = _endpos_x1_ in @@ -89654,16 +86836,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40677 "reason_parser.ml" +# 45429 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 40684 "reason_parser.ml" +# 45436 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -89674,7 +86856,7 @@ module Tables = struct else _startpos__2_ in -# 1733 "reason_parser.mly" +# 1861 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let loc_mod = mklocation _startpos__5_ _endpos__5_ in mksig( @@ -89687,7 +86869,7 @@ module Tables = struct ) ) ) -# 40708 "reason_parser.ml" +# 45460 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -89695,15 +86877,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40718 "reason_parser.ml" +# 45470 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40724 "reason_parser.ml" +# 45476 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89744,9 +86926,9 @@ module Tables = struct let x100 : 'tv_mod_longident = Obj.magic x100 in let _400 : unit = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 40767 "reason_parser.ml" +# 45519 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in @@ -89786,9 +86968,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40809 "reason_parser.ml" +# 45561 "reason_parser.ml" in let _endpos__5_ = _endpos_x1_ in @@ -89800,9 +86982,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40823 "reason_parser.ml" +# 45575 "reason_parser.ml" in let _1 = @@ -89810,15 +86992,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 40833 "reason_parser.ml" +# 45585 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 40839 "reason_parser.ml" +# 45591 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -89829,7 +87011,7 @@ module Tables = struct else _startpos__2_ in -# 1733 "reason_parser.mly" +# 1861 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let loc_mod = mklocation _startpos__5_ _endpos__5_ in mksig( @@ -89842,7 +87024,7 @@ module Tables = struct ) ) ) -# 40863 "reason_parser.ml" +# 45615 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -89850,15 +87032,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40873 "reason_parser.ml" +# 45625 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40879 "reason_parser.ml" +# 45631 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -89899,9 +87081,9 @@ module Tables = struct let _600 : 'tv_list_and_module_rec_declaration_ = Obj.magic _600 in let _500 : 'tv_module_type_body_COLON_ = Obj.magic _500 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 40922 "reason_parser.ml" +# 45674 "reason_parser.ml" ) = Obj.magic x000 in let _300 : unit = Obj.magic _300 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in @@ -89936,16 +87118,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 40959 "reason_parser.ml" +# 45711 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 40966 "reason_parser.ml" +# 45718 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -89955,10 +87137,10 @@ module Tables = struct else _startpos__2_ in -# 1747 "reason_parser.mly" +# 1875 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos__5_ in mksig (Psig_recmodule (Md.mk _4 _5 ~attrs:_1 ~loc :: _6)) ) -# 40979 "reason_parser.ml" +# 45731 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -89966,15 +87148,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 40989 "reason_parser.ml" +# 45741 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 40995 "reason_parser.ml" +# 45747 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90020,9 +87202,9 @@ module Tables = struct let _600 : 'tv_list_and_module_rec_declaration_ = Obj.magic _600 in let _500 : 'tv_module_type_body_COLON_ = Obj.magic _500 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 41043 "reason_parser.ml" +# 45795 "reason_parser.ml" ) = Obj.magic x000 in let _300 : unit = Obj.magic _300 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in @@ -90064,9 +87246,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 41087 "reason_parser.ml" +# 45839 "reason_parser.ml" in let _1 = @@ -90074,15 +87256,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 41097 "reason_parser.ml" +# 45849 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 41103 "reason_parser.ml" +# 45855 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -90092,10 +87274,10 @@ module Tables = struct else _startpos__2_ in -# 1747 "reason_parser.mly" +# 1875 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos__5_ in mksig (Psig_recmodule (Md.mk _4 _5 ~attrs:_1 ~loc :: _6)) ) -# 41116 "reason_parser.ml" +# 45868 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -90103,15 +87285,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41126 "reason_parser.ml" +# 45878 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41132 "reason_parser.ml" +# 45884 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90166,17 +87348,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 41189 "reason_parser.ml" +# 45941 "reason_parser.ml" in let _endpos__4_ = _endpos_x0_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 41197 "reason_parser.ml" +# 45949 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -90187,11 +87369,11 @@ module Tables = struct else _startpos__2_ in -# 1750 "reason_parser.mly" +# 1878 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_modtype (Mtd.mk _4 ~attrs:_1 ~loc)) ) -# 41212 "reason_parser.ml" +# 45964 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -90199,15 +87381,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41222 "reason_parser.ml" +# 45974 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41228 "reason_parser.ml" +# 45980 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90274,9 +87456,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 41297 "reason_parser.ml" +# 46049 "reason_parser.ml" in let _endpos__4_ = _endpos_x0_ in @@ -90285,15 +87467,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 41308 "reason_parser.ml" +# 46060 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 41314 "reason_parser.ml" +# 46066 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -90304,11 +87486,11 @@ module Tables = struct else _startpos__2_ in -# 1750 "reason_parser.mly" +# 1878 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_modtype (Mtd.mk _4 ~attrs:_1 ~loc)) ) -# 41329 "reason_parser.ml" +# 46081 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -90316,15 +87498,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41339 "reason_parser.ml" +# 46091 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41345 "reason_parser.ml" +# 46097 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90389,16 +87571,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 41412 "reason_parser.ml" +# 46164 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 41419 "reason_parser.ml" +# 46171 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -90409,11 +87591,11 @@ module Tables = struct else _startpos__2_ in -# 1754 "reason_parser.mly" +# 1882 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_modtype (Mtd.mk _4 ~typ:_5 ~loc ~attrs:_1)) ) -# 41434 "reason_parser.ml" +# 46186 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -90421,15 +87603,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41444 "reason_parser.ml" +# 46196 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41450 "reason_parser.ml" +# 46202 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90506,9 +87688,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 41529 "reason_parser.ml" +# 46281 "reason_parser.ml" in let _1 = @@ -90516,15 +87698,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 41539 "reason_parser.ml" +# 46291 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 41545 "reason_parser.ml" +# 46297 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -90535,11 +87717,11 @@ module Tables = struct else _startpos__2_ in -# 1754 "reason_parser.mly" +# 1882 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_modtype (Mtd.mk _4 ~typ:_5 ~loc ~attrs:_1)) ) -# 41560 "reason_parser.ml" +# 46312 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -90547,15 +87729,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41570 "reason_parser.ml" +# 46322 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41576 "reason_parser.ml" +# 46328 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90584,9 +87766,9 @@ module Tables = struct let x = let _1 = _10 in -# 1758 "reason_parser.mly" +# 1886 "reason_parser.mly" ( mksig(Psig_open _1) ) -# 41607 "reason_parser.ml" +# 46359 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -90594,15 +87776,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41617 "reason_parser.ml" +# 46369 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41623 "reason_parser.ml" +# 46375 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90642,9 +87824,9 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 41665 "reason_parser.ml" +# 46417 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -90655,11 +87837,11 @@ module Tables = struct else _startpos__2_ in -# 1760 "reason_parser.mly" +# 1888 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_include (Incl.mk _3 ~attrs:_1 ~loc)) ) -# 41680 "reason_parser.ml" +# 46432 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -90667,15 +87849,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41690 "reason_parser.ml" +# 46442 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41696 "reason_parser.ml" +# 46448 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90730,15 +87912,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 41753 "reason_parser.ml" +# 46505 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 41759 "reason_parser.ml" +# 46511 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -90749,11 +87931,11 @@ module Tables = struct else _startpos__2_ in -# 1760 "reason_parser.mly" +# 1888 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mksig(Psig_include (Incl.mk _3 ~attrs:_1 ~loc)) ) -# 41774 "reason_parser.ml" +# 46526 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -90761,15 +87943,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41784 "reason_parser.ml" +# 46536 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41790 "reason_parser.ml" +# 46542 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90798,9 +87980,9 @@ module Tables = struct let x = let _1 = _10 in -# 1764 "reason_parser.mly" +# 1892 "reason_parser.mly" ( mksig(Psig_class _1) ) -# 41821 "reason_parser.ml" +# 46573 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -90808,15 +87990,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41831 "reason_parser.ml" +# 46583 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41837 "reason_parser.ml" +# 46589 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90845,9 +88027,9 @@ module Tables = struct let x = let _1 = _10 in -# 1766 "reason_parser.mly" +# 1894 "reason_parser.mly" ( mksig(Psig_class_type _1) ) -# 41868 "reason_parser.ml" +# 46620 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -90855,15 +88037,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41878 "reason_parser.ml" +# 46630 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41884 "reason_parser.ml" +# 46636 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90893,15 +88075,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 41916 "reason_parser.ml" +# 46668 "reason_parser.ml" in -# 1768 "reason_parser.mly" +# 1896 "reason_parser.mly" ( mksig(Psig_extension (_2, _1)) ) -# 41922 "reason_parser.ml" +# 46674 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -90909,15 +88091,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 41932 "reason_parser.ml" +# 46684 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 41938 "reason_parser.ml" +# 46690 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -90958,21 +88140,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 41981 "reason_parser.ml" +# 46733 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 41987 "reason_parser.ml" +# 46739 "reason_parser.ml" in -# 1768 "reason_parser.mly" +# 1896 "reason_parser.mly" ( mksig(Psig_extension (_2, _1)) ) -# 41993 "reason_parser.ml" +# 46745 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -90980,15 +88162,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4373 "reason_parser.mly" +# 4688 "reason_parser.mly" ( {x with psig_loc = {x.psig_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42003 "reason_parser.ml" +# 46755 "reason_parser.ml" in -# 1769 "reason_parser.mly" +# 1897 "reason_parser.mly" ( [_1] ) -# 42009 "reason_parser.ml" +# 46761 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91013,15 +88195,15 @@ module Tables = struct let _v : 'tv_signature_item = let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 42036 "reason_parser.ml" +# 46788 "reason_parser.ml" in -# 1771 "reason_parser.mly" +# 1899 "reason_parser.mly" ( List.map (fun x -> mksig ~loc:x.loc (Psig_attribute x.txt)) _1 ) -# 42042 "reason_parser.ml" +# 46794 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91044,9 +88226,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_signed_constant = -# 4027 "reason_parser.mly" +# 4341 "reason_parser.mly" ( _1 ) -# 42067 "reason_parser.ml" +# 46819 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91070,18 +88252,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 993 "reason_parser.mly" +# 1113 "reason_parser.mly" (string * char option) -# 42093 "reason_parser.ml" +# 46845 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_signed_constant = -# 4028 "reason_parser.mly" +# 4342 "reason_parser.mly" ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 42102 "reason_parser.ml" +# 46854 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91105,18 +88287,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 974 "reason_parser.mly" +# 1094 "reason_parser.mly" (string * char option) -# 42128 "reason_parser.ml" +# 46880 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_signed_constant = -# 4029 "reason_parser.mly" +# 4343 "reason_parser.mly" ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 42137 "reason_parser.ml" +# 46889 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91140,18 +88322,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 993 "reason_parser.mly" +# 1113 "reason_parser.mly" (string * char option) -# 42163 "reason_parser.ml" +# 46915 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_signed_constant = -# 4030 "reason_parser.mly" +# 4344 "reason_parser.mly" ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 42172 "reason_parser.ml" +# 46924 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91175,18 +88357,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 974 "reason_parser.mly" +# 1094 "reason_parser.mly" (string * char option) -# 42198 "reason_parser.ml" +# 46950 "reason_parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_signed_constant = -# 4031 "reason_parser.mly" +# 4345 "reason_parser.mly" ( let (f, m) = _2 in Pconst_float(f, m) ) -# 42207 "reason_parser.ml" +# 46959 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91223,15 +88405,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42246 "reason_parser.ml" +# 46998 "reason_parser.ml" in -# 2681 "reason_parser.mly" +# 2889 "reason_parser.mly" ( mkexp (Pexp_ident _1) ) -# 42252 "reason_parser.ml" +# 47004 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -91239,15 +88421,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42262 "reason_parser.ml" +# 47014 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42268 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47020 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91276,9 +88458,9 @@ module Tables = struct let x = let _1 = _10 in -# 2682 "reason_parser.mly" +# 2890 "reason_parser.mly" ( mkexp (Pexp_constant _1) ) -# 42299 "reason_parser.ml" +# 47051 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -91286,15 +88468,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42309 "reason_parser.ml" +# 47061 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42315 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47067 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91323,9 +88505,9 @@ module Tables = struct let x = let _1 = _10 in -# 2683 "reason_parser.mly" +# 2891 "reason_parser.mly" ( _1 ) -# 42346 "reason_parser.ml" +# 47098 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -91333,15 +88515,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42356 "reason_parser.ml" +# 47108 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42362 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47114 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91370,9 +88552,9 @@ module Tables = struct let x = let _1 = _10 in -# 2684 "reason_parser.mly" +# 2892 "reason_parser.mly" ( _1 ) -# 42393 "reason_parser.ml" +# 47145 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -91380,15 +88562,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42403 "reason_parser.ml" +# 47155 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42409 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47161 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91433,9 +88615,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2686 "reason_parser.mly" +# 2894 "reason_parser.mly" ( mkexp (Pexp_array _2) ) -# 42456 "reason_parser.ml" +# 47208 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -91443,15 +88625,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42466 "reason_parser.ml" +# 47218 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42472 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47224 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91508,9 +88690,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42531 "reason_parser.ml" +# 47283 "reason_parser.ml" in let _1 = @@ -91520,15 +88702,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42543 "reason_parser.ml" +# 47295 "reason_parser.ml" in -# 2688 "reason_parser.mly" +# 2896 "reason_parser.mly" ( unclosed_exp (with_txt _1 "[|") (with_txt _3 "|]") ) -# 42549 "reason_parser.ml" +# 47301 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -91536,15 +88718,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42559 "reason_parser.ml" +# 47311 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42565 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47317 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91581,9 +88763,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2690 "reason_parser.mly" +# 2898 "reason_parser.mly" ( mkexp (Pexp_array []) ) -# 42604 "reason_parser.ml" +# 47356 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -91591,15 +88773,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42614 "reason_parser.ml" +# 47366 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42620 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47372 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91636,15 +88818,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42659 "reason_parser.ml" +# 47411 "reason_parser.ml" in -# 2694 "reason_parser.mly" +# 2902 "reason_parser.mly" ( mkexp (Pexp_construct (_1, None)) ) -# 42665 "reason_parser.ml" +# 47417 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -91652,15 +88834,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42675 "reason_parser.ml" +# 47427 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42681 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47433 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91700,15 +88882,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 42723 "reason_parser.ml" +# 47475 "reason_parser.ml" in -# 2696 "reason_parser.mly" +# 2904 "reason_parser.mly" ( mkexp (Pexp_variant (_1, None)) ) -# 42729 "reason_parser.ml" +# 47481 "reason_parser.ml" in let _endpos_x_ = _endpos__200_ in @@ -91716,15 +88898,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42739 "reason_parser.ml" +# 47491 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42745 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47497 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91773,9 +88955,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2698 "reason_parser.mly" +# 2906 "reason_parser.mly" ( may_tuple _startpos _endpos _2 ) -# 42796 "reason_parser.ml" +# 47548 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -91783,15 +88965,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42806 "reason_parser.ml" +# 47558 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42812 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47564 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91848,9 +89030,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42871 "reason_parser.ml" +# 47623 "reason_parser.ml" in let _1 = @@ -91860,15 +89042,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42883 "reason_parser.ml" +# 47635 "reason_parser.ml" in -# 2700 "reason_parser.mly" +# 2908 "reason_parser.mly" ( unclosed_exp (with_txt _1 "(") (with_txt _3 ")") ) -# 42889 "reason_parser.ml" +# 47641 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -91876,15 +89058,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42899 "reason_parser.ml" +# 47651 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42905 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47657 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -91908,9 +89090,9 @@ module Tables = struct }; } = _menhir_stack in let x000 : ( -# 1034 "reason_parser.mly" +# 1154 "reason_parser.mly" (string) -# 42931 "reason_parser.ml" +# 47683 "reason_parser.ml" ) = Obj.magic x000 in let _1000 : 'tv_simple_expr_call = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -91937,9 +89119,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 42960 "reason_parser.ml" +# 47712 "reason_parser.ml" in let _1 = @@ -91949,15 +89131,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 42972 "reason_parser.ml" +# 47724 "reason_parser.ml" in -# 2702 "reason_parser.mly" +# 2910 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _2, [Nolabel, _1])) ) -# 42978 "reason_parser.ml" +# 47730 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -91965,15 +89147,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 42988 "reason_parser.ml" +# 47740 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 42994 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47746 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92046,15 +89228,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43069 "reason_parser.ml" +# 47821 "reason_parser.ml" in -# 2704 "reason_parser.mly" +# 2912 "reason_parser.mly" ( mkexp(Pexp_open(Fresh, _1, may_tuple _startpos__3_ _endpos__5_ _4)) ) -# 43075 "reason_parser.ml" +# 47827 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -92062,15 +89244,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43085 "reason_parser.ml" +# 47837 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43091 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47843 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92144,9 +89326,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43167 "reason_parser.ml" +# 47919 "reason_parser.ml" in let _3 = @@ -92156,15 +89338,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43179 "reason_parser.ml" +# 47931 "reason_parser.ml" in -# 2706 "reason_parser.mly" +# 2914 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _5 ")") ) -# 43185 "reason_parser.ml" +# 47937 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -92172,15 +89354,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43195 "reason_parser.ml" +# 47947 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43201 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 47953 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92237,9 +89419,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43260 "reason_parser.ml" +# 48012 "reason_parser.ml" in let _1 = @@ -92249,15 +89431,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43272 "reason_parser.ml" +# 48024 "reason_parser.ml" in -# 2708 "reason_parser.mly" +# 2916 "reason_parser.mly" ( mkexp(Pexp_field(_1, _3)) ) -# 43278 "reason_parser.ml" +# 48030 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -92265,15 +89447,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43288 "reason_parser.ml" +# 48040 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43294 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48046 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92336,22 +89518,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43359 "reason_parser.ml" +# 48111 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2710 "reason_parser.mly" +# 2918 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let pat = mkpat (Ppat_var (mkloc "this" loc)) in mkexp(Pexp_open (Fresh, _1, mkexp(Pexp_object(Cstr.mk pat [])))) ) -# 43372 "reason_parser.ml" +# 48124 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -92359,15 +89541,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43382 "reason_parser.ml" +# 48134 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43388 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48140 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92430,21 +89612,21 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43453 "reason_parser.ml" +# 48205 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2716 "reason_parser.mly" +# 2924 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "Array" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_3])) ) -# 43465 "reason_parser.ml" +# 48217 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -92452,15 +89634,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43475 "reason_parser.ml" +# 48227 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43481 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48233 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92529,9 +89711,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43552 "reason_parser.ml" +# 48304 "reason_parser.ml" in let _2 = @@ -92541,9 +89723,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43564 "reason_parser.ml" +# 48316 "reason_parser.ml" in let _1 = @@ -92553,15 +89735,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43576 "reason_parser.ml" +# 48328 "reason_parser.ml" in -# 2721 "reason_parser.mly" +# 2929 "reason_parser.mly" ( unclosed_exp (with_txt _2 "(") (with_txt _4 ")") ) -# 43582 "reason_parser.ml" +# 48334 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -92569,15 +89751,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43592 "reason_parser.ml" +# 48344 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43598 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48350 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92648,21 +89830,21 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43671 "reason_parser.ml" +# 48423 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2723 "reason_parser.mly" +# 2931 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "String" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_4])) ) -# 43683 "reason_parser.ml" +# 48435 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -92670,15 +89852,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43693 "reason_parser.ml" +# 48445 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43699 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48451 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92755,9 +89937,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43778 "reason_parser.ml" +# 48530 "reason_parser.ml" in let _3 = @@ -92767,9 +89949,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43790 "reason_parser.ml" +# 48542 "reason_parser.ml" in let _1 = @@ -92779,15 +89961,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43802 "reason_parser.ml" +# 48554 "reason_parser.ml" in -# 2728 "reason_parser.mly" +# 2936 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[") (with_txt _5 "]") ) -# 43808 "reason_parser.ml" +# 48560 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -92795,15 +89977,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43818 "reason_parser.ml" +# 48570 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43824 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48576 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92874,20 +90056,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 43897 "reason_parser.ml" +# 48649 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2730 "reason_parser.mly" +# 2938 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in bigarray_get ~loc _1 _4 ) -# 43908 "reason_parser.ml" +# 48660 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -92895,15 +90077,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 43918 "reason_parser.ml" +# 48670 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 43924 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48676 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -92974,22 +90156,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 43997 "reason_parser.ml" +# 48749 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2734 "reason_parser.mly" +# 2942 "reason_parser.mly" ( let (exten, fields) = _4 in let loc = mklocation _symbolstartpos _endpos in let rec_exp = mkexp ~loc (Pexp_record (fields, exten)) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 44010 "reason_parser.ml" +# 48762 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -92997,15 +90179,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44020 "reason_parser.ml" +# 48772 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44026 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48778 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93079,9 +90261,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44102 "reason_parser.ml" +# 48854 "reason_parser.ml" in let _3 = @@ -93091,15 +90273,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44114 "reason_parser.ml" +# 48866 "reason_parser.ml" in -# 2740 "reason_parser.mly" +# 2948 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{") (with_txt _5 "}") ) -# 44120 "reason_parser.ml" +# 48872 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -93107,15 +90289,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44130 "reason_parser.ml" +# 48882 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44136 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48888 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93186,21 +90368,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44209 "reason_parser.ml" +# 48961 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2742 "reason_parser.mly" +# 2950 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let rec_exp = Exp.mk ~loc ~attrs:[] (Pexp_array _4) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 44221 "reason_parser.ml" +# 48973 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -93208,15 +90390,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44231 "reason_parser.ml" +# 48983 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44237 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 48989 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93290,9 +90472,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44313 "reason_parser.ml" +# 49065 "reason_parser.ml" in let _3 = @@ -93302,15 +90484,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44325 "reason_parser.ml" +# 49077 "reason_parser.ml" in -# 2747 "reason_parser.mly" +# 2955 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[|") (with_txt _5 "|]") ) -# 44331 "reason_parser.ml" +# 49083 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -93318,15 +90500,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44341 "reason_parser.ml" +# 49093 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44347 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49099 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93400,20 +90582,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44423 "reason_parser.ml" +# 49175 "reason_parser.ml" in -# 2749 "reason_parser.mly" +# 2957 "reason_parser.mly" ( let seq, ext_opt = _4 in let loc = mklocation _startpos__4_ _endpos__4_ in let list_exp = make_real_exp (mktailexp_extension loc seq ext_opt) in let list_exp = { list_exp with pexp_loc = loc } in mkexp (Pexp_open (Fresh, _1, list_exp)) ) -# 44434 "reason_parser.ml" +# 49186 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -93421,15 +90603,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44444 "reason_parser.ml" +# 49196 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44450 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49202 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93454,9 +90636,9 @@ module Tables = struct } = _menhir_stack in let _1000 : 'tv_simple_expr_call = Obj.magic _1000 in let x000 : ( -# 1033 "reason_parser.mly" +# 1153 "reason_parser.mly" (string) -# 44477 "reason_parser.ml" +# 49229 "reason_parser.ml" ) = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -93482,9 +90664,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 44505 "reason_parser.ml" +# 49257 "reason_parser.ml" in let _1 = @@ -93494,15 +90676,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44517 "reason_parser.ml" +# 49269 "reason_parser.ml" in -# 2756 "reason_parser.mly" +# 2964 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _1, [Nolabel, _2])) ) -# 44523 "reason_parser.ml" +# 49275 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -93510,15 +90692,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44533 "reason_parser.ml" +# 49285 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44539 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49291 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93564,15 +90746,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44587 "reason_parser.ml" +# 49339 "reason_parser.ml" in -# 2766 "reason_parser.mly" +# 2974 "reason_parser.mly" ( mkexp (Pexp_new _2) ) -# 44593 "reason_parser.ml" +# 49345 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -93580,15 +90762,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44603 "reason_parser.ml" +# 49355 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44609 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49361 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93665,15 +90847,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 44688 "reason_parser.ml" +# 49440 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 44694 "reason_parser.ml" +# 49446 "reason_parser.ml" in let _1 = @@ -93683,21 +90865,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44706 "reason_parser.ml" +# 49458 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2768 "reason_parser.mly" +# 2976 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Exp.mk ~loc ~attrs:[] (Pexp_override _4) in mkexp (Pexp_open(Fresh, _1, exp)) ) -# 44718 "reason_parser.ml" +# 49470 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -93705,15 +90887,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44728 "reason_parser.ml" +# 49480 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44734 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49486 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93795,9 +90977,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44818 "reason_parser.ml" +# 49570 "reason_parser.ml" in let _4 = @@ -93805,15 +90987,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 44828 "reason_parser.ml" +# 49580 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 44834 "reason_parser.ml" +# 49586 "reason_parser.ml" in let _3 = @@ -93823,15 +91005,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 44846 "reason_parser.ml" +# 49598 "reason_parser.ml" in -# 2773 "reason_parser.mly" +# 2981 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{<") (with_txt _6 ">}") ) -# 44852 "reason_parser.ml" +# 49604 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -93839,15 +91021,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44862 "reason_parser.ml" +# 49614 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44868 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49620 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93876,9 +91058,9 @@ module Tables = struct }; } = _menhir_stack in let _1100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 44899 "reason_parser.ml" +# 49651 "reason_parser.ml" ) = Obj.magic _1100 in let _200 : unit = Obj.magic _200 in let _1000 : 'tv_simple_expr_call = Obj.magic _1000 in @@ -93901,9 +91083,9 @@ module Tables = struct let _3 = let _1 = _11 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 44924 "reason_parser.ml" +# 49676 "reason_parser.ml" in let _1 = @@ -93913,15 +91095,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 44936 "reason_parser.ml" +# 49688 "reason_parser.ml" in -# 2775 "reason_parser.mly" +# 2983 "reason_parser.mly" ( mkexp (Pexp_send(_1, _3)) ) -# 44942 "reason_parser.ml" +# 49694 "reason_parser.ml" in let _endpos_x_ = _endpos__110_ in @@ -93929,15 +91111,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 44952 "reason_parser.ml" +# 49704 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 44958 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49710 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -93967,9 +91149,9 @@ module Tables = struct } = _menhir_stack in let _300 : 'tv_simple_expr_no_call = Obj.magic _300 in let x000 : ( -# 1046 "reason_parser.mly" +# 1166 "reason_parser.mly" (string) -# 44990 "reason_parser.ml" +# 49742 "reason_parser.ml" ) = Obj.magic x000 in let _1000 : 'tv_simple_expr_call = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -93999,9 +91181,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45022 "reason_parser.ml" +# 49774 "reason_parser.ml" in let _1 = @@ -94011,15 +91193,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 45034 "reason_parser.ml" +# 49786 "reason_parser.ml" in -# 2777 "reason_parser.mly" +# 2985 "reason_parser.mly" ( mkinfixop _1 (mkoperator _2) _3 ) -# 45040 "reason_parser.ml" +# 49792 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -94027,15 +91209,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 45050 "reason_parser.ml" +# 49802 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 45056 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49808 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94130,22 +91312,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45153 "reason_parser.ml" +# 49905 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 2779 "reason_parser.mly" +# 2987 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkexp (Pexp_open(Fresh, _1, mkexp ~loc (Pexp_constraint (mkexp ~ghost:true ~loc (Pexp_pack _5), mktyp ~ghost:true ~loc (Ptyp_package _7))))) ) -# 45166 "reason_parser.ml" +# 49918 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -94153,15 +91335,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 45176 "reason_parser.ml" +# 49928 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 45182 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 49934 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94251,9 +91433,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45274 "reason_parser.ml" +# 50026 "reason_parser.ml" in let _3 = @@ -94263,15 +91445,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45286 "reason_parser.ml" +# 50038 "reason_parser.ml" in -# 2785 "reason_parser.mly" +# 2993 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _7 ")")) -# 45292 "reason_parser.ml" +# 50044 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -94279,15 +91461,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 45302 "reason_parser.ml" +# 50054 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 45308 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 50060 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94316,9 +91498,9 @@ module Tables = struct let x = let _1 = _10 in -# 2787 "reason_parser.mly" +# 2995 "reason_parser.mly" ( mkexp (Pexp_extension _1) ) -# 45339 "reason_parser.ml" +# 50091 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -94326,15 +91508,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 45349 "reason_parser.ml" +# 50101 "reason_parser.ml" in -# 2829 "reason_parser.mly" - ( _1, [] ) -# 45355 "reason_parser.ml" +# 3037 "reason_parser.mly" + ( (_1, []) ) +# 50107 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94363,9 +91545,10 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_simple_expr_call = -# 2831 "reason_parser.mly" - ( let body, args = _1 in (body, List.rev_append _2 args) ) -# 45386 "reason_parser.ml" +# 3039 "reason_parser.mly" + ( let (body, args) = _1 in + (body, List.rev_append _2 args) ) +# 50139 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94400,12 +91583,12 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_simple_expr_call = -# 2833 "reason_parser.mly" +# 3042 "reason_parser.mly" ( let seq, ext_opt = _2 in let loc = mklocation _startpos__2_ _endpos__2_ in (make_real_exp (mktailexp_extension loc seq ext_opt), []) ) -# 45426 "reason_parser.ml" +# 50179 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94428,9 +91611,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_simple_expr_call = -# 2837 "reason_parser.mly" +# 3046 "reason_parser.mly" ( (_1, []) ) -# 45451 "reason_parser.ml" +# 50204 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94453,9 +91636,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_simple_expr_direct_argument = -# 2852 "reason_parser.mly" +# 3061 "reason_parser.mly" ( _1 ) -# 45476 "reason_parser.ml" +# 50229 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94502,12 +91685,12 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_simple_expr_direct_argument = -# 2854 "reason_parser.mly" +# 3063 "reason_parser.mly" ( let entireLoc = mklocation _startpos__1_ _endpos__4_ in let (seq, ext_opt) = _4 in mktailexp_extension entireLoc (_2::seq) ext_opt ) -# 45528 "reason_parser.ml" +# 50281 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94542,11 +91725,56 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_simple_expr_direct_argument = -# 2859 "reason_parser.mly" +# 3068 "reason_parser.mly" ( let entireLoc = mklocation _startpos__1_ _endpos__3_ in mktailexp_extension entireLoc (_2::[]) None ) -# 45567 "reason_parser.ml" +# 50320 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : 'tv_jsx_without_leading_less = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_simple_expr_direct_argument = +# 3072 "reason_parser.mly" + ( let entireLoc = mklocation _startpos__1_ _endpos__4_ in + mktailexp_extension entireLoc [_2] None + ) +# 50365 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94591,21 +91819,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 45614 "reason_parser.ml" +# 50412 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 45620 "reason_parser.ml" +# 50418 "reason_parser.ml" in -# 2863 "reason_parser.mly" +# 3076 "reason_parser.mly" ( mkexp (Pexp_override _2) ) -# 45626 "reason_parser.ml" +# 50424 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94652,9 +91880,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45675 "reason_parser.ml" +# 50473 "reason_parser.ml" in let _2 = @@ -94662,15 +91890,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 45685 "reason_parser.ml" +# 50483 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 45691 "reason_parser.ml" +# 50489 "reason_parser.ml" in let _1 = @@ -94680,15 +91908,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45703 "reason_parser.ml" +# 50501 "reason_parser.ml" in -# 2865 "reason_parser.mly" +# 3078 "reason_parser.mly" ( unclosed_exp (with_txt _1 "{<") (with_txt _4 ">}" ) ) -# 45709 "reason_parser.ml" +# 50507 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94717,9 +91945,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_simple_expr_direct_argument = -# 2867 "reason_parser.mly" +# 3080 "reason_parser.mly" ( mkexp (Pexp_override [])) -# 45740 "reason_parser.ml" +# 50538 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94760,9 +91988,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_simple_expr_direct_argument = -# 2869 "reason_parser.mly" +# 3082 "reason_parser.mly" ( mkexp (Pexp_pack _3) ) -# 45783 "reason_parser.ml" +# 50581 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94817,12 +92045,12 @@ module Tables = struct let _v : 'tv_simple_expr_direct_argument = let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2871 "reason_parser.mly" +# 3084 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkexp (Pexp_constraint (mkexp ~ghost:true ~loc (Pexp_pack _3), mktyp ~ghost:true ~loc (Ptyp_package _5))) ) -# 45843 "reason_parser.ml" +# 50641 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94875,9 +92103,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45898 "reason_parser.ml" +# 50696 "reason_parser.ml" in let _1 = @@ -94887,15 +92115,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45910 "reason_parser.ml" +# 50708 "reason_parser.ml" in -# 2876 "reason_parser.mly" +# 3089 "reason_parser.mly" ( unclosed_exp (with_txt _1 "(") (with_txt _5 ")") ) -# 45916 "reason_parser.ml" +# 50714 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94932,15 +92160,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 45955 "reason_parser.ml" +# 50753 "reason_parser.ml" in -# 2681 "reason_parser.mly" +# 2889 "reason_parser.mly" ( mkexp (Pexp_ident _1) ) -# 45961 "reason_parser.ml" +# 50759 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -94948,15 +92176,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 45971 "reason_parser.ml" +# 50769 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 45977 "reason_parser.ml" +# 50775 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -94985,9 +92213,9 @@ module Tables = struct let x = let _1 = _10 in -# 2682 "reason_parser.mly" +# 2890 "reason_parser.mly" ( mkexp (Pexp_constant _1) ) -# 46008 "reason_parser.ml" +# 50806 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -94995,15 +92223,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46018 "reason_parser.ml" +# 50816 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46024 "reason_parser.ml" +# 50822 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95032,9 +92260,9 @@ module Tables = struct let x = let _1 = _10 in -# 2683 "reason_parser.mly" +# 2891 "reason_parser.mly" ( _1 ) -# 46055 "reason_parser.ml" +# 50853 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -95042,15 +92270,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46065 "reason_parser.ml" +# 50863 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46071 "reason_parser.ml" +# 50869 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95079,9 +92307,9 @@ module Tables = struct let x = let _1 = _10 in -# 2684 "reason_parser.mly" +# 2892 "reason_parser.mly" ( _1 ) -# 46102 "reason_parser.ml" +# 50900 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -95089,15 +92317,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46112 "reason_parser.ml" +# 50910 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46118 "reason_parser.ml" +# 50916 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95142,9 +92370,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2686 "reason_parser.mly" +# 2894 "reason_parser.mly" ( mkexp (Pexp_array _2) ) -# 46165 "reason_parser.ml" +# 50963 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -95152,15 +92380,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46175 "reason_parser.ml" +# 50973 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46181 "reason_parser.ml" +# 50979 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95217,9 +92445,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46240 "reason_parser.ml" +# 51038 "reason_parser.ml" in let _1 = @@ -95229,15 +92457,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46252 "reason_parser.ml" +# 51050 "reason_parser.ml" in -# 2688 "reason_parser.mly" +# 2896 "reason_parser.mly" ( unclosed_exp (with_txt _1 "[|") (with_txt _3 "|]") ) -# 46258 "reason_parser.ml" +# 51056 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -95245,15 +92473,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46268 "reason_parser.ml" +# 51066 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46274 "reason_parser.ml" +# 51072 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95290,9 +92518,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2690 "reason_parser.mly" +# 2898 "reason_parser.mly" ( mkexp (Pexp_array []) ) -# 46313 "reason_parser.ml" +# 51111 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -95300,15 +92528,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46323 "reason_parser.ml" +# 51121 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46329 "reason_parser.ml" +# 51127 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95345,15 +92573,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46368 "reason_parser.ml" +# 51166 "reason_parser.ml" in -# 2694 "reason_parser.mly" +# 2902 "reason_parser.mly" ( mkexp (Pexp_construct (_1, None)) ) -# 46374 "reason_parser.ml" +# 51172 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -95361,15 +92589,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46384 "reason_parser.ml" +# 51182 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46390 "reason_parser.ml" +# 51188 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95409,15 +92637,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 46432 "reason_parser.ml" +# 51230 "reason_parser.ml" in -# 2696 "reason_parser.mly" +# 2904 "reason_parser.mly" ( mkexp (Pexp_variant (_1, None)) ) -# 46438 "reason_parser.ml" +# 51236 "reason_parser.ml" in let _endpos_x_ = _endpos__200_ in @@ -95425,15 +92653,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46448 "reason_parser.ml" +# 51246 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46454 "reason_parser.ml" +# 51252 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95482,9 +92710,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2698 "reason_parser.mly" +# 2906 "reason_parser.mly" ( may_tuple _startpos _endpos _2 ) -# 46505 "reason_parser.ml" +# 51303 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -95492,15 +92720,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46515 "reason_parser.ml" +# 51313 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46521 "reason_parser.ml" +# 51319 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95557,9 +92785,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46580 "reason_parser.ml" +# 51378 "reason_parser.ml" in let _1 = @@ -95569,15 +92797,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46592 "reason_parser.ml" +# 51390 "reason_parser.ml" in -# 2700 "reason_parser.mly" +# 2908 "reason_parser.mly" ( unclosed_exp (with_txt _1 "(") (with_txt _3 ")") ) -# 46598 "reason_parser.ml" +# 51396 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -95585,15 +92813,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46608 "reason_parser.ml" +# 51406 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46614 "reason_parser.ml" +# 51412 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95617,9 +92845,9 @@ module Tables = struct }; } = _menhir_stack in let x000 : ( -# 1034 "reason_parser.mly" +# 1154 "reason_parser.mly" (string) -# 46640 "reason_parser.ml" +# 51438 "reason_parser.ml" ) = Obj.magic x000 in let _100 : 'tv_simple_expr_no_call = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -95643,15 +92871,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46666 "reason_parser.ml" +# 51464 "reason_parser.ml" in -# 2702 "reason_parser.mly" +# 2910 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _2, [Nolabel, _1])) ) -# 46672 "reason_parser.ml" +# 51470 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -95659,15 +92887,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46682 "reason_parser.ml" +# 51480 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46688 "reason_parser.ml" +# 51486 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95740,15 +92968,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46763 "reason_parser.ml" +# 51561 "reason_parser.ml" in -# 2704 "reason_parser.mly" +# 2912 "reason_parser.mly" ( mkexp(Pexp_open(Fresh, _1, may_tuple _startpos__3_ _endpos__5_ _4)) ) -# 46769 "reason_parser.ml" +# 51567 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -95756,15 +92984,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46779 "reason_parser.ml" +# 51577 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46785 "reason_parser.ml" +# 51583 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95838,9 +93066,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46861 "reason_parser.ml" +# 51659 "reason_parser.ml" in let _3 = @@ -95850,15 +93078,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46873 "reason_parser.ml" +# 51671 "reason_parser.ml" in -# 2706 "reason_parser.mly" +# 2914 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _5 ")") ) -# 46879 "reason_parser.ml" +# 51677 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -95866,15 +93094,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46889 "reason_parser.ml" +# 51687 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46895 "reason_parser.ml" +# 51693 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -95928,15 +93156,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 46951 "reason_parser.ml" +# 51749 "reason_parser.ml" in -# 2708 "reason_parser.mly" +# 2916 "reason_parser.mly" ( mkexp(Pexp_field(_1, _3)) ) -# 46957 "reason_parser.ml" +# 51755 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -95944,15 +93172,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 46967 "reason_parser.ml" +# 51765 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 46973 "reason_parser.ml" +# 51771 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96015,22 +93243,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47038 "reason_parser.ml" +# 51836 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2710 "reason_parser.mly" +# 2918 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let pat = mkpat (Ppat_var (mkloc "this" loc)) in mkexp(Pexp_open (Fresh, _1, mkexp(Pexp_object(Cstr.mk pat [])))) ) -# 47051 "reason_parser.ml" +# 51849 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -96038,15 +93266,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47061 "reason_parser.ml" +# 51859 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47067 "reason_parser.ml" +# 51865 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96103,12 +93331,12 @@ module Tables = struct let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2716 "reason_parser.mly" +# 2924 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "Array" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_3])) ) -# 47129 "reason_parser.ml" +# 51927 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -96116,15 +93344,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47139 "reason_parser.ml" +# 51937 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47145 "reason_parser.ml" +# 51943 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96190,9 +93418,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47213 "reason_parser.ml" +# 52011 "reason_parser.ml" in let _2 = @@ -96202,15 +93430,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47225 "reason_parser.ml" +# 52023 "reason_parser.ml" in -# 2721 "reason_parser.mly" +# 2929 "reason_parser.mly" ( unclosed_exp (with_txt _2 "(") (with_txt _4 ")") ) -# 47231 "reason_parser.ml" +# 52029 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -96218,15 +93446,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47241 "reason_parser.ml" +# 52039 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47247 "reason_parser.ml" +# 52045 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96291,12 +93519,12 @@ module Tables = struct let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2723 "reason_parser.mly" +# 2931 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "String" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_4])) ) -# 47317 "reason_parser.ml" +# 52115 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -96304,15 +93532,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47327 "reason_parser.ml" +# 52125 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47333 "reason_parser.ml" +# 52131 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96386,9 +93614,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47409 "reason_parser.ml" +# 52207 "reason_parser.ml" in let _3 = @@ -96398,15 +93626,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47421 "reason_parser.ml" +# 52219 "reason_parser.ml" in -# 2728 "reason_parser.mly" +# 2936 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[") (with_txt _5 "]") ) -# 47427 "reason_parser.ml" +# 52225 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -96414,15 +93642,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47437 "reason_parser.ml" +# 52235 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47443 "reason_parser.ml" +# 52241 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96487,11 +93715,11 @@ module Tables = struct let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2730 "reason_parser.mly" +# 2938 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in bigarray_get ~loc _1 _4 ) -# 47512 "reason_parser.ml" +# 52310 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -96499,15 +93727,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47522 "reason_parser.ml" +# 52320 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47528 "reason_parser.ml" +# 52326 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96578,22 +93806,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47601 "reason_parser.ml" +# 52399 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2734 "reason_parser.mly" +# 2942 "reason_parser.mly" ( let (exten, fields) = _4 in let loc = mklocation _symbolstartpos _endpos in let rec_exp = mkexp ~loc (Pexp_record (fields, exten)) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 47614 "reason_parser.ml" +# 52412 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -96601,15 +93829,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47624 "reason_parser.ml" +# 52422 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47630 "reason_parser.ml" +# 52428 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96683,9 +93911,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47706 "reason_parser.ml" +# 52504 "reason_parser.ml" in let _3 = @@ -96695,15 +93923,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47718 "reason_parser.ml" +# 52516 "reason_parser.ml" in -# 2740 "reason_parser.mly" +# 2948 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{") (with_txt _5 "}") ) -# 47724 "reason_parser.ml" +# 52522 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -96711,15 +93939,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47734 "reason_parser.ml" +# 52532 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47740 "reason_parser.ml" +# 52538 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96790,21 +94018,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47813 "reason_parser.ml" +# 52611 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2742 "reason_parser.mly" +# 2950 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let rec_exp = Exp.mk ~loc ~attrs:[] (Pexp_array _4) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 47825 "reason_parser.ml" +# 52623 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -96812,15 +94040,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47835 "reason_parser.ml" +# 52633 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47841 "reason_parser.ml" +# 52639 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -96894,9 +94122,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47917 "reason_parser.ml" +# 52715 "reason_parser.ml" in let _3 = @@ -96906,15 +94134,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 47929 "reason_parser.ml" +# 52727 "reason_parser.ml" in -# 2747 "reason_parser.mly" +# 2955 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[|") (with_txt _5 "|]") ) -# 47935 "reason_parser.ml" +# 52733 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -96922,15 +94150,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 47945 "reason_parser.ml" +# 52743 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 47951 "reason_parser.ml" +# 52749 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97004,20 +94232,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48027 "reason_parser.ml" +# 52825 "reason_parser.ml" in -# 2749 "reason_parser.mly" +# 2957 "reason_parser.mly" ( let seq, ext_opt = _4 in let loc = mklocation _startpos__4_ _endpos__4_ in let list_exp = make_real_exp (mktailexp_extension loc seq ext_opt) in let list_exp = { list_exp with pexp_loc = loc } in mkexp (Pexp_open (Fresh, _1, list_exp)) ) -# 48038 "reason_parser.ml" +# 52836 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -97025,15 +94253,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48048 "reason_parser.ml" +# 52846 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48054 "reason_parser.ml" +# 52852 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97058,9 +94286,9 @@ module Tables = struct } = _menhir_stack in let _200 : 'tv_simple_expr_no_call = Obj.magic _200 in let x000 : ( -# 1033 "reason_parser.mly" +# 1153 "reason_parser.mly" (string) -# 48081 "reason_parser.ml" +# 52879 "reason_parser.ml" ) = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -97083,15 +94311,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48106 "reason_parser.ml" +# 52904 "reason_parser.ml" in -# 2756 "reason_parser.mly" +# 2964 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _1, [Nolabel, _2])) ) -# 48112 "reason_parser.ml" +# 52910 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -97099,15 +94327,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48122 "reason_parser.ml" +# 52920 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48128 "reason_parser.ml" +# 52926 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97153,15 +94381,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48176 "reason_parser.ml" +# 52974 "reason_parser.ml" in -# 2766 "reason_parser.mly" +# 2974 "reason_parser.mly" ( mkexp (Pexp_new _2) ) -# 48182 "reason_parser.ml" +# 52980 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -97169,15 +94397,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48192 "reason_parser.ml" +# 52990 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48198 "reason_parser.ml" +# 52996 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97254,15 +94482,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 48277 "reason_parser.ml" +# 53075 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 48283 "reason_parser.ml" +# 53081 "reason_parser.ml" in let _1 = @@ -97272,21 +94500,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48295 "reason_parser.ml" +# 53093 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2768 "reason_parser.mly" +# 2976 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Exp.mk ~loc ~attrs:[] (Pexp_override _4) in mkexp (Pexp_open(Fresh, _1, exp)) ) -# 48307 "reason_parser.ml" +# 53105 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -97294,15 +94522,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48317 "reason_parser.ml" +# 53115 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48323 "reason_parser.ml" +# 53121 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97384,9 +94612,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48407 "reason_parser.ml" +# 53205 "reason_parser.ml" in let _4 = @@ -97394,15 +94622,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 48417 "reason_parser.ml" +# 53215 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 48423 "reason_parser.ml" +# 53221 "reason_parser.ml" in let _3 = @@ -97412,15 +94640,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48435 "reason_parser.ml" +# 53233 "reason_parser.ml" in -# 2773 "reason_parser.mly" +# 2981 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{<") (with_txt _6 ">}") ) -# 48441 "reason_parser.ml" +# 53239 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -97428,15 +94656,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48451 "reason_parser.ml" +# 53249 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48457 "reason_parser.ml" +# 53255 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97465,9 +94693,9 @@ module Tables = struct }; } = _menhir_stack in let _1000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 48488 "reason_parser.ml" +# 53286 "reason_parser.ml" ) = Obj.magic _1000 in let _200 : unit = Obj.magic _200 in let _110 : 'tv_simple_expr_no_call = Obj.magic _110 in @@ -97487,15 +94715,15 @@ module Tables = struct let _3 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 48510 "reason_parser.ml" +# 53308 "reason_parser.ml" in -# 2775 "reason_parser.mly" +# 2983 "reason_parser.mly" ( mkexp (Pexp_send(_1, _3)) ) -# 48516 "reason_parser.ml" +# 53314 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -97503,15 +94731,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48526 "reason_parser.ml" +# 53324 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48532 "reason_parser.ml" +# 53330 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97541,9 +94769,9 @@ module Tables = struct } = _menhir_stack in let _300 : 'tv_simple_expr_no_call = Obj.magic _300 in let x000 : ( -# 1046 "reason_parser.mly" +# 1166 "reason_parser.mly" (string) -# 48564 "reason_parser.ml" +# 53362 "reason_parser.ml" ) = Obj.magic x000 in let _100 : 'tv_simple_expr_no_call = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -97570,15 +94798,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48593 "reason_parser.ml" +# 53391 "reason_parser.ml" in -# 2777 "reason_parser.mly" +# 2985 "reason_parser.mly" ( mkinfixop _1 (mkoperator _2) _3 ) -# 48599 "reason_parser.ml" +# 53397 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -97586,15 +94814,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48609 "reason_parser.ml" +# 53407 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48615 "reason_parser.ml" +# 53413 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97689,22 +94917,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48712 "reason_parser.ml" +# 53510 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 2779 "reason_parser.mly" +# 2987 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkexp (Pexp_open(Fresh, _1, mkexp ~loc (Pexp_constraint (mkexp ~ghost:true ~loc (Pexp_pack _5), mktyp ~ghost:true ~loc (Ptyp_package _7))))) ) -# 48725 "reason_parser.ml" +# 53523 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -97712,15 +94940,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48735 "reason_parser.ml" +# 53533 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48741 "reason_parser.ml" +# 53539 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97810,9 +95038,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48833 "reason_parser.ml" +# 53631 "reason_parser.ml" in let _3 = @@ -97822,15 +95050,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48845 "reason_parser.ml" +# 53643 "reason_parser.ml" in -# 2785 "reason_parser.mly" +# 2993 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _7 ")")) -# 48851 "reason_parser.ml" +# 53649 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -97838,15 +95066,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48861 "reason_parser.ml" +# 53659 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48867 "reason_parser.ml" +# 53665 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97875,9 +95103,9 @@ module Tables = struct let x = let _1 = _10 in -# 2787 "reason_parser.mly" +# 2995 "reason_parser.mly" ( mkexp (Pexp_extension _1) ) -# 48898 "reason_parser.ml" +# 53696 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -97885,15 +95113,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48908 "reason_parser.ml" +# 53706 "reason_parser.ml" in -# 2824 "reason_parser.mly" +# 3032 "reason_parser.mly" ( _1 ) -# 48914 "reason_parser.ml" +# 53712 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97916,9 +95144,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_simple_expr_no_call = -# 2825 "reason_parser.mly" +# 3033 "reason_parser.mly" ( _1 ) -# 48939 "reason_parser.ml" +# 53737 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -97955,15 +95183,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 48978 "reason_parser.ml" +# 53776 "reason_parser.ml" in -# 2681 "reason_parser.mly" +# 2889 "reason_parser.mly" ( mkexp (Pexp_ident _1) ) -# 48984 "reason_parser.ml" +# 53782 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -97971,15 +95199,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 48994 "reason_parser.ml" +# 53792 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49000 "reason_parser.ml" +# 53798 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98008,9 +95236,9 @@ module Tables = struct let x = let _1 = _10 in -# 2682 "reason_parser.mly" +# 2890 "reason_parser.mly" ( mkexp (Pexp_constant _1) ) -# 49031 "reason_parser.ml" +# 53829 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -98018,15 +95246,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49041 "reason_parser.ml" +# 53839 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49047 "reason_parser.ml" +# 53845 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98055,9 +95283,9 @@ module Tables = struct let x = let _1 = _10 in -# 2683 "reason_parser.mly" +# 2891 "reason_parser.mly" ( _1 ) -# 49078 "reason_parser.ml" +# 53876 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -98065,15 +95293,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49088 "reason_parser.ml" +# 53886 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49094 "reason_parser.ml" +# 53892 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98102,9 +95330,9 @@ module Tables = struct let x = let _1 = _10 in -# 2684 "reason_parser.mly" +# 2892 "reason_parser.mly" ( _1 ) -# 49125 "reason_parser.ml" +# 53923 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -98112,15 +95340,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49135 "reason_parser.ml" +# 53933 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49141 "reason_parser.ml" +# 53939 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98165,9 +95393,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2686 "reason_parser.mly" +# 2894 "reason_parser.mly" ( mkexp (Pexp_array _2) ) -# 49188 "reason_parser.ml" +# 53986 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -98175,15 +95403,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49198 "reason_parser.ml" +# 53996 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49204 "reason_parser.ml" +# 54002 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98240,9 +95468,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49263 "reason_parser.ml" +# 54061 "reason_parser.ml" in let _1 = @@ -98252,15 +95480,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49275 "reason_parser.ml" +# 54073 "reason_parser.ml" in -# 2688 "reason_parser.mly" +# 2896 "reason_parser.mly" ( unclosed_exp (with_txt _1 "[|") (with_txt _3 "|]") ) -# 49281 "reason_parser.ml" +# 54079 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -98268,15 +95496,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49291 "reason_parser.ml" +# 54089 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49297 "reason_parser.ml" +# 54095 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98313,9 +95541,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2690 "reason_parser.mly" +# 2898 "reason_parser.mly" ( mkexp (Pexp_array []) ) -# 49336 "reason_parser.ml" +# 54134 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -98323,15 +95551,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49346 "reason_parser.ml" +# 54144 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49352 "reason_parser.ml" +# 54150 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98368,15 +95596,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49391 "reason_parser.ml" +# 54189 "reason_parser.ml" in -# 2694 "reason_parser.mly" +# 2902 "reason_parser.mly" ( mkexp (Pexp_construct (_1, None)) ) -# 49397 "reason_parser.ml" +# 54195 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -98384,15 +95612,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49407 "reason_parser.ml" +# 54205 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49413 "reason_parser.ml" +# 54211 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98432,15 +95660,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 49455 "reason_parser.ml" +# 54253 "reason_parser.ml" in -# 2696 "reason_parser.mly" +# 2904 "reason_parser.mly" ( mkexp (Pexp_variant (_1, None)) ) -# 49461 "reason_parser.ml" +# 54259 "reason_parser.ml" in let _endpos_x_ = _endpos__200_ in @@ -98448,15 +95676,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49471 "reason_parser.ml" +# 54269 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49477 "reason_parser.ml" +# 54275 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98505,9 +95733,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _startpos = _startpos__1_ in -# 2698 "reason_parser.mly" +# 2906 "reason_parser.mly" ( may_tuple _startpos _endpos _2 ) -# 49528 "reason_parser.ml" +# 54326 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -98515,15 +95743,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49538 "reason_parser.ml" +# 54336 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49544 "reason_parser.ml" +# 54342 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98580,9 +95808,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49603 "reason_parser.ml" +# 54401 "reason_parser.ml" in let _1 = @@ -98592,15 +95820,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49615 "reason_parser.ml" +# 54413 "reason_parser.ml" in -# 2700 "reason_parser.mly" +# 2908 "reason_parser.mly" ( unclosed_exp (with_txt _1 "(") (with_txt _3 ")") ) -# 49621 "reason_parser.ml" +# 54419 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -98608,15 +95836,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49631 "reason_parser.ml" +# 54429 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49637 "reason_parser.ml" +# 54435 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98640,9 +95868,9 @@ module Tables = struct }; } = _menhir_stack in let x000 : ( -# 1034 "reason_parser.mly" +# 1154 "reason_parser.mly" (string) -# 49663 "reason_parser.ml" +# 54461 "reason_parser.ml" ) = Obj.magic x000 in let _100 : 'tv_simple_expr_no_constructor = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -98666,15 +95894,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49689 "reason_parser.ml" +# 54487 "reason_parser.ml" in -# 2702 "reason_parser.mly" +# 2910 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _2, [Nolabel, _1])) ) -# 49695 "reason_parser.ml" +# 54493 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -98682,15 +95910,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49705 "reason_parser.ml" +# 54503 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49711 "reason_parser.ml" +# 54509 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98763,15 +95991,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49786 "reason_parser.ml" +# 54584 "reason_parser.ml" in -# 2704 "reason_parser.mly" +# 2912 "reason_parser.mly" ( mkexp(Pexp_open(Fresh, _1, may_tuple _startpos__3_ _endpos__5_ _4)) ) -# 49792 "reason_parser.ml" +# 54590 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -98779,15 +96007,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49802 "reason_parser.ml" +# 54600 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49808 "reason_parser.ml" +# 54606 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98861,9 +96089,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49884 "reason_parser.ml" +# 54682 "reason_parser.ml" in let _3 = @@ -98873,15 +96101,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49896 "reason_parser.ml" +# 54694 "reason_parser.ml" in -# 2706 "reason_parser.mly" +# 2914 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _5 ")") ) -# 49902 "reason_parser.ml" +# 54700 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -98889,15 +96117,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49912 "reason_parser.ml" +# 54710 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49918 "reason_parser.ml" +# 54716 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -98951,15 +96179,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 49974 "reason_parser.ml" +# 54772 "reason_parser.ml" in -# 2708 "reason_parser.mly" +# 2916 "reason_parser.mly" ( mkexp(Pexp_field(_1, _3)) ) -# 49980 "reason_parser.ml" +# 54778 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -98967,15 +96195,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 49990 "reason_parser.ml" +# 54788 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 49996 "reason_parser.ml" +# 54794 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99038,22 +96266,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50061 "reason_parser.ml" +# 54859 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2710 "reason_parser.mly" +# 2918 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let pat = mkpat (Ppat_var (mkloc "this" loc)) in mkexp(Pexp_open (Fresh, _1, mkexp(Pexp_object(Cstr.mk pat [])))) ) -# 50074 "reason_parser.ml" +# 54872 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -99061,15 +96289,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50084 "reason_parser.ml" +# 54882 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50090 "reason_parser.ml" +# 54888 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99126,12 +96354,12 @@ module Tables = struct let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in -# 2716 "reason_parser.mly" +# 2924 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "Array" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_3])) ) -# 50152 "reason_parser.ml" +# 54950 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -99139,15 +96367,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50162 "reason_parser.ml" +# 54960 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50168 "reason_parser.ml" +# 54966 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99213,9 +96441,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50236 "reason_parser.ml" +# 55034 "reason_parser.ml" in let _2 = @@ -99225,15 +96453,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50248 "reason_parser.ml" +# 55046 "reason_parser.ml" in -# 2721 "reason_parser.mly" +# 2929 "reason_parser.mly" ( unclosed_exp (with_txt _2 "(") (with_txt _4 ")") ) -# 50254 "reason_parser.ml" +# 55052 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -99241,15 +96469,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50264 "reason_parser.ml" +# 55062 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50270 "reason_parser.ml" +# 55068 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99314,12 +96542,12 @@ module Tables = struct let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2723 "reason_parser.mly" +# 2931 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "String" "get") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_4])) ) -# 50340 "reason_parser.ml" +# 55138 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -99327,15 +96555,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50350 "reason_parser.ml" +# 55148 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50356 "reason_parser.ml" +# 55154 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99409,9 +96637,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50432 "reason_parser.ml" +# 55230 "reason_parser.ml" in let _3 = @@ -99421,15 +96649,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50444 "reason_parser.ml" +# 55242 "reason_parser.ml" in -# 2728 "reason_parser.mly" +# 2936 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[") (with_txt _5 "]") ) -# 50450 "reason_parser.ml" +# 55248 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -99437,15 +96665,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50460 "reason_parser.ml" +# 55258 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50466 "reason_parser.ml" +# 55264 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99510,11 +96738,11 @@ module Tables = struct let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2730 "reason_parser.mly" +# 2938 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in bigarray_get ~loc _1 _4 ) -# 50535 "reason_parser.ml" +# 55333 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -99522,15 +96750,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50545 "reason_parser.ml" +# 55343 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50551 "reason_parser.ml" +# 55349 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99601,22 +96829,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50624 "reason_parser.ml" +# 55422 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2734 "reason_parser.mly" +# 2942 "reason_parser.mly" ( let (exten, fields) = _4 in let loc = mklocation _symbolstartpos _endpos in let rec_exp = mkexp ~loc (Pexp_record (fields, exten)) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 50637 "reason_parser.ml" +# 55435 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -99624,15 +96852,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50647 "reason_parser.ml" +# 55445 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50653 "reason_parser.ml" +# 55451 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99706,9 +96934,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50729 "reason_parser.ml" +# 55527 "reason_parser.ml" in let _3 = @@ -99718,15 +96946,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50741 "reason_parser.ml" +# 55539 "reason_parser.ml" in -# 2740 "reason_parser.mly" +# 2948 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{") (with_txt _5 "}") ) -# 50747 "reason_parser.ml" +# 55545 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -99734,15 +96962,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50757 "reason_parser.ml" +# 55555 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50763 "reason_parser.ml" +# 55561 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99813,21 +97041,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50836 "reason_parser.ml" +# 55634 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 2742 "reason_parser.mly" +# 2950 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let rec_exp = Exp.mk ~loc ~attrs:[] (Pexp_array _4) in mkexp(Pexp_open(Fresh, _1, rec_exp)) ) -# 50848 "reason_parser.ml" +# 55646 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -99835,15 +97063,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50858 "reason_parser.ml" +# 55656 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50864 "reason_parser.ml" +# 55662 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -99917,9 +97145,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50940 "reason_parser.ml" +# 55738 "reason_parser.ml" in let _3 = @@ -99929,15 +97157,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 50952 "reason_parser.ml" +# 55750 "reason_parser.ml" in -# 2747 "reason_parser.mly" +# 2955 "reason_parser.mly" ( unclosed_exp (with_txt _3 "[|") (with_txt _5 "|]") ) -# 50958 "reason_parser.ml" +# 55756 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -99945,15 +97173,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 50968 "reason_parser.ml" +# 55766 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 50974 "reason_parser.ml" +# 55772 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100027,20 +97255,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51050 "reason_parser.ml" +# 55848 "reason_parser.ml" in -# 2749 "reason_parser.mly" +# 2957 "reason_parser.mly" ( let seq, ext_opt = _4 in let loc = mklocation _startpos__4_ _endpos__4_ in let list_exp = make_real_exp (mktailexp_extension loc seq ext_opt) in let list_exp = { list_exp with pexp_loc = loc } in mkexp (Pexp_open (Fresh, _1, list_exp)) ) -# 51061 "reason_parser.ml" +# 55859 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -100048,15 +97276,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51071 "reason_parser.ml" +# 55869 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51077 "reason_parser.ml" +# 55875 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100081,9 +97309,9 @@ module Tables = struct } = _menhir_stack in let _200 : 'tv_simple_expr_no_constructor = Obj.magic _200 in let x000 : ( -# 1033 "reason_parser.mly" +# 1153 "reason_parser.mly" (string) -# 51104 "reason_parser.ml" +# 55902 "reason_parser.ml" ) = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -100106,15 +97334,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51129 "reason_parser.ml" +# 55927 "reason_parser.ml" in -# 2756 "reason_parser.mly" +# 2964 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _1, [Nolabel, _2])) ) -# 51135 "reason_parser.ml" +# 55933 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -100122,15 +97350,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51145 "reason_parser.ml" +# 55943 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51151 "reason_parser.ml" +# 55949 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100176,15 +97404,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51199 "reason_parser.ml" +# 55997 "reason_parser.ml" in -# 2766 "reason_parser.mly" +# 2974 "reason_parser.mly" ( mkexp (Pexp_new _2) ) -# 51205 "reason_parser.ml" +# 56003 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -100192,15 +97420,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51215 "reason_parser.ml" +# 56013 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51221 "reason_parser.ml" +# 56019 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100277,15 +97505,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 51300 "reason_parser.ml" +# 56098 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 51306 "reason_parser.ml" +# 56104 "reason_parser.ml" in let _1 = @@ -100295,21 +97523,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51318 "reason_parser.ml" +# 56116 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2768 "reason_parser.mly" +# 2976 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Exp.mk ~loc ~attrs:[] (Pexp_override _4) in mkexp (Pexp_open(Fresh, _1, exp)) ) -# 51330 "reason_parser.ml" +# 56128 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -100317,15 +97545,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51340 "reason_parser.ml" +# 56138 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51346 "reason_parser.ml" +# 56144 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100407,9 +97635,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51430 "reason_parser.ml" +# 56228 "reason_parser.ml" in let _4 = @@ -100417,15 +97645,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 51440 "reason_parser.ml" +# 56238 "reason_parser.ml" in -# 3176 "reason_parser.mly" +# 3455 "reason_parser.mly" ( _1 ) -# 51446 "reason_parser.ml" +# 56244 "reason_parser.ml" in let _3 = @@ -100435,15 +97663,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51458 "reason_parser.ml" +# 56256 "reason_parser.ml" in -# 2773 "reason_parser.mly" +# 2981 "reason_parser.mly" ( unclosed_exp (with_txt _3 "{<") (with_txt _6 ">}") ) -# 51464 "reason_parser.ml" +# 56262 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -100451,15 +97679,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51474 "reason_parser.ml" +# 56272 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51480 "reason_parser.ml" +# 56278 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100488,9 +97716,9 @@ module Tables = struct }; } = _menhir_stack in let _1000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 51511 "reason_parser.ml" +# 56309 "reason_parser.ml" ) = Obj.magic _1000 in let _200 : unit = Obj.magic _200 in let _110 : 'tv_simple_expr_no_constructor = Obj.magic _110 in @@ -100510,15 +97738,15 @@ module Tables = struct let _3 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 51533 "reason_parser.ml" +# 56331 "reason_parser.ml" in -# 2775 "reason_parser.mly" +# 2983 "reason_parser.mly" ( mkexp (Pexp_send(_1, _3)) ) -# 51539 "reason_parser.ml" +# 56337 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -100526,15 +97754,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51549 "reason_parser.ml" +# 56347 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51555 "reason_parser.ml" +# 56353 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100564,9 +97792,9 @@ module Tables = struct } = _menhir_stack in let _300 : 'tv_simple_expr_no_call = Obj.magic _300 in let x000 : ( -# 1046 "reason_parser.mly" +# 1166 "reason_parser.mly" (string) -# 51587 "reason_parser.ml" +# 56385 "reason_parser.ml" ) = Obj.magic x000 in let _100 : 'tv_simple_expr_no_constructor = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -100593,15 +97821,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51616 "reason_parser.ml" +# 56414 "reason_parser.ml" in -# 2777 "reason_parser.mly" +# 2985 "reason_parser.mly" ( mkinfixop _1 (mkoperator _2) _3 ) -# 51622 "reason_parser.ml" +# 56420 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -100609,15 +97837,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51632 "reason_parser.ml" +# 56430 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51638 "reason_parser.ml" +# 56436 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100712,22 +97940,22 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51735 "reason_parser.ml" +# 56533 "reason_parser.ml" in let _startpos__1_ = _startpos_x0_ in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 2779 "reason_parser.mly" +# 2987 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkexp (Pexp_open(Fresh, _1, mkexp ~loc (Pexp_constraint (mkexp ~ghost:true ~loc (Pexp_pack _5), mktyp ~ghost:true ~loc (Ptyp_package _7))))) ) -# 51748 "reason_parser.ml" +# 56546 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -100735,15 +97963,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51758 "reason_parser.ml" +# 56556 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51764 "reason_parser.ml" +# 56562 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100833,9 +98061,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51856 "reason_parser.ml" +# 56654 "reason_parser.ml" in let _3 = @@ -100845,15 +98073,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51868 "reason_parser.ml" +# 56666 "reason_parser.ml" in -# 2785 "reason_parser.mly" +# 2993 "reason_parser.mly" ( unclosed_exp (with_txt _3 "(") (with_txt _7 ")")) -# 51874 "reason_parser.ml" +# 56672 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -100861,15 +98089,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51884 "reason_parser.ml" +# 56682 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51890 "reason_parser.ml" +# 56688 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100898,9 +98126,9 @@ module Tables = struct let x = let _1 = _10 in -# 2787 "reason_parser.mly" +# 2995 "reason_parser.mly" ( mkexp (Pexp_extension _1) ) -# 51921 "reason_parser.ml" +# 56719 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -100908,15 +98136,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51931 "reason_parser.ml" +# 56729 "reason_parser.ml" in -# 2793 "reason_parser.mly" +# 3001 "reason_parser.mly" ( _1 ) -# 51937 "reason_parser.ml" +# 56735 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -100951,9 +98179,9 @@ module Tables = struct let x = let _1 = _10 in -# 2798 "reason_parser.mly" +# 3006 "reason_parser.mly" ( mkexp (Pexp_tuple(_1)) ) -# 51974 "reason_parser.ml" +# 56772 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -100961,9 +98189,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 51984 "reason_parser.ml" +# 56782 "reason_parser.ml" in let _1 = @@ -100973,13 +98201,13 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 51996 "reason_parser.ml" +# 56794 "reason_parser.ml" in -# 2801 "reason_parser.mly" +# 3009 "reason_parser.mly" ( (*if List.mem (string_of_longident $1.txt) built_in_explicit_arity_constructors then (* unboxing the inner tupple *) @@ -100989,7 +98217,7 @@ module Tables = struct else*) mkExplicitArityTupleExp (Pexp_construct(_1, Some _2)) ) -# 52010 "reason_parser.ml" +# 56808 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101024,9 +98252,9 @@ module Tables = struct let x = let _1 = _10 in -# 2799 "reason_parser.mly" +# 3007 "reason_parser.mly" ( _1 ) -# 52047 "reason_parser.ml" +# 56845 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101034,9 +98262,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52057 "reason_parser.ml" +# 56855 "reason_parser.ml" in let _1 = @@ -101046,13 +98274,13 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52069 "reason_parser.ml" +# 56867 "reason_parser.ml" in -# 2801 "reason_parser.mly" +# 3009 "reason_parser.mly" ( (*if List.mem (string_of_longident $1.txt) built_in_explicit_arity_constructors then (* unboxing the inner tupple *) @@ -101062,7 +98290,7 @@ module Tables = struct else*) mkExplicitArityTupleExp (Pexp_construct(_1, Some _2)) ) -# 52083 "reason_parser.ml" +# 56881 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101103,13 +98331,13 @@ module Tables = struct let x = let _1 = _10 in -# 2813 "reason_parser.mly" +# 3021 "reason_parser.mly" ( (* only wrap in a tuple if there are more than one arguments *) match _1 with | [x] -> x | l -> mkexp (Pexp_tuple(l)) ) -# 52130 "reason_parser.ml" +# 56928 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101117,24 +98345,24 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52140 "reason_parser.ml" +# 56938 "reason_parser.ml" in let _1 = let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 52149 "reason_parser.ml" +# 56947 "reason_parser.ml" in -# 2820 "reason_parser.mly" +# 3028 "reason_parser.mly" ( mkexp(Pexp_variant(_1, Some _2)) ) -# 52155 "reason_parser.ml" +# 56953 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101175,9 +98403,9 @@ module Tables = struct let x = let _1 = _10 in -# 2818 "reason_parser.mly" +# 3026 "reason_parser.mly" ( _1 ) -# 52198 "reason_parser.ml" +# 56996 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101185,24 +98413,24 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52208 "reason_parser.ml" +# 57006 "reason_parser.ml" in let _1 = let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 52217 "reason_parser.ml" +# 57015 "reason_parser.ml" in -# 2820 "reason_parser.mly" +# 3028 "reason_parser.mly" ( mkexp(Pexp_variant(_1, Some _2)) ) -# 52223 "reason_parser.ml" +# 57021 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101257,22 +98485,22 @@ module Tables = struct # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 52278 "reason_parser.ml" +# 57076 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 52284 "reason_parser.ml" +# 57082 "reason_parser.ml" in -# 1597 "reason_parser.mly" +# 1725 "reason_parser.mly" ( match _1.txt with | (None, Some x) -> x | _ -> syntax_error_mod _1.loc "Expecting a simple module type" ) -# 52293 "reason_parser.ml" +# 57091 "reason_parser.ml" in let _endpos_x_ = _endpos__3000_ in @@ -101280,15 +98508,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52303 "reason_parser.ml" +# 57101 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52309 "reason_parser.ml" +# 57107 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101317,9 +98545,9 @@ module Tables = struct let x = let _1 = _10 in -# 1601 "reason_parser.mly" +# 1729 "reason_parser.mly" ( _1 ) -# 52340 "reason_parser.ml" +# 57138 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101327,15 +98555,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52350 "reason_parser.ml" +# 57148 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52356 "reason_parser.ml" +# 57154 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101392,9 +98620,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52415 "reason_parser.ml" +# 57213 "reason_parser.ml" in let _1 = @@ -101404,15 +98632,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52427 "reason_parser.ml" +# 57225 "reason_parser.ml" in -# 1603 "reason_parser.mly" +# 1731 "reason_parser.mly" ( unclosed_mty (with_txt _1 "(") (with_txt _3 ")")) -# 52433 "reason_parser.ml" +# 57231 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -101420,15 +98648,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52443 "reason_parser.ml" +# 57241 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52449 "reason_parser.ml" +# 57247 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101465,15 +98693,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52488 "reason_parser.ml" +# 57286 "reason_parser.ml" in -# 1605 "reason_parser.mly" +# 1733 "reason_parser.mly" ( mkmty (Pmty_ident _1) ) -# 52494 "reason_parser.ml" +# 57292 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -101481,15 +98709,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52504 "reason_parser.ml" +# 57302 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52510 "reason_parser.ml" +# 57308 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101546,9 +98774,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52569 "reason_parser.ml" +# 57367 "reason_parser.ml" in let _1 = @@ -101558,15 +98786,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52581 "reason_parser.ml" +# 57379 "reason_parser.ml" in -# 1607 "reason_parser.mly" +# 1735 "reason_parser.mly" ( unclosed_mty (with_txt _1 "{") (with_txt _3 "}")) -# 52587 "reason_parser.ml" +# 57385 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -101574,15 +98802,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52597 "reason_parser.ml" +# 57395 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52603 "reason_parser.ml" +# 57401 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101611,9 +98839,9 @@ module Tables = struct let x = let _1 = _10 in -# 1609 "reason_parser.mly" +# 1737 "reason_parser.mly" ( mkmty (Pmty_extension _1) ) -# 52634 "reason_parser.ml" +# 57432 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101621,15 +98849,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4369 "reason_parser.mly" +# 4684 "reason_parser.mly" ( {x with pmty_loc = {x.pmty_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52644 "reason_parser.ml" +# 57442 "reason_parser.ml" in -# 1610 "reason_parser.mly" +# 1738 "reason_parser.mly" (_1) -# 52650 "reason_parser.ml" +# 57448 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101666,15 +98894,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52689 "reason_parser.ml" +# 57487 "reason_parser.ml" in -# 3302 "reason_parser.mly" +# 3584 "reason_parser.mly" ( mkpat(Ppat_var _1) ) -# 52695 "reason_parser.ml" +# 57493 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -101682,15 +98910,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52705 "reason_parser.ml" +# 57503 "reason_parser.ml" in -# 3304 "reason_parser.mly" +# 3586 "reason_parser.mly" (_1) -# 52711 "reason_parser.ml" +# 57509 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101719,9 +98947,9 @@ module Tables = struct let x = let _1 = _10 in -# 3303 "reason_parser.mly" +# 3585 "reason_parser.mly" ( _1 ) -# 52742 "reason_parser.ml" +# 57540 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -101729,15 +98957,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52752 "reason_parser.ml" +# 57550 "reason_parser.ml" in -# 3304 "reason_parser.mly" +# 3586 "reason_parser.mly" (_1) -# 52758 "reason_parser.ml" +# 57556 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101774,15 +99002,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52797 "reason_parser.ml" +# 57595 "reason_parser.ml" in -# 3211 "reason_parser.mly" +# 3493 "reason_parser.mly" ( mkpat(Ppat_construct(mkloc _1.txt _1.loc, None)) ) -# 52803 "reason_parser.ml" +# 57601 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -101790,15 +99018,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52813 "reason_parser.ml" +# 57611 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 52819 "reason_parser.ml" +# 57617 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101847,15 +99075,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3352 "reason_parser.mly" +# 3636 "reason_parser.mly" ( let (fields, closed) = _2 in mkpat (Ppat_record (fields, closed)) ) -# 52870 "reason_parser.ml" +# 57668 "reason_parser.ml" in -# 3212 "reason_parser.mly" +# 3494 "reason_parser.mly" ( _1 ) -# 52876 "reason_parser.ml" +# 57674 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -101863,15 +99091,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52886 "reason_parser.ml" +# 57684 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 52892 "reason_parser.ml" +# 57690 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -101936,9 +99164,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52959 "reason_parser.ml" +# 57757 "reason_parser.ml" in let _1 = @@ -101948,21 +99176,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 52971 "reason_parser.ml" +# 57769 "reason_parser.ml" in -# 3354 "reason_parser.mly" +# 3638 "reason_parser.mly" ( unclosed_pat (with_txt _1 "{") (with_txt _3 "}") ) -# 52977 "reason_parser.ml" +# 57775 "reason_parser.ml" in -# 3212 "reason_parser.mly" +# 3494 "reason_parser.mly" ( _1 ) -# 52983 "reason_parser.ml" +# 57781 "reason_parser.ml" in let _endpos_x_ = _endpos_x100_ in @@ -101970,15 +99198,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 52993 "reason_parser.ml" +# 57791 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 52999 "reason_parser.ml" +# 57797 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102033,15 +99261,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3359 "reason_parser.mly" +# 3643 "reason_parser.mly" ( make_real_pat (mktailpat_extension (mklocation _startpos__2_ _endpos__2_) _2) ) -# 53056 "reason_parser.ml" +# 57854 "reason_parser.ml" in -# 3213 "reason_parser.mly" +# 3495 "reason_parser.mly" ( _1 ) -# 53062 "reason_parser.ml" +# 57860 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -102049,15 +99277,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53072 "reason_parser.ml" +# 57870 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 53078 "reason_parser.ml" +# 57876 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102122,9 +99350,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53145 "reason_parser.ml" +# 57943 "reason_parser.ml" in let _1 = @@ -102134,21 +99362,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53157 "reason_parser.ml" +# 57955 "reason_parser.ml" in -# 3361 "reason_parser.mly" +# 3645 "reason_parser.mly" ( unclosed_pat (with_txt _1 "[") (with_txt _3 "]") ) -# 53163 "reason_parser.ml" +# 57961 "reason_parser.ml" in -# 3213 "reason_parser.mly" +# 3495 "reason_parser.mly" ( _1 ) -# 53169 "reason_parser.ml" +# 57967 "reason_parser.ml" in let _endpos_x_ = _endpos_x100_ in @@ -102156,15 +99384,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53179 "reason_parser.ml" +# 57977 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 53185 "reason_parser.ml" +# 57983 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102193,7 +99421,7 @@ module Tables = struct }; } = _menhir_stack in let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_loption_terminated_pattern_comma_list_option_SEMI___ = Obj.magic _2000 in + let _2000 : 'tv_loption_terminated_pattern_comma_list_option_COMMA___ = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in @@ -102213,15 +99441,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3366 "reason_parser.mly" +# 3650 "reason_parser.mly" ( mkpat (Ppat_array _2) ) -# 53236 "reason_parser.ml" +# 58034 "reason_parser.ml" in -# 3214 "reason_parser.mly" +# 3496 "reason_parser.mly" ( _1 ) -# 53242 "reason_parser.ml" +# 58040 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -102229,15 +99457,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53252 "reason_parser.ml" +# 58050 "reason_parser.ml" in -# 3215 "reason_parser.mly" +# 3497 "reason_parser.mly" (_1) -# 53258 "reason_parser.ml" +# 58056 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102266,9 +99494,9 @@ module Tables = struct let x = let _1 = _10 in -# 3309 "reason_parser.mly" +# 3591 "reason_parser.mly" ( mkpat (Ppat_any) ) -# 53289 "reason_parser.ml" +# 58087 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -102276,15 +99504,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53299 "reason_parser.ml" +# 58097 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53305 "reason_parser.ml" +# 58103 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102313,9 +99541,9 @@ module Tables = struct let x = let _1 = _10 in -# 3311 "reason_parser.mly" +# 3593 "reason_parser.mly" ( mkpat (Ppat_constant _1) ) -# 53336 "reason_parser.ml" +# 58134 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -102323,15 +99551,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53346 "reason_parser.ml" +# 58144 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53352 "reason_parser.ml" +# 58150 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102376,9 +99604,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3313 "reason_parser.mly" +# 3595 "reason_parser.mly" ( mkpat (Ppat_interval (_1, _3)) ) -# 53399 "reason_parser.ml" +# 58197 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -102386,15 +99614,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53409 "reason_parser.ml" +# 58207 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53415 "reason_parser.ml" +# 58213 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102431,15 +99659,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53454 "reason_parser.ml" +# 58252 "reason_parser.ml" in -# 3315 "reason_parser.mly" +# 3597 "reason_parser.mly" ( mkpat (Ppat_construct (_1, None)) ) -# 53460 "reason_parser.ml" +# 58258 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -102447,15 +99675,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53470 "reason_parser.ml" +# 58268 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53476 "reason_parser.ml" +# 58274 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102495,15 +99723,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 53518 "reason_parser.ml" +# 58316 "reason_parser.ml" in -# 3317 "reason_parser.mly" +# 3599 "reason_parser.mly" ( mkpat (Ppat_variant (_1, None)) ) -# 53524 "reason_parser.ml" +# 58322 "reason_parser.ml" in let _endpos_x_ = _endpos__200_ in @@ -102511,15 +99739,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53534 "reason_parser.ml" +# 58332 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53540 "reason_parser.ml" +# 58338 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102565,15 +99793,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53588 "reason_parser.ml" +# 58386 "reason_parser.ml" in -# 3319 "reason_parser.mly" +# 3601 "reason_parser.mly" ( mkpat (Ppat_type (_2)) ) -# 53594 "reason_parser.ml" +# 58392 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -102581,292 +99809,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" - ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53604 "reason_parser.ml" - - in - -# 3348 "reason_parser.mly" - (_1) -# 53610 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = x100; - MenhirLib.EngineTypes.startp = _startpos_x100_; - MenhirLib.EngineTypes.endp = _endpos_x100_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let x100 : unit = Obj.magic x100 in - let _300 : 'tv_option_SEMI_ = Obj.magic _300 in - let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _10000 in - let x000 : unit = Obj.magic x000 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x000_ in - let _endpos = _endpos_x100_ in - let _v : 'tv_simple_pattern_not_ident = let _1 = - let _endpos_x10_ = _endpos_x100_ in - let _startpos_x10_ = _startpos_x100_ in - let _endpos_x00_ = _endpos_x000_ in - let _startpos_x00_ = _startpos_x000_ in - let x10 = x100 in - let _30 = _300 in - let _1000 = _10000 in - let x00 = x000 in - let x = - let _endpos_x1_ = _endpos_x10_ in - let _startpos_x1_ = _startpos_x10_ in - let _endpos_x0_ = _endpos_x00_ in - let _startpos_x0_ = _startpos_x00_ in - let x1 = x10 in - let _3 = _30 in - let _100 = _1000 in - let x0 = x00 in - let _4 = - let _endpos_x_ = _endpos_x1_ in - let _startpos_x_ = _startpos_x1_ in - let x = x1 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53677 "reason_parser.ml" - - in - let _2 = - let _10 = _100 in - let _1 = - let _1 = _10 in - -# 4419 "reason_parser.mly" - ( List.rev _1 ) -# 53687 "reason_parser.ml" - - in - -# 3377 "reason_parser.mly" - ( _1 ) -# 53693 "reason_parser.ml" - - in - let _1 = - let _endpos_x_ = _endpos_x0_ in - let _startpos_x_ = _startpos_x0_ in - let x = x0 in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4393 "reason_parser.mly" - ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53705 "reason_parser.ml" - - in - -# 3321 "reason_parser.mly" - ( unclosed_pat (with_txt _1 "[|") (with_txt _4 "|]") ) -# 53711 "reason_parser.ml" - - in - let _endpos_x_ = _endpos_x10_ in - let _startpos_x_ = _startpos_x00_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4389 "reason_parser.mly" - ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53721 "reason_parser.ml" - - in - -# 3348 "reason_parser.mly" - (_1) -# 53727 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_pattern = Obj.magic _200 in - let _100 : unit = Obj.magic _100 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_simple_pattern_not_ident = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _20 = _200 in - let _10 = _100 in - let x = - let _3 = _30 in - let _2 = _20 in - let _1 = _10 in - -# 3323 "reason_parser.mly" - ( _2 ) -# 53774 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4389 "reason_parser.mly" - ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53784 "reason_parser.ml" - - in - -# 3348 "reason_parser.mly" - (_1) -# 53790 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _300 : unit = Obj.magic _300 in - let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = Obj.magic _10000 in - let _2000 : unit = Obj.magic _2000 in - let _1100 : 'tv_pattern_optional_constraint = Obj.magic _1100 in - let _100 : unit = Obj.magic _100 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__300_ in - let _v : 'tv_simple_pattern_not_ident = let _1 = - let _endpos__30_ = _endpos__300_ in - let _startpos__10_ = _startpos__100_ in - let _30 = _300 in - let _1000 = _10000 in - let _200 = _2000 in - let _110 = _1100 in - let _10 = _100 in - let x = - let _3 = _30 in - let _100 = _1000 in - let _20 = _200 in - let _11 = _110 in - let _1 = _10 in - let _2 = - let _10 = _100 in - let _2 = _20 in - let _1 = _11 in - let _3 = - let _1 = _10 in - -# 4419 "reason_parser.mly" - ( List.rev _1 ) -# 53859 "reason_parser.ml" - - in - -# 4427 "reason_parser.mly" - ( _1 :: _3 ) -# 53865 "reason_parser.ml" - - in - -# 3325 "reason_parser.mly" - ( mkpat (Ppat_tuple _2) ) -# 53871 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__30_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53881 "reason_parser.ml" +# 58402 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53887 "reason_parser.ml" +# 58408 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102882,20 +99833,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos_x100_; MenhirLib.EngineTypes.endp = _endpos_x100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let x100 : unit = Obj.magic x100 in - let _200 : 'tv_pattern = Obj.magic _200 in + let _300 : 'tv_option_SEMI_ = Obj.magic _300 in + let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_ = Obj.magic _10000 in let x000 : unit = Obj.magic x000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x000_ in @@ -102906,7 +99863,8 @@ module Tables = struct let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let x10 = x100 in - let _20 = _200 in + let _30 = _300 in + let _1000 = _10000 in let x00 = x000 in let x = let _endpos_x1_ = _endpos_x10_ in @@ -102914,18 +99872,35 @@ module Tables = struct let _endpos_x0_ = _endpos_x00_ in let _startpos_x0_ = _startpos_x00_ in let x1 = x10 in - let _2 = _20 in + let _3 = _30 in + let _100 = _1000 in let x0 = x00 in - let _3 = + let _4 = let _endpos_x_ = _endpos_x1_ in let _startpos_x_ = _startpos_x1_ in let x = x1 in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53946 "reason_parser.ml" +# 58475 "reason_parser.ml" + + in + let _2 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 58485 "reason_parser.ml" + + in + +# 3661 "reason_parser.mly" + ( _1 ) +# 58491 "reason_parser.ml" in let _1 = @@ -102935,15 +99910,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 53958 "reason_parser.ml" +# 58503 "reason_parser.ml" in -# 3327 "reason_parser.mly" - ( unclosed_pat (with_txt _1 "(") (with_txt _3 ")") ) -# 53964 "reason_parser.ml" +# 3603 "reason_parser.mly" + ( unclosed_pat (with_txt _1 "[|") (with_txt _4 "|]") ) +# 58509 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -102951,15 +99926,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 53974 "reason_parser.ml" +# 58519 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 53980 "reason_parser.ml" +# 58525 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -102971,90 +99946,177 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _500; - MenhirLib.EngineTypes.startp = _startpos__500_; - MenhirLib.EngineTypes.endp = _endpos__500_; + MenhirLib.EngineTypes.semv = _400; + MenhirLib.EngineTypes.startp = _startpos__400_; + MenhirLib.EngineTypes.endp = _endpos__400_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.semv = _300; + MenhirLib.EngineTypes.startp = _startpos__300_; + MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _300; - MenhirLib.EngineTypes.startp = _startpos__300_; - MenhirLib.EngineTypes.endp = _endpos__300_; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _200; - MenhirLib.EngineTypes.startp = _startpos__200_; - MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _110; - MenhirLib.EngineTypes.startp = _startpos__110_; - MenhirLib.EngineTypes.endp = _endpos__110_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _110; + MenhirLib.EngineTypes.startp = _startpos__110_; + MenhirLib.EngineTypes.endp = _endpos__110_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _500 : unit = Obj.magic _500 in - let _1000 : 'tv_core_type = Obj.magic _1000 in - let _300 : unit = Obj.magic _300 in - let _200 : 'tv_pattern = Obj.magic _200 in + let _400 : unit = Obj.magic _400 in + let _300 : 'tv_option_COMMA_ = Obj.magic _300 in + let _1000 : 'tv_lseparated_nonempty_list_aux_COMMA_pattern_optional_constraint_ = Obj.magic _1000 in let _110 : unit = Obj.magic _110 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__110_ in - let _endpos = _endpos__500_ in + let _endpos = _endpos__400_ in let _v : 'tv_simple_pattern_not_ident = let _1 = - let _endpos__50_ = _endpos__500_ in + let _endpos__40_ = _endpos__400_ in let _startpos__11_ = _startpos__110_ in - let _endpos__100_ = _endpos__1000_ in - let _startpos__100_ = _startpos__1000_ in - let _50 = _500 in - let _100 = _1000 in + let _40 = _400 in let _30 = _300 in - let _20 = _200 in + let _100 = _1000 in let _11 = _110 in let x = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in - let _5 = _50 in - let _10 = _100 in + let _endpos__4_ = _endpos__40_ in + let _startpos__1_ = _startpos__11_ in + let _4 = _40 in let _3 = _30 in - let _2 = _20 in + let _10 = _100 in let _1 = _11 in - let _4 = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in + let _2 = let _1 = _10 in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" - ( only_core_type _1 _symbolstartpos _endpos ) -# 54053 "reason_parser.ml" +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 58584 "reason_parser.ml" in + let _endpos = _endpos__4_ in + let _startpos = _startpos__1_ in -# 3329 "reason_parser.mly" - ( mkpat(Ppat_constraint(_2, _4)) ) -# 54059 "reason_parser.ml" +# 3605 "reason_parser.mly" + ( match _2 with + | [] -> (* This shouldn't be possible *) + let loc = mklocation _startpos _endpos in + mkpat_constructor_unit loc loc + | [hd] -> hd + | hd :: tl -> mkpat (Ppat_tuple _2) + ) +# 58598 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in + let _endpos_x_ = _endpos__40_ in let _startpos_x_ = _startpos__11_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54069 "reason_parser.ml" +# 58608 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54075 "reason_parser.ml" +# 58614 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = x100; + MenhirLib.EngineTypes.startp = _startpos_x100_; + MenhirLib.EngineTypes.endp = _endpos_x100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _200; + MenhirLib.EngineTypes.startp = _startpos__200_; + MenhirLib.EngineTypes.endp = _endpos__200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let x100 : unit = Obj.magic x100 in + let _200 : 'tv_pattern = Obj.magic _200 in + let x000 : unit = Obj.magic x000 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x000_ in + let _endpos = _endpos_x100_ in + let _v : 'tv_simple_pattern_not_ident = let _1 = + let _endpos_x10_ = _endpos_x100_ in + let _startpos_x10_ = _startpos_x100_ in + let _endpos_x00_ = _endpos_x000_ in + let _startpos_x00_ = _startpos_x000_ in + let x10 = x100 in + let _20 = _200 in + let x00 = x000 in + let x = + let _endpos_x1_ = _endpos_x10_ in + let _startpos_x1_ = _startpos_x10_ in + let _endpos_x0_ = _endpos_x00_ in + let _startpos_x0_ = _startpos_x00_ in + let x1 = x10 in + let _2 = _20 in + let x0 = x00 in + let _3 = + let _endpos_x_ = _endpos_x1_ in + let _startpos_x_ = _startpos_x1_ in + let x = x1 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 58673 "reason_parser.ml" + + in + let _1 = + let _endpos_x_ = _endpos_x0_ in + let _startpos_x_ = _startpos_x0_ in + let x = x0 in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4708 "reason_parser.mly" + ( mkloc x (mklocation _symbolstartpos _endpos) ) +# 58685 "reason_parser.ml" + + in + +# 3613 "reason_parser.mly" + ( unclosed_pat (with_txt _1 "(") (with_txt _3 ")") ) +# 58691 "reason_parser.ml" + + in + let _endpos_x_ = _endpos_x10_ in + let _startpos_x_ = _startpos_x00_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4704 "reason_parser.mly" + ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 58701 "reason_parser.ml" + + in + +# 3632 "reason_parser.mly" + (_1) +# 58707 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103127,9 +100189,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54150 "reason_parser.ml" +# 58782 "reason_parser.ml" in let _1 = @@ -103139,15 +100201,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54162 "reason_parser.ml" +# 58794 "reason_parser.ml" in -# 3331 "reason_parser.mly" +# 3615 "reason_parser.mly" ( unclosed_pat (with_txt _1 "(") (with_txt _5 ")") ) -# 54168 "reason_parser.ml" +# 58800 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -103155,15 +100217,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54178 "reason_parser.ml" +# 58810 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54184 "reason_parser.ml" +# 58816 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103225,15 +100287,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54248 "reason_parser.ml" +# 58880 "reason_parser.ml" in -# 3333 "reason_parser.mly" +# 3617 "reason_parser.mly" ( expecting_pat (with_txt _4 "type") ) -# 54254 "reason_parser.ml" +# 58886 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -103241,15 +100303,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54264 "reason_parser.ml" +# 58896 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54270 "reason_parser.ml" +# 58902 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103284,9 +100346,9 @@ module Tables = struct } = _menhir_stack in let _400 : unit = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 54307 "reason_parser.ml" +# 58939 "reason_parser.ml" ) = Obj.magic x000 in let _200 : unit = Obj.magic _200 in let _100 : unit = Obj.magic _100 in @@ -103316,15 +100378,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54339 "reason_parser.ml" +# 58971 "reason_parser.ml" in -# 3335 "reason_parser.mly" +# 3619 "reason_parser.mly" ( mkpat(Ppat_unpack _3) ) -# 54345 "reason_parser.ml" +# 58977 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -103332,15 +100394,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54355 "reason_parser.ml" +# 58987 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54361 "reason_parser.ml" +# 58993 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103387,9 +100449,9 @@ module Tables = struct let _500 : 'tv_package_type = Obj.magic _500 in let _400 : unit = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 54410 "reason_parser.ml" +# 59042 "reason_parser.ml" ) = Obj.magic x000 in let _200 : unit = Obj.magic _200 in let _100 : unit = Obj.magic _100 in @@ -103425,20 +100487,20 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54448 "reason_parser.ml" +# 59080 "reason_parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 3337 "reason_parser.mly" +# 3621 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkpat(Ppat_constraint(mkpat ~ghost:true ~loc (Ppat_unpack _3), mktyp ~ghost:true ~loc (Ptyp_package _5))) ) -# 54459 "reason_parser.ml" +# 59091 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -103446,15 +100508,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54469 "reason_parser.ml" +# 59101 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54475 "reason_parser.ml" +# 59107 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103501,9 +100563,9 @@ module Tables = struct let _500 : 'tv_package_type = Obj.magic _500 in let _400 : unit = Obj.magic _400 in let _300 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 54524 "reason_parser.ml" +# 59156 "reason_parser.ml" ) = Obj.magic _300 in let _200 : unit = Obj.magic _200 in let x000 : unit = Obj.magic x000 in @@ -103539,9 +100601,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54562 "reason_parser.ml" +# 59194 "reason_parser.ml" in let _1 = @@ -103551,15 +100613,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54574 "reason_parser.ml" +# 59206 "reason_parser.ml" in -# 3342 "reason_parser.mly" +# 3626 "reason_parser.mly" ( unclosed_pat (with_txt _1 "(") (with_txt _6 ")") ) -# 54580 "reason_parser.ml" +# 59212 "reason_parser.ml" in let _endpos_x_ = _endpos_x10_ in @@ -103567,15 +100629,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54590 "reason_parser.ml" +# 59222 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54596 "reason_parser.ml" +# 59228 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103624,15 +100686,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3352 "reason_parser.mly" +# 3636 "reason_parser.mly" ( let (fields, closed) = _2 in mkpat (Ppat_record (fields, closed)) ) -# 54647 "reason_parser.ml" +# 59279 "reason_parser.ml" in -# 3343 "reason_parser.mly" +# 3627 "reason_parser.mly" ( _1 ) -# 54653 "reason_parser.ml" +# 59285 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -103640,15 +100702,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54663 "reason_parser.ml" +# 59295 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54669 "reason_parser.ml" +# 59301 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103713,9 +100775,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54736 "reason_parser.ml" +# 59368 "reason_parser.ml" in let _1 = @@ -103725,21 +100787,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54748 "reason_parser.ml" +# 59380 "reason_parser.ml" in -# 3354 "reason_parser.mly" +# 3638 "reason_parser.mly" ( unclosed_pat (with_txt _1 "{") (with_txt _3 "}") ) -# 54754 "reason_parser.ml" +# 59386 "reason_parser.ml" in -# 3343 "reason_parser.mly" +# 3627 "reason_parser.mly" ( _1 ) -# 54760 "reason_parser.ml" +# 59392 "reason_parser.ml" in let _endpos_x_ = _endpos_x100_ in @@ -103747,15 +100809,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54770 "reason_parser.ml" +# 59402 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54776 "reason_parser.ml" +# 59408 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103810,15 +100872,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3359 "reason_parser.mly" +# 3643 "reason_parser.mly" ( make_real_pat (mktailpat_extension (mklocation _startpos__2_ _endpos__2_) _2) ) -# 54833 "reason_parser.ml" +# 59465 "reason_parser.ml" in -# 3344 "reason_parser.mly" +# 3628 "reason_parser.mly" ( _1 ) -# 54839 "reason_parser.ml" +# 59471 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -103826,15 +100888,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54849 "reason_parser.ml" +# 59481 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54855 "reason_parser.ml" +# 59487 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103899,9 +100961,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54922 "reason_parser.ml" +# 59554 "reason_parser.ml" in let _1 = @@ -103911,21 +100973,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 54934 "reason_parser.ml" +# 59566 "reason_parser.ml" in -# 3361 "reason_parser.mly" +# 3645 "reason_parser.mly" ( unclosed_pat (with_txt _1 "[") (with_txt _3 "]") ) -# 54940 "reason_parser.ml" +# 59572 "reason_parser.ml" in -# 3344 "reason_parser.mly" +# 3628 "reason_parser.mly" ( _1 ) -# 54946 "reason_parser.ml" +# 59578 "reason_parser.ml" in let _endpos_x_ = _endpos_x100_ in @@ -103933,15 +100995,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 54956 "reason_parser.ml" +# 59588 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 54962 "reason_parser.ml" +# 59594 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -103970,7 +101032,7 @@ module Tables = struct }; } = _menhir_stack in let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_loption_terminated_pattern_comma_list_option_SEMI___ = Obj.magic _2000 in + let _2000 : 'tv_loption_terminated_pattern_comma_list_option_COMMA___ = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in @@ -103990,15 +101052,15 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3366 "reason_parser.mly" +# 3650 "reason_parser.mly" ( mkpat (Ppat_array _2) ) -# 55013 "reason_parser.ml" +# 59645 "reason_parser.ml" in -# 3345 "reason_parser.mly" +# 3629 "reason_parser.mly" ( _1 ) -# 55019 "reason_parser.ml" +# 59651 "reason_parser.ml" in let _endpos_x_ = _endpos__300_ in @@ -104006,15 +101068,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 55029 "reason_parser.ml" +# 59661 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 55035 "reason_parser.ml" +# 59667 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104043,9 +101105,9 @@ module Tables = struct let x = let _1 = _10 in -# 3347 "reason_parser.mly" +# 3631 "reason_parser.mly" ( mkpat(Ppat_extension _1) ) -# 55066 "reason_parser.ml" +# 59698 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -104053,15 +101115,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4389 "reason_parser.mly" +# 4704 "reason_parser.mly" ( {x with ppat_loc = {x.ppat_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 55076 "reason_parser.ml" +# 59708 "reason_parser.ml" in -# 3348 "reason_parser.mly" +# 3632 "reason_parser.mly" (_1) -# 55082 "reason_parser.ml" +# 59714 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104080,17 +101142,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 55103 "reason_parser.ml" +# 59735 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4241 "reason_parser.mly" +# 4555 "reason_parser.mly" ( _1 ) -# 55111 "reason_parser.ml" +# 59743 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104109,17 +101171,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 55132 "reason_parser.ml" +# 59764 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4242 "reason_parser.mly" +# 4556 "reason_parser.mly" ( _1 ) -# 55140 "reason_parser.ml" +# 59772 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104142,9 +101204,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4243 "reason_parser.mly" +# 4557 "reason_parser.mly" ( "and" ) -# 55165 "reason_parser.ml" +# 59797 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104167,9 +101229,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4244 "reason_parser.mly" +# 4558 "reason_parser.mly" ( "as" ) -# 55190 "reason_parser.ml" +# 59822 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104192,9 +101254,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4245 "reason_parser.mly" +# 4559 "reason_parser.mly" ( "assert" ) -# 55215 "reason_parser.ml" +# 59847 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104217,9 +101279,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4246 "reason_parser.mly" +# 4560 "reason_parser.mly" ( "begin" ) -# 55240 "reason_parser.ml" +# 59872 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104242,9 +101304,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4247 "reason_parser.mly" +# 4561 "reason_parser.mly" ( "class" ) -# 55265 "reason_parser.ml" +# 59897 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104267,9 +101329,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4248 "reason_parser.mly" +# 4562 "reason_parser.mly" ( "constraint" ) -# 55290 "reason_parser.ml" +# 59922 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104292,9 +101354,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4249 "reason_parser.mly" +# 4563 "reason_parser.mly" ( "do" ) -# 55315 "reason_parser.ml" +# 59947 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104317,9 +101379,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4250 "reason_parser.mly" +# 4564 "reason_parser.mly" ( "done" ) -# 55340 "reason_parser.ml" +# 59972 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104342,9 +101404,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4251 "reason_parser.mly" +# 4565 "reason_parser.mly" ( "downto" ) -# 55365 "reason_parser.ml" +# 59997 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104367,9 +101429,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4252 "reason_parser.mly" +# 4566 "reason_parser.mly" ( "else" ) -# 55390 "reason_parser.ml" +# 60022 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104392,9 +101454,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4253 "reason_parser.mly" +# 4567 "reason_parser.mly" ( "end" ) -# 55415 "reason_parser.ml" +# 60047 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104417,9 +101479,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4254 "reason_parser.mly" +# 4568 "reason_parser.mly" ( "exception" ) -# 55440 "reason_parser.ml" +# 60072 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104442,9 +101504,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4255 "reason_parser.mly" +# 4569 "reason_parser.mly" ( "external" ) -# 55465 "reason_parser.ml" +# 60097 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104467,9 +101529,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4256 "reason_parser.mly" +# 4570 "reason_parser.mly" ( "false" ) -# 55490 "reason_parser.ml" +# 60122 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104492,9 +101554,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4257 "reason_parser.mly" +# 4571 "reason_parser.mly" ( "for" ) -# 55515 "reason_parser.ml" +# 60147 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104517,9 +101579,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4258 "reason_parser.mly" +# 4572 "reason_parser.mly" ( "fun" ) -# 55540 "reason_parser.ml" +# 60172 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104542,9 +101604,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4259 "reason_parser.mly" +# 4573 "reason_parser.mly" ( "function" ) -# 55565 "reason_parser.ml" +# 60197 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104567,9 +101629,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4260 "reason_parser.mly" +# 4574 "reason_parser.mly" ( "functor" ) -# 55590 "reason_parser.ml" +# 60222 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104592,9 +101654,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4261 "reason_parser.mly" +# 4575 "reason_parser.mly" ( "if" ) -# 55615 "reason_parser.ml" +# 60247 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104617,9 +101679,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4262 "reason_parser.mly" +# 4576 "reason_parser.mly" ( "in" ) -# 55640 "reason_parser.ml" +# 60272 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104642,9 +101704,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4263 "reason_parser.mly" +# 4577 "reason_parser.mly" ( "include" ) -# 55665 "reason_parser.ml" +# 60297 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104667,9 +101729,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4264 "reason_parser.mly" +# 4578 "reason_parser.mly" ( "inherit" ) -# 55690 "reason_parser.ml" +# 60322 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104692,9 +101754,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4265 "reason_parser.mly" +# 4579 "reason_parser.mly" ( "initializer" ) -# 55715 "reason_parser.ml" +# 60347 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104717,9 +101779,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4266 "reason_parser.mly" +# 4580 "reason_parser.mly" ( "lazy" ) -# 55740 "reason_parser.ml" +# 60372 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104742,9 +101804,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4267 "reason_parser.mly" +# 4581 "reason_parser.mly" ( "let" ) -# 55765 "reason_parser.ml" +# 60397 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104767,9 +101829,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4268 "reason_parser.mly" +# 4582 "reason_parser.mly" ( "switch" ) -# 55790 "reason_parser.ml" +# 60422 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104792,9 +101854,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4269 "reason_parser.mly" +# 4583 "reason_parser.mly" ( "module" ) -# 55815 "reason_parser.ml" +# 60447 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104817,9 +101879,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4270 "reason_parser.mly" +# 4584 "reason_parser.mly" ( "mutable" ) -# 55840 "reason_parser.ml" +# 60472 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104842,9 +101904,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4271 "reason_parser.mly" +# 4585 "reason_parser.mly" ( "new" ) -# 55865 "reason_parser.ml" +# 60497 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104867,9 +101929,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4272 "reason_parser.mly" +# 4586 "reason_parser.mly" ( "nonrec" ) -# 55890 "reason_parser.ml" +# 60522 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104892,9 +101954,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4273 "reason_parser.mly" +# 4587 "reason_parser.mly" ( "object" ) -# 55915 "reason_parser.ml" +# 60547 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104917,9 +101979,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4274 "reason_parser.mly" +# 4588 "reason_parser.mly" ( "of" ) -# 55940 "reason_parser.ml" +# 60572 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104942,9 +102004,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4275 "reason_parser.mly" +# 4589 "reason_parser.mly" ( "open" ) -# 55965 "reason_parser.ml" +# 60597 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104967,9 +102029,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4276 "reason_parser.mly" +# 4590 "reason_parser.mly" ( "or" ) -# 55990 "reason_parser.ml" +# 60622 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -104992,9 +102054,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4277 "reason_parser.mly" +# 4591 "reason_parser.mly" ( "private" ) -# 56015 "reason_parser.ml" +# 60647 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105017,9 +102079,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4278 "reason_parser.mly" +# 4592 "reason_parser.mly" ( "rec" ) -# 56040 "reason_parser.ml" +# 60672 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105042,9 +102104,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4279 "reason_parser.mly" +# 4593 "reason_parser.mly" ( "sig" ) -# 56065 "reason_parser.ml" +# 60697 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105067,9 +102129,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4280 "reason_parser.mly" +# 4594 "reason_parser.mly" ( "struct" ) -# 56090 "reason_parser.ml" +# 60722 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105092,9 +102154,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4281 "reason_parser.mly" +# 4595 "reason_parser.mly" ( "then" ) -# 56115 "reason_parser.ml" +# 60747 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105117,9 +102179,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4282 "reason_parser.mly" +# 4596 "reason_parser.mly" ( "to" ) -# 56140 "reason_parser.ml" +# 60772 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105142,9 +102204,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4283 "reason_parser.mly" +# 4597 "reason_parser.mly" ( "true" ) -# 56165 "reason_parser.ml" +# 60797 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105167,9 +102229,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4284 "reason_parser.mly" +# 4598 "reason_parser.mly" ( "try" ) -# 56190 "reason_parser.ml" +# 60822 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105192,9 +102254,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4285 "reason_parser.mly" +# 4599 "reason_parser.mly" ( "type" ) -# 56215 "reason_parser.ml" +# 60847 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105217,9 +102279,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4286 "reason_parser.mly" +# 4600 "reason_parser.mly" ( "val" ) -# 56240 "reason_parser.ml" +# 60872 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105242,9 +102304,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4287 "reason_parser.mly" +# 4601 "reason_parser.mly" ( "virtual" ) -# 56265 "reason_parser.ml" +# 60897 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105267,9 +102329,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4288 "reason_parser.mly" +# 4602 "reason_parser.mly" ( "when" ) -# 56290 "reason_parser.ml" +# 60922 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105292,9 +102354,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4289 "reason_parser.mly" +# 4603 "reason_parser.mly" ( "while" ) -# 56315 "reason_parser.ml" +# 60947 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105317,9 +102379,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_attr_id = -# 4290 "reason_parser.mly" +# 4604 "reason_parser.mly" ( "with" ) -# 56340 "reason_parser.ml" +# 60972 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105349,15 +102411,15 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_str_exception_declaration = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 56372 "reason_parser.ml" +# 61004 "reason_parser.ml" in -# 3562 "reason_parser.mly" +# 3848 "reason_parser.mly" ( {_3 with pext_attributes = _3.pext_attributes @ _1} ) -# 56378 "reason_parser.ml" +# 61010 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105396,21 +102458,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 56419 "reason_parser.ml" +# 61051 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 56425 "reason_parser.ml" +# 61057 "reason_parser.ml" in -# 3562 "reason_parser.mly" +# 3848 "reason_parser.mly" ( {_3 with pext_attributes = _3.pext_attributes @ _1} ) -# 56431 "reason_parser.ml" +# 61063 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105464,19 +102526,19 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : 'tv_str_type_extension = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 56487 "reason_parser.ml" +# 61119 "reason_parser.ml" in -# 3626 "reason_parser.mly" +# 3916 "reason_parser.mly" ( if _3 <> Recursive then not_expecting _startpos__3_ _endpos__3_ "nonrec flag"; let (potentially_long_ident, params) = _4 in Te.mk potentially_long_ident _7 ~params ~priv:_6 ~attrs:_1 ) -# 56497 "reason_parser.ml" +# 61129 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105539,25 +102601,70 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 56562 "reason_parser.ml" +# 61194 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 56568 "reason_parser.ml" +# 61200 "reason_parser.ml" in -# 3626 "reason_parser.mly" +# 3916 "reason_parser.mly" ( if _3 <> Recursive then not_expecting _startpos__3_ _endpos__3_ "nonrec flag"; let (potentially_long_ident, params) = _4 in Te.mk potentially_long_ident _7 ~params ~priv:_6 ~attrs:_1 ) -# 56578 "reason_parser.ml" +# 61210 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_preceded_COLON_expr__ = Obj.magic _2 in + let _1 : ( +# 1169 "reason_parser.mly" + (string * string option) +# 61237 "reason_parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_string_literal_expr_maybe_punned = let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + +# 3422 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (s, d) = _1 in + let lident_lident_loc = mkloc (Lident s) loc in + let exp = match _2 with + | Some x -> x + | None -> mkexp (Pexp_ident lident_lident_loc) + in + (lident_lident_loc, exp) + ) +# 61255 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105580,29 +102687,119 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_option_preceded_COLON_expr__ = Obj.magic _2 in + let _2 : unit = Obj.magic _2 in let _1 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 56605 "reason_parser.ml" +# 61282 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_string_literal_expr = let _endpos = _endpos__2_ in + let _v : 'tv_string_literal_expr_maybe_punned_with_comma = let _endpos = _endpos__2_ in let _startpos = _startpos__1_ in -# 3143 "reason_parser.mly" +# 3406 "reason_parser.mly" ( let loc = mklocation _startpos _endpos in let (s, d) = _1 in let lident_lident_loc = mkloc (Lident s) loc in - let exp = match _2 with - | Some x -> x - | None -> mkexp (Pexp_ident lident_lident_loc) - in + let exp = mkexp (Pexp_ident lident_lident_loc) in + (lident_lident_loc, exp) + ) +# 61297 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let _3 : 'tv_expr = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 1169 "reason_parser.mly" + (string * string option) +# 61336 "reason_parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_string_literal_expr_maybe_punned_with_comma = let _endpos = _endpos__4_ in + let _startpos = _startpos__1_ in + +# 3413 "reason_parser.mly" + ( let loc = mklocation _startpos _endpos in + let (s, d) = _1 in + let lident_lident_loc = mkloc (Lident s) loc in + let exp = _3 in (lident_lident_loc, exp) ) -# 56623 "reason_parser.ml" +# 61351 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _10 : 'tv_lseparated_nonempty_list_aux_COMMA_string_literal_expr_maybe_punned_ = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__2_ in + let _v : 'tv_string_literal_exprs_maybe_punned = let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 61384 "reason_parser.ml" + + in + +# 3401 "reason_parser.mly" + ( _1 ) +# 61390 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105633,18 +102830,18 @@ module Tables = struct let _4 : 'tv_poly_type = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 56656 "reason_parser.ml" +# 61423 "reason_parser.ml" ) = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__2_ in let _endpos = _endpos__4_ in let _v : 'tv_string_literal_lbl = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 56665 "reason_parser.ml" +# 61432 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -105655,13 +102852,13 @@ module Tables = struct else _startpos__2_ in -# 3602 "reason_parser.mly" +# 3892 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let (s, _) = _2 in - (Type.field (mkloc s loc) _4 ~loc, _1) + Type.field (mkloc s loc) _4 ~attrs:_1 ~loc ) -# 56682 "reason_parser.ml" +# 61449 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105697,9 +102894,9 @@ module Tables = struct let _4 : 'tv_poly_type = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : ( -# 1049 "reason_parser.mly" +# 1169 "reason_parser.mly" (string * string option) -# 56720 "reason_parser.ml" +# 61487 "reason_parser.ml" ) = Obj.magic _2 in let _100 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -105710,15 +102907,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 56733 "reason_parser.ml" +# 61500 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 56739 "reason_parser.ml" +# 61506 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -105729,13 +102926,13 @@ module Tables = struct else _startpos__2_ in -# 3602 "reason_parser.mly" +# 3892 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let (s, _) = _2 in - (Type.field (mkloc s loc) _4 ~loc, _1) + Type.field (mkloc s loc) _4 ~attrs:_1 ~loc ) -# 56756 "reason_parser.ml" +# 61523 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105751,9 +102948,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_structure = -# 1464 "reason_parser.mly" +# 1600 "reason_parser.mly" ( [] ) -# 56774 "reason_parser.ml" +# 61541 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105788,19 +102985,19 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 56811 "reason_parser.ml" +# 61578 "reason_parser.ml" in -# 1466 "reason_parser.mly" +# 1602 "reason_parser.mly" ( let menhirError = Syntax_util.findMenhirErrorMessage _1.loc in match menhirError with | MenhirMessagesError errMessage -> (syntax_error_str errMessage.loc errMessage.msg) :: _2 | _ -> (syntax_error_str _1.loc "Invalid statement") :: _2 ) -# 56821 "reason_parser.ml" +# 61588 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105841,19 +103038,19 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 56864 "reason_parser.ml" +# 61631 "reason_parser.ml" in -# 1472 "reason_parser.mly" +# 1608 "reason_parser.mly" ( let menhirError = Syntax_util.findMenhirErrorMessage _1.loc in match menhirError with | MenhirMessagesError errMessage -> (syntax_error_str errMessage.loc errMessage.msg) :: _3 | _ -> (syntax_error_str _1.loc "Invalid statement") :: _3 ) -# 56874 "reason_parser.ml" +# 61641 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105876,9 +103073,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_structure = -# 1477 "reason_parser.mly" +# 1613 "reason_parser.mly" ( _1 ) -# 56899 "reason_parser.ml" +# 61666 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105919,19 +103116,19 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 56942 "reason_parser.ml" +# 61709 "reason_parser.ml" in -# 1479 "reason_parser.mly" +# 1615 "reason_parser.mly" ( let menhirError = Syntax_util.findMenhirErrorMessage _1.loc in match menhirError with | MenhirMessagesError errMessage -> (syntax_error_str errMessage.loc errMessage.msg) :: _3 | _ -> (syntax_error_str _1.loc "Statement has to end with a semicolon") :: _3 ) -# 56952 "reason_parser.ml" +# 61719 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105966,18 +103163,18 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_structure = -# 1485 "reason_parser.mly" +# 1621 "reason_parser.mly" ( let rec prepend = function | [] -> assert false | [x] -> - let effective_loc = mklocation x.pstr_loc.loc_start _endpos__2_ in + let effective_loc = mklocation x.pstr_loc.loc_start _endpos__1_ in let x = set_structure_item_location x effective_loc in x :: _3 | x :: xs -> x :: prepend xs in prepend _1 ) -# 56998 "reason_parser.ml" +# 61765 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -105989,122 +103186,49 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _200; MenhirLib.EngineTypes.startp = _startpos__200_; MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _200 : 'tv_structure_item_without_item_extension_sugar = Obj.magic _200 in - let _100 : 'tv_item_extension_sugar = Obj.magic _100 in + let _200 : 'tv_unattributed_expr = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in + let _startpos = _startpos__200_ in let _endpos = _endpos__200_ in let _v : 'tv_structure_item = let _1 = let _endpos__20_ = _endpos__200_ in - let _startpos__10_ = _startpos__100_ in + let _startpos__20_ = _startpos__200_ in let _20 = _200 in - let _10 = _100 in let x = let _2 = _20 in - let _1 = _10 in + let _1 = + +# 4623 "reason_parser.mly" + ( [] ) +# 61797 "reason_parser.ml" + + in -# 1500 "reason_parser.mly" - ( struct_item_extension _1 _2 ) -# 57037 "reason_parser.ml" +# 1638 "reason_parser.mly" + ( mkstrexp _2 _1 ) +# 61803 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__10_ in - let _endpos = _endpos_x_ in - let _symbolstartpos = _startpos_x_ in - -# 4377 "reason_parser.mly" - ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57047 "reason_parser.ml" - - in - -# 1504 "reason_parser.mly" - ( [_1] ) -# 57053 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _100 : 'tv_let_bindings = Obj.magic _100 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__100_ in - let _endpos = _endpos__100_ in - let _v : 'tv_structure_item = let _1 = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in - let _10 = _100 in - let x = - let _1 = _10 in - -# 1503 "reason_parser.mly" - ( val_of_let_bindings _1 ) -# 57084 "reason_parser.ml" - - in - let _endpos_x_ = _endpos__10_ in - let _startpos_x_ = _startpos__10_ in + let _startpos_x_ = _startpos__20_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57094 "reason_parser.ml" +# 61813 "reason_parser.ml" in -# 1504 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57100 "reason_parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_structure_item_without_item_extension_sugar = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_structure_item = -# 1506 "reason_parser.mly" - ( _1 ) -# 57125 "reason_parser.ml" +# 61819 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106116,49 +103240,66 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _200; MenhirLib.EngineTypes.startp = _startpos__200_; MenhirLib.EngineTypes.endp = _endpos__200_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in let _200 : 'tv_unattributed_expr = Obj.magic _200 in + let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__200_ in + let _startpos = _startpos__10000_ in let _endpos = _endpos__200_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__20_ = _endpos__200_ in - let _startpos__20_ = _startpos__200_ in + let _startpos__1000_ = _startpos__10000_ in let _20 = _200 in + let _1000 = _10000 in let x = let _2 = _20 in + let _100 = _1000 in let _1 = + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4619 "reason_parser.mly" + ( _1 ) +# 61862 "reason_parser.ml" + + in -# 4309 "reason_parser.mly" - ( [] ) -# 57157 "reason_parser.ml" +# 4624 "reason_parser.mly" + ( List.map (fun x -> x.txt) _1 ) +# 61868 "reason_parser.ml" in -# 1514 "reason_parser.mly" +# 1638 "reason_parser.mly" ( mkstrexp _2 _1 ) -# 57163 "reason_parser.ml" +# 61874 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__20_ in + let _startpos_x_ = _startpos__1000_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57173 "reason_parser.ml" +# 61884 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57179 "reason_parser.ml" +# 61890 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106175,61 +103316,45 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__200_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _200 : 'tv_unattributed_expr = Obj.magic _200 in - let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in + let _200 : 'tv_structure_item = Obj.magic _200 in + let _100 : 'tv_item_extension_sugar = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__10000_ in + let _startpos = _startpos__100_ in let _endpos = _endpos__200_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__20_ = _endpos__200_ in - let _startpos__1000_ = _startpos__10000_ in + let _startpos__10_ = _startpos__100_ in let _20 = _200 in - let _1000 = _10000 in + let _10 = _100 in let x = let _2 = _20 in - let _100 = _1000 in - let _1 = - let _10 = _100 in - let _1 = - let _1 = _10 in - -# 4305 "reason_parser.mly" - ( _1 ) -# 57222 "reason_parser.ml" - - in - -# 4310 "reason_parser.mly" - ( List.map (fun x -> x.txt) _1 ) -# 57228 "reason_parser.ml" - - in + let _1 = _10 in -# 1514 "reason_parser.mly" - ( mkstrexp _2 _1 ) -# 57234 "reason_parser.ml" +# 1640 "reason_parser.mly" + ( struct_item_extension _1 _2 ) +# 61929 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in - let _startpos_x_ = _startpos__1000_ in + let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57244 "reason_parser.ml" +# 61939 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57250 "reason_parser.ml" +# 61945 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106281,7 +103406,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__700_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__70_ = _endpos__700_ in @@ -106314,9 +103439,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 57337 "reason_parser.ml" +# 62032 "reason_parser.ml" in let _3 = @@ -106326,16 +103451,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 57349 "reason_parser.ml" +# 62044 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 57356 "reason_parser.ml" +# 62051 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -106346,10 +103471,10 @@ module Tables = struct else _startpos__2_ in -# 1517 "reason_parser.mly" +# 1643 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr (Pstr_primitive (Val.mk _3 _5 ~prim:_7 ~attrs:_1 ~loc)) ) -# 57370 "reason_parser.ml" +# 62065 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -106357,15 +103482,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57380 "reason_parser.ml" +# 62075 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57386 "reason_parser.ml" +# 62081 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106423,7 +103548,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__700_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__70_ = _endpos__700_ in @@ -106462,9 +103587,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 57485 "reason_parser.ml" +# 62180 "reason_parser.ml" in let _3 = @@ -106474,9 +103599,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 57497 "reason_parser.ml" +# 62192 "reason_parser.ml" in let _1 = @@ -106484,15 +103609,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 57507 "reason_parser.ml" +# 62202 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 57513 "reason_parser.ml" +# 62208 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -106503,10 +103628,10 @@ module Tables = struct else _startpos__2_ in -# 1517 "reason_parser.mly" +# 1643 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr (Pstr_primitive (Val.mk _3 _5 ~prim:_7 ~attrs:_1 ~loc)) ) -# 57527 "reason_parser.ml" +# 62222 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -106514,15 +103639,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57537 "reason_parser.ml" +# 62232 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57543 "reason_parser.ml" +# 62238 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106544,16 +103669,16 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__100_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in let x = let _1 = _10 in -# 1520 "reason_parser.mly" +# 1646 "reason_parser.mly" ( let (nonrec_flag, tyl) = _1 in mkstr(Pstr_type (nonrec_flag, tyl)) ) -# 57574 "reason_parser.ml" +# 62269 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -106561,15 +103686,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57584 "reason_parser.ml" +# 62279 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57590 "reason_parser.ml" +# 62285 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106591,16 +103716,16 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__100_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in let x = let _1 = _10 in -# 1522 "reason_parser.mly" +# 1648 "reason_parser.mly" ( mkstr(Pstr_typext _1) ) -# 57621 "reason_parser.ml" +# 62316 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -106608,15 +103733,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57631 "reason_parser.ml" +# 62326 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57637 "reason_parser.ml" +# 62332 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106638,16 +103763,16 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__100_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in let x = let _1 = _10 in -# 1524 "reason_parser.mly" +# 1650 "reason_parser.mly" ( mkstr(Pstr_exception _1) ) -# 57668 "reason_parser.ml" +# 62363 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -106655,15 +103780,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57678 "reason_parser.ml" +# 62373 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57684 "reason_parser.ml" +# 62379 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106693,15 +103818,15 @@ module Tables = struct } = _menhir_stack in let _400 : 'tv_module_binding_body = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 57716 "reason_parser.ml" +# 62411 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__400_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__40_ = _endpos__400_ in @@ -106724,16 +103849,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 57747 "reason_parser.ml" +# 62442 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 57754 "reason_parser.ml" +# 62449 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -106744,10 +103869,10 @@ module Tables = struct else _startpos__2_ in -# 1526 "reason_parser.mly" +# 1652 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_module (Mb.mk _3 _4 ~attrs:_1 ~loc)) ) -# 57768 "reason_parser.ml" +# 62463 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -106755,15 +103880,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57778 "reason_parser.ml" +# 62473 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57784 "reason_parser.ml" +# 62479 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106798,16 +103923,16 @@ module Tables = struct } = _menhir_stack in let _400 : 'tv_module_binding_body = Obj.magic _400 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 57821 "reason_parser.ml" +# 62516 "reason_parser.ml" ) = Obj.magic x000 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _10000 : 'tv_nonempty_list_as_loc_attribute__ = Obj.magic _10000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__400_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__40_ = _endpos__400_ in @@ -106836,9 +103961,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 57859 "reason_parser.ml" +# 62554 "reason_parser.ml" in let _1 = @@ -106846,15 +103971,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 57869 "reason_parser.ml" +# 62564 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 57875 "reason_parser.ml" +# 62570 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -106865,10 +103990,10 @@ module Tables = struct else _startpos__2_ in -# 1526 "reason_parser.mly" +# 1652 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_module (Mb.mk _3 _4 ~attrs:_1 ~loc)) ) -# 57889 "reason_parser.ml" +# 62584 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -106876,15 +104001,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 57899 "reason_parser.ml" +# 62594 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 57905 "reason_parser.ml" +# 62600 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -106925,16 +104050,16 @@ module Tables = struct let _600 : 'tv_list_and_module_bindings_ = Obj.magic _600 in let _500 : 'tv_module_binding_body = Obj.magic _500 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 57948 "reason_parser.ml" +# 62643 "reason_parser.ml" ) = Obj.magic x000 in let _300 : unit = Obj.magic _300 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__600_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__60_ = _endpos__600_ in @@ -106962,16 +104087,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 57985 "reason_parser.ml" +# 62680 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 57992 "reason_parser.ml" +# 62687 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -106981,11 +104106,11 @@ module Tables = struct else _startpos__2_ in -# 1530 "reason_parser.mly" +# 1656 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos__5_ in mkstr (Pstr_recmodule ((Mb.mk _4 _5 ~attrs:_1 ~loc) :: _6)) ) -# 58006 "reason_parser.ml" +# 62701 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -106993,15 +104118,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58016 "reason_parser.ml" +# 62711 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58022 "reason_parser.ml" +# 62717 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107047,9 +104172,9 @@ module Tables = struct let _600 : 'tv_list_and_module_bindings_ = Obj.magic _600 in let _500 : 'tv_module_binding_body = Obj.magic _500 in let x000 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 58070 "reason_parser.ml" +# 62765 "reason_parser.ml" ) = Obj.magic x000 in let _300 : unit = Obj.magic _300 in let _200 : 'tv_opt_LET_MODULE = Obj.magic _200 in @@ -107057,7 +104182,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__600_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__60_ = _endpos__600_ in @@ -107091,9 +104216,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 58114 "reason_parser.ml" +# 62809 "reason_parser.ml" in let _1 = @@ -107101,15 +104226,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 58124 "reason_parser.ml" +# 62819 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 58130 "reason_parser.ml" +# 62825 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -107119,11 +104244,11 @@ module Tables = struct else _startpos__2_ in -# 1530 "reason_parser.mly" +# 1656 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos__5_ in mkstr (Pstr_recmodule ((Mb.mk _4 _5 ~attrs:_1 ~loc) :: _6)) ) -# 58144 "reason_parser.ml" +# 62839 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -107131,15 +104256,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58154 "reason_parser.ml" +# 62849 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58160 "reason_parser.ml" +# 62855 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107179,7 +104304,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos_x000_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _startpos__20_ = _startpos__200_ in @@ -107202,17 +104327,17 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 58225 "reason_parser.ml" +# 62920 "reason_parser.ml" in let _endpos__5_ = _endpos_x0_ in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 58233 "reason_parser.ml" +# 62928 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -107223,10 +104348,10 @@ module Tables = struct else _startpos__2_ in -# 1534 "reason_parser.mly" +# 1660 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_modtype (Mtd.mk _5 ~attrs:_1 ~loc)) ) -# 58247 "reason_parser.ml" +# 62942 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -107234,15 +104359,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58257 "reason_parser.ml" +# 62952 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58263 "reason_parser.ml" +# 62958 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107288,7 +104413,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos_x000_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _startpos__20_ = _startpos__200_ in @@ -107317,9 +104442,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 58340 "reason_parser.ml" +# 63035 "reason_parser.ml" in let _endpos__5_ = _endpos_x0_ in @@ -107328,15 +104453,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 58351 "reason_parser.ml" +# 63046 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 58357 "reason_parser.ml" +# 63052 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -107347,10 +104472,10 @@ module Tables = struct else _startpos__2_ in -# 1534 "reason_parser.mly" +# 1660 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_modtype (Mtd.mk _5 ~attrs:_1 ~loc)) ) -# 58371 "reason_parser.ml" +# 63066 "reason_parser.ml" in let _endpos_x_ = _endpos_x00_ in @@ -107358,15 +104483,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58381 "reason_parser.ml" +# 63076 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58387 "reason_parser.ml" +# 63082 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107412,7 +104537,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__600_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__60_ = _endpos__600_ in @@ -107439,16 +104564,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 58462 "reason_parser.ml" +# 63157 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 58469 "reason_parser.ml" +# 63164 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -107459,10 +104584,10 @@ module Tables = struct else _startpos__2_ in -# 1537 "reason_parser.mly" +# 1663 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_modtype (Mtd.mk _5 ~typ:_6 ~attrs:_1 ~loc)) ) -# 58483 "reason_parser.ml" +# 63178 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -107470,15 +104595,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58493 "reason_parser.ml" +# 63188 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58499 "reason_parser.ml" +# 63194 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107530,7 +104655,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__600_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos_x00_ = _endpos_x000_ in let _startpos_x00_ = _startpos_x000_ in let _endpos__60_ = _endpos__600_ in @@ -107563,9 +104688,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 58586 "reason_parser.ml" +# 63281 "reason_parser.ml" in let _1 = @@ -107573,15 +104698,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 58596 "reason_parser.ml" +# 63291 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 58602 "reason_parser.ml" +# 63297 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -107592,10 +104717,10 @@ module Tables = struct else _startpos__2_ in -# 1537 "reason_parser.mly" +# 1663 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_modtype (Mtd.mk _5 ~typ:_6 ~attrs:_1 ~loc)) ) -# 58616 "reason_parser.ml" +# 63311 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -107603,15 +104728,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58626 "reason_parser.ml" +# 63321 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58632 "reason_parser.ml" +# 63327 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107633,16 +104758,16 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__100_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in let x = let _1 = _10 in -# 1540 "reason_parser.mly" +# 1666 "reason_parser.mly" ( mkstr(Pstr_open _1) ) -# 58663 "reason_parser.ml" +# 63358 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -107650,15 +104775,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58673 "reason_parser.ml" +# 63368 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58679 "reason_parser.ml" +# 63374 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107692,7 +104817,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__400_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__40_ = _endpos__400_ in let _endpos__30_ = _endpos__300_ in let _startpos__20_ = _startpos__200_ in @@ -107707,9 +104832,9 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 58730 "reason_parser.ml" +# 63425 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -107719,13 +104844,13 @@ module Tables = struct else _startpos__2_ in -# 1542 "reason_parser.mly" +# 1668 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos__3_ in let first = Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc in mkstr (Pstr_class (first :: _4)) ) -# 58746 "reason_parser.ml" +# 63441 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -107733,15 +104858,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58756 "reason_parser.ml" +# 63451 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58762 "reason_parser.ml" +# 63457 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107781,7 +104906,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__400_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__40_ = _endpos__400_ in let _endpos__30_ = _endpos__300_ in let _startpos__20_ = _startpos__200_ in @@ -107805,15 +104930,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 58828 "reason_parser.ml" +# 63523 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 58834 "reason_parser.ml" +# 63529 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -107823,13 +104948,13 @@ module Tables = struct else _startpos__2_ in -# 1542 "reason_parser.mly" +# 1668 "reason_parser.mly" ( let (ident, binding, virt, params) = _3 in let loc = mklocation _symbolstartpos _endpos__3_ in let first = Ci.mk ident binding ~virt ~params ~attrs:_1 ~loc in mkstr (Pstr_class (first :: _4)) ) -# 58850 "reason_parser.ml" +# 63545 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -107837,15 +104962,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58860 "reason_parser.ml" +# 63555 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58866 "reason_parser.ml" +# 63561 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107867,16 +104992,16 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__100_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in let x = let _1 = _10 in -# 1549 "reason_parser.mly" +# 1675 "reason_parser.mly" ( mkstr(Pstr_class_type _1) ) -# 58897 "reason_parser.ml" +# 63592 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -107884,15 +105009,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58907 "reason_parser.ml" +# 63602 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58913 "reason_parser.ml" +# 63608 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107920,7 +105045,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__300_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__30_ = _endpos__300_ in let _startpos__20_ = _startpos__200_ in let _30 = _300 in @@ -107932,9 +105057,9 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 58955 "reason_parser.ml" +# 63650 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -107945,11 +105070,11 @@ module Tables = struct else _startpos__2_ in -# 1551 "reason_parser.mly" +# 1677 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_include (Incl.mk _3 ~attrs:_1 ~loc)) ) -# 58970 "reason_parser.ml" +# 63665 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -107957,15 +105082,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 58980 "reason_parser.ml" +# 63675 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 58986 "reason_parser.ml" +# 63681 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -107999,7 +105124,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__300_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__30_ = _endpos__300_ in let _startpos__20_ = _startpos__200_ in let _endpos__1000_ = _endpos__10000_ in @@ -108020,15 +105145,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 59043 "reason_parser.ml" +# 63738 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 59049 "reason_parser.ml" +# 63744 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -108039,11 +105164,11 @@ module Tables = struct else _startpos__2_ in -# 1551 "reason_parser.mly" +# 1677 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in mkstr(Pstr_include (Incl.mk _3 ~attrs:_1 ~loc)) ) -# 59064 "reason_parser.ml" +# 63759 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -108051,15 +105176,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 59074 "reason_parser.ml" +# 63769 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 59080 "reason_parser.ml" +# 63775 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108081,7 +105206,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__200_ in let _endpos = _endpos__200_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__20_ = _endpos__200_ in let _startpos__20_ = _startpos__200_ in let _20 = _200 in @@ -108089,15 +105214,15 @@ module Tables = struct let _2 = _20 in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 59112 "reason_parser.ml" +# 63807 "reason_parser.ml" in -# 1557 "reason_parser.mly" +# 1683 "reason_parser.mly" ( mkstr(Pstr_extension (_2, _1)) ) -# 59118 "reason_parser.ml" +# 63813 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -108105,15 +105230,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 59128 "reason_parser.ml" +# 63823 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 59134 "reason_parser.ml" +# 63829 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108141,7 +105266,7 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10000_ in let _endpos = _endpos__200_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _endpos__20_ = _endpos__200_ in let _startpos__1000_ = _startpos__10000_ in let _20 = _200 in @@ -108154,21 +105279,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 59177 "reason_parser.ml" +# 63872 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 59183 "reason_parser.ml" +# 63878 "reason_parser.ml" in -# 1557 "reason_parser.mly" +# 1683 "reason_parser.mly" ( mkstr(Pstr_extension (_2, _1)) ) -# 59189 "reason_parser.ml" +# 63884 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -108176,15 +105301,62 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4377 "reason_parser.mly" +# 4692 "reason_parser.mly" ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 59199 "reason_parser.ml" +# 63894 "reason_parser.ml" in -# 1558 "reason_parser.mly" +# 1686 "reason_parser.mly" ( [_1] ) -# 59205 "reason_parser.ml" +# 63900 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _100 : 'tv_let_bindings = Obj.magic _100 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__100_ in + let _endpos = _endpos__100_ in + let _v : 'tv_structure_item = let _1 = + let _endpos__10_ = _endpos__100_ in + let _startpos__10_ = _startpos__100_ in + let _10 = _100 in + let x = + let _1 = _10 in + +# 1685 "reason_parser.mly" + ( val_of_let_bindings _1 ) +# 63931 "reason_parser.ml" + + in + let _endpos_x_ = _endpos__10_ in + let _startpos_x_ = _startpos__10_ in + let _endpos = _endpos_x_ in + let _symbolstartpos = _startpos_x_ in + +# 4692 "reason_parser.mly" + ( {x with pstr_loc = {x.pstr_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) +# 63941 "reason_parser.ml" + + in + +# 1686 "reason_parser.mly" + ( [_1] ) +# 63947 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108206,18 +105378,18 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__10_ in let _endpos = _endpos__10_ in - let _v : 'tv_structure_item_without_item_extension_sugar = let _1 = + let _v : 'tv_structure_item = let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 59232 "reason_parser.ml" +# 63974 "reason_parser.ml" in -# 1560 "reason_parser.mly" +# 1688 "reason_parser.mly" ( List.map (fun x -> mkstr ~loc:x.loc (Pstr_attribute x.txt)) _1 ) -# 59238 "reason_parser.ml" +# 63980 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108240,9 +105412,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_subtractive = -# 4231 "reason_parser.mly" +# 4545 "reason_parser.mly" ( "-" ) -# 59263 "reason_parser.ml" +# 64005 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108265,9 +105437,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_subtractive = -# 4232 "reason_parser.mly" +# 4546 "reason_parser.mly" ( "-." ) -# 59288 "reason_parser.ml" +# 64030 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108311,22 +105483,22 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 59334 "reason_parser.ml" +# 64076 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 59341 "reason_parser.ml" +# 64083 "reason_parser.ml" in -# 4012 "reason_parser.mly" +# 4326 "reason_parser.mly" ( Rtag (_2, _1, _3, _4) ) -# 59347 "reason_parser.ml" +# 64089 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108376,9 +105548,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 59399 "reason_parser.ml" +# 64141 "reason_parser.ml" in let _1 = @@ -108386,21 +105558,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 59409 "reason_parser.ml" +# 64151 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 59415 "reason_parser.ml" +# 64157 "reason_parser.ml" in -# 4012 "reason_parser.mly" +# 4326 "reason_parser.mly" ( Rtag (_2, _1, _3, _4) ) -# 59421 "reason_parser.ml" +# 64163 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108432,22 +105604,22 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 59455 "reason_parser.ml" +# 64197 "reason_parser.ml" in let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 59462 "reason_parser.ml" +# 64204 "reason_parser.ml" in -# 4014 "reason_parser.mly" +# 4328 "reason_parser.mly" ( Rtag (_2, _1, true, []) ) -# 59468 "reason_parser.ml" +# 64210 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108485,9 +105657,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4185 "reason_parser.mly" +# 4499 "reason_parser.mly" ( _2 ) -# 59508 "reason_parser.ml" +# 64250 "reason_parser.ml" in let _1 = @@ -108495,21 +105667,21 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 59518 "reason_parser.ml" +# 64260 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 59524 "reason_parser.ml" +# 64266 "reason_parser.ml" in -# 4014 "reason_parser.mly" +# 4328 "reason_parser.mly" ( Rtag (_2, _1, true, []) ) -# 59530 "reason_parser.ml" +# 64272 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108537,16 +105709,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : 'tv_embedded___anonymous_42_ = Obj.magic _3 in + let _3 : 'tv_embedded___anonymous_40_ = Obj.magic _3 in let _2 : 'tv_ident = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_toplevel_directive = -# 4178 "reason_parser.mly" +# 4492 "reason_parser.mly" ( Ptop_dir(_2, _3) ) -# 59567 "reason_parser.ml" +# 64309 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108569,13 +105741,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 1207 "reason_parser.mly" +# 1327 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase) -# 59592 "reason_parser.ml" +# 64334 "reason_parser.ml" ) = -# 1258 "reason_parser.mly" +# 1378 "reason_parser.mly" (apply_mapper_to_toplevel_phrase _1 reason_mapper ) -# 59596 "reason_parser.ml" +# 64338 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108616,15 +105788,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 59639 "reason_parser.ml" +# 64381 "reason_parser.ml" in -# 3181 "reason_parser.mly" +# 3460 "reason_parser.mly" ( (Some _2, _3) ) -# 59645 "reason_parser.ml" +# 64387 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108659,15 +105831,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 59682 "reason_parser.ml" +# 64424 "reason_parser.ml" in -# 3183 "reason_parser.mly" +# 3462 "reason_parser.mly" ( (None, Some _2) ) -# 59688 "reason_parser.ml" +# 64430 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108696,11 +105868,11 @@ module Tables = struct }; } = _menhir_stack in let _3 : 'tv_type_declaration_kind = Obj.magic _3 in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 59721 "reason_parser.ml" +# 64463 "reason_parser.ml" ) = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x0_ in @@ -108708,9 +105880,9 @@ module Tables = struct let _v : 'tv_type_declaration_details = let _2 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 59731 "reason_parser.ml" +# 64473 "reason_parser.ml" in let _1 = @@ -108720,17 +105892,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 59743 "reason_parser.ml" +# 64485 "reason_parser.ml" in -# 3453 "reason_parser.mly" - ( Location.raise_errorf ~loc:_1.loc - "A type's name need to begin with a lower-case letter or _" - ) -# 59751 "reason_parser.ml" +# 3737 "reason_parser.mly" + ( raiseSyntaxErrorFromSyntaxUtils _1.loc + "a type name must start with a lower-case letter or an underscore" ) +# 64492 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108759,11 +105930,11 @@ module Tables = struct }; } = _menhir_stack in let _3 : 'tv_type_declaration_kind = Obj.magic _3 in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 59784 "reason_parser.ml" +# 64525 "reason_parser.ml" ) = Obj.magic x0 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x0_ in @@ -108771,9 +105942,9 @@ module Tables = struct let _v : 'tv_type_declaration_details = let _2 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 59794 "reason_parser.ml" +# 64535 "reason_parser.ml" in let _1 = @@ -108783,17 +105954,16 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 59806 "reason_parser.ml" +# 64547 "reason_parser.ml" in -# 3457 "reason_parser.mly" +# 3740 "reason_parser.mly" ( let (kind, priv, manifest), constraints, endpos, and_types = _3 in - ((_1, _2, constraints, kind, priv, manifest), endpos, and_types) - ) -# 59814 "reason_parser.ml" + ((_1, _2, constraints, kind, priv, manifest), endpos, and_types) ) +# 64554 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108831,25 +106001,25 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3532 "reason_parser.mly" +# 3818 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _2 in (_1 :: cstrs, constraints, endpos, and_types) ) -# 59856 "reason_parser.ml" +# 64596 "reason_parser.ml" in let _2 = -# 4205 "reason_parser.mly" +# 4519 "reason_parser.mly" ( Public ) -# 59863 "reason_parser.ml" +# 64603 "reason_parser.ml" in -# 3464 "reason_parser.mly" +# 3746 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _3 in ((Ptype_variant (cstrs), _2, None), constraints, endpos, and_types) ) -# 59870 "reason_parser.ml" +# 64610 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108893,26 +106063,26 @@ module Tables = struct let _2 = _20 in let _1 = _11 in -# 3532 "reason_parser.mly" +# 3818 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _2 in (_1 :: cstrs, constraints, endpos, and_types) ) -# 59918 "reason_parser.ml" +# 64658 "reason_parser.ml" in let _2 = let _1 = _10 in -# 4206 "reason_parser.mly" +# 4520 "reason_parser.mly" ( Private ) -# 59926 "reason_parser.ml" +# 64666 "reason_parser.ml" in -# 3464 "reason_parser.mly" +# 3746 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _3 in ((Ptype_variant (cstrs), _2, None), constraints, endpos, and_types) ) -# 59933 "reason_parser.ml" +# 64673 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -108962,18 +106132,18 @@ module Tables = struct let _2 = _20 in let _1 = _11 in -# 3532 "reason_parser.mly" +# 3818 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _2 in (_1 :: cstrs, constraints, endpos, and_types) ) -# 59987 "reason_parser.ml" +# 64727 "reason_parser.ml" in let _4 = -# 4205 "reason_parser.mly" +# 4519 "reason_parser.mly" ( Public ) -# 59994 "reason_parser.ml" +# 64734 "reason_parser.ml" in let _2 = @@ -108983,16 +106153,16 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 60006 "reason_parser.ml" +# 64746 "reason_parser.ml" in -# 3467 "reason_parser.mly" +# 3749 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _5 in ((Ptype_variant cstrs, _4, Some _2), constraints, endpos, and_types) ) -# 60013 "reason_parser.ml" +# 64753 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109048,19 +106218,19 @@ module Tables = struct let _2 = _20 in let _1 = _12 in -# 3532 "reason_parser.mly" +# 3818 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _2 in (_1 :: cstrs, constraints, endpos, and_types) ) -# 60073 "reason_parser.ml" +# 64813 "reason_parser.ml" in let _4 = let _1 = _11 in -# 4206 "reason_parser.mly" +# 4520 "reason_parser.mly" ( Private ) -# 60081 "reason_parser.ml" +# 64821 "reason_parser.ml" in let _2 = @@ -109070,16 +106240,16 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 60093 "reason_parser.ml" +# 64833 "reason_parser.ml" in -# 3467 "reason_parser.mly" +# 3749 "reason_parser.mly" ( let (cstrs, constraints, endpos, and_types) = _5 in ((Ptype_variant cstrs, _4, Some _2), constraints, endpos, and_types) ) -# 60100 "reason_parser.ml" +# 64840 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109109,16 +106279,16 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_type_declaration_kind = let _2 = -# 3474 "reason_parser.mly" +# 3756 "reason_parser.mly" ( [] ) -# 60132 "reason_parser.ml" +# 64872 "reason_parser.ml" in let _endpos__2_ = _endpos__1_ in -# 3470 "reason_parser.mly" +# 3752 "reason_parser.mly" ( (_1, _2, _endpos__2_, _3) ) -# 60139 "reason_parser.ml" +# 64879 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109155,16 +106325,16 @@ module Tables = struct let _v : 'tv_type_declaration_kind = let _2 = let _1 = _10 in -# 3475 "reason_parser.mly" +# 3757 "reason_parser.mly" ( _1 ) -# 60178 "reason_parser.ml" +# 64918 "reason_parser.ml" in let _endpos__2_ = _endpos__10_ in -# 3470 "reason_parser.mly" +# 3752 "reason_parser.mly" ( (_1, _2, _endpos__2_, _3) ) -# 60185 "reason_parser.ml" +# 64925 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109200,9 +106370,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : 'tv_type_declarations = let _1 = -# 4309 "reason_parser.mly" +# 4623 "reason_parser.mly" ( [] ) -# 60223 "reason_parser.ml" +# 64963 "reason_parser.ml" in let _endpos__1_ = _endpos__0_ in @@ -109212,14 +106382,14 @@ module Tables = struct else _startpos__2_ in -# 3433 "reason_parser.mly" +# 3717 "reason_parser.mly" ( let (ident, params, constraints, kind, priv, manifest), endpos, and_types = _4 in let loc = mklocation _symbolstartpos endpos in let ty = Type.mk ident ~params:params ~cstrs:constraints ~kind ~priv ?manifest ~attrs:_1 ~loc in (_3, ty :: and_types) ) -# 60240 "reason_parser.ml" +# 64980 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109264,15 +106434,15 @@ module Tables = struct let _1 = let _1 = _10 in -# 4305 "reason_parser.mly" +# 4619 "reason_parser.mly" ( _1 ) -# 60287 "reason_parser.ml" +# 65027 "reason_parser.ml" in -# 4310 "reason_parser.mly" +# 4624 "reason_parser.mly" ( List.map (fun x -> x.txt) _1 ) -# 60293 "reason_parser.ml" +# 65033 "reason_parser.ml" in let _endpos__1_ = _endpos__100_ in @@ -109282,14 +106452,14 @@ module Tables = struct else _startpos__2_ in -# 3433 "reason_parser.mly" +# 3717 "reason_parser.mly" ( let (ident, params, constraints, kind, priv, manifest), endpos, and_types = _4 in let loc = mklocation _symbolstartpos endpos in let ty = Type.mk ident ~params:params ~cstrs:constraints ~kind ~priv ?manifest ~attrs:_1 ~loc in (_3, ty :: and_types) ) -# 60310 "reason_parser.ml" +# 65050 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109308,17 +106478,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 60331 "reason_parser.ml" +# 65071 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_type_longident = -# 4110 "reason_parser.mly" +# 4424 "reason_parser.mly" ( Lident _1 ) -# 60339 "reason_parser.ml" +# 65079 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109347,9 +106517,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 60370 "reason_parser.ml" +# 65110 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_ext_longident = Obj.magic _1 in @@ -109357,9 +106527,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_type_longident = -# 4111 "reason_parser.mly" +# 4425 "reason_parser.mly" ( Ldot(_1, _3) ) -# 60380 "reason_parser.ml" +# 65120 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109375,9 +106545,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_type_other_kind = -# 3480 "reason_parser.mly" +# 3762 "reason_parser.mly" ( (Ptype_abstract, Public, None) ) -# 60398 "reason_parser.ml" +# 65138 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109407,18 +106577,18 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : 'tv_type_other_kind = let _2 = -# 4205 "reason_parser.mly" +# 4519 "reason_parser.mly" ( Public ) -# 60430 "reason_parser.ml" +# 65170 "reason_parser.ml" in -# 3482 "reason_parser.mly" +# 3764 "reason_parser.mly" ( match _3 with | Core_type ct -> (Ptype_abstract, _2, Some ct) | Record_type rt -> (Ptype_record rt, _2, None) ) -# 60439 "reason_parser.ml" +# 65179 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109455,18 +106625,18 @@ module Tables = struct let _v : 'tv_type_other_kind = let _2 = let _1 = _10 in -# 4206 "reason_parser.mly" +# 4520 "reason_parser.mly" ( Private ) -# 60478 "reason_parser.ml" +# 65218 "reason_parser.ml" in -# 3482 "reason_parser.mly" +# 3764 "reason_parser.mly" ( match _3 with | Core_type ct -> (Ptype_abstract, _2, Some ct) | Record_type rt -> (Ptype_record rt, _2, None) ) -# 60487 "reason_parser.ml" +# 65227 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109495,9 +106665,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_type_other_kind = -# 3487 "reason_parser.mly" +# 3769 "reason_parser.mly" ( (Ptype_open, Public, None) ) -# 60518 "reason_parser.ml" +# 65258 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109544,15 +106714,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 60567 "reason_parser.ml" +# 65307 "reason_parser.ml" in -# 3489 "reason_parser.mly" +# 3771 "reason_parser.mly" ( (Ptype_open, Public, Some _2) ) -# 60573 "reason_parser.ml" +# 65313 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109616,22 +106786,22 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 60639 "reason_parser.ml" +# 65379 "reason_parser.ml" in -# 3975 "reason_parser.mly" +# 4289 "reason_parser.mly" ( _1 ) -# 60645 "reason_parser.ml" +# 65385 "reason_parser.ml" in let _4 = -# 4205 "reason_parser.mly" +# 4519 "reason_parser.mly" ( Public ) -# 60652 "reason_parser.ml" +# 65392 "reason_parser.ml" in let _2 = @@ -109641,15 +106811,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 60664 "reason_parser.ml" +# 65404 "reason_parser.ml" in -# 3491 "reason_parser.mly" - ( (Ptype_record (only_labels _6), _4, Some _2) ) -# 60670 "reason_parser.ml" +# 3773 "reason_parser.mly" + ( (Ptype_record _6, _4, Some _2) ) +# 65410 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109719,23 +106889,23 @@ module Tables = struct let _1 = let _1 = _10 in -# 4419 "reason_parser.mly" +# 4734 "reason_parser.mly" ( List.rev _1 ) -# 60742 "reason_parser.ml" +# 65482 "reason_parser.ml" in -# 3975 "reason_parser.mly" +# 4289 "reason_parser.mly" ( _1 ) -# 60748 "reason_parser.ml" +# 65488 "reason_parser.ml" in let _4 = let _1 = _11 in -# 4206 "reason_parser.mly" +# 4520 "reason_parser.mly" ( Private ) -# 60756 "reason_parser.ml" +# 65496 "reason_parser.ml" in let _2 = @@ -109745,15 +106915,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 60768 "reason_parser.ml" +# 65508 "reason_parser.ml" in -# 3491 "reason_parser.mly" - ( (Ptype_record (only_labels _6), _4, Some _2) ) -# 60774 "reason_parser.ml" +# 3773 "reason_parser.mly" + ( (Ptype_record _6, _4, Some _2) ) +# 65514 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109782,9 +106952,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_type_parameter = -# 3516 "reason_parser.mly" +# 3802 "reason_parser.mly" ( (_2, _1) ) -# 60805 "reason_parser.ml" +# 65545 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109800,48 +106970,73 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__300_; MenhirLib.EngineTypes.endp = _endpos__300_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _100; - MenhirLib.EngineTypes.startp = _startpos__100_; - MenhirLib.EngineTypes.endp = _endpos__100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _10000; + MenhirLib.EngineTypes.startp = _startpos__10000_; + MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _100; + MenhirLib.EngineTypes.startp = _startpos__100_; + MenhirLib.EngineTypes.endp = _endpos__100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _300 : unit = Obj.magic _300 in - let x00 : 'tv_separated_nonempty_list_COMMA_only_core_type_core_type__ = Obj.magic x00 in + let _2000 : 'tv_option_COMMA_ = Obj.magic _2000 in + let _10000 : 'tv_lseparated_nonempty_list_aux_COMMA_only_core_type_core_type__ = Obj.magic _10000 in let _100 : unit = Obj.magic _100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100_ in let _endpos = _endpos__300_ in let _v : 'tv_type_parameters = let _1 = let _30 = _300 in - let x0 = x00 in + let _200 = _2000 in + let _1000 = _10000 in let _10 = _100 in let _1 = let _3 = _30 in - let x = x0 in + let _20 = _200 in + let _100 = _1000 in let _1 = _10 in + let x = + let _2 = _20 in + let _10 = _100 in + let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 65603 "reason_parser.ml" + + in + +# 4212 "reason_parser.mly" + (_1) +# 65609 "reason_parser.ml" + + in # 174 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 60850 "reason_parser.ml" +# 65615 "reason_parser.ml" in -# 4429 "reason_parser.mly" +# 4744 "reason_parser.mly" ( _1 ) -# 60856 "reason_parser.ml" +# 65621 "reason_parser.ml" in -# 3902 "reason_parser.mly" - ( _1 ) -# 60862 "reason_parser.ml" +# 4216 "reason_parser.mly" + ( _1 ) +# 65627 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109870,9 +107065,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 60893 "reason_parser.ml" +# 65658 "reason_parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : 'tv_mod_ext_longident = Obj.magic _1 in @@ -109880,9 +107075,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_type_strictly_longident = -# 4122 "reason_parser.mly" +# 4436 "reason_parser.mly" ( Ldot(_1, _3) ) -# 60903 "reason_parser.ml" +# 65668 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109919,9 +107114,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 3526 "reason_parser.mly" +# 3812 "reason_parser.mly" ( mktyp (Ptyp_var _2) ) -# 60942 "reason_parser.ml" +# 65707 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -109929,15 +107124,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4356 "reason_parser.mly" +# 4671 "reason_parser.mly" ( {x with ptyp_loc = {x.ptyp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 60952 "reason_parser.ml" +# 65717 "reason_parser.ml" in -# 3527 "reason_parser.mly" +# 3813 "reason_parser.mly" ( _1 ) -# 60958 "reason_parser.ml" +# 65723 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109955,21 +107150,60 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_embedded___anonymous_35_ = Obj.magic _1 in + let _1 : 'tv_embedded___anonymous_33_ = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_type_variable_with_variance = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 3508 "reason_parser.mly" +# 3794 "reason_parser.mly" ( let first, second = _1 in let ptyp_loc = {first.ptyp_loc with loc_start = _symbolstartpos; loc_end = _endpos} in ({first with ptyp_loc}, second) ) -# 60990 "reason_parser.ml" +# 65755 "reason_parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_option_COMMA_ = Obj.magic _2 in + let _10 : 'tv_lseparated_nonempty_list_aux_COMMA_type_variable_with_variance_ = Obj.magic _10 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__10_ in + let _endpos = _endpos__2_ in + let _v : 'tv_type_variables_with_variance_comma_list = let _1 = + let _1 = _10 in + +# 4734 "reason_parser.mly" + ( List.rev _1 ) +# 65788 "reason_parser.ml" + + in + +# 3777 "reason_parser.mly" + (_1) +# 65794 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -109985,9 +107219,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_type_variance = -# 3519 "reason_parser.mly" +# 3805 "reason_parser.mly" ( Invariant ) -# 61008 "reason_parser.ml" +# 65812 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110010,9 +107244,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_type_variance = -# 3520 "reason_parser.mly" +# 3806 "reason_parser.mly" ( Covariant ) -# 61033 "reason_parser.ml" +# 65837 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110035,9 +107269,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_type_variance = -# 3521 "reason_parser.mly" +# 3807 "reason_parser.mly" ( Contravariant ) -# 61058 "reason_parser.ml" +# 65862 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110060,9 +107294,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unattributed_core_type = -# 3849 "reason_parser.mly" +# 4147 "reason_parser.mly" ( _1 ) -# 61083 "reason_parser.ml" +# 65887 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110103,15 +107337,16 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 61126 "reason_parser.ml" +# 65930 "reason_parser.ml" in -# 3851 "reason_parser.mly" - ( Core_type (List.fold_right mktyp_arrow _1 _3) ) -# 61132 "reason_parser.ml" +# 4149 "reason_parser.mly" + ( let ct = List.fold_right mktyp_arrow _1 _3 in + Core_type ct ) +# 65937 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110152,9 +107387,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 61175 "reason_parser.ml" +# 65980 "reason_parser.ml" in let _1 = @@ -110164,15 +107399,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 61187 "reason_parser.ml" +# 65992 "reason_parser.ml" in -# 3853 "reason_parser.mly" +# 4152 "reason_parser.mly" ( Core_type (mktyp (Ptyp_arrow (Nolabel, _1, _3))) ) -# 61193 "reason_parser.ml" +# 65998 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110213,15 +107448,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 61236 "reason_parser.ml" +# 66041 "reason_parser.ml" in -# 2543 "reason_parser.mly" +# 2734 "reason_parser.mly" ( _1 ) -# 61242 "reason_parser.ml" +# 66047 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -110229,21 +107464,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61252 "reason_parser.ml" +# 66057 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61258 "reason_parser.ml" +# 66063 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61264 "reason_parser.ml" +# 66069 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110255,61 +107490,70 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2000 : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = Obj.magic _2000 in + let _3000 : 'tv_fun_def_EQUALGREATER_non_arrowed_core_type_ = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__2000_ in + let _endpos = _endpos__3000_ in let _v : 'tv_unattributed_expr = let _1 = - let _endpos__200_ = _endpos__2000_ in + let _endpos__300_ = _endpos__3000_ in let _startpos__100_ = _startpos__1000_ in + let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__20_ = _endpos__200_ in + let _endpos__30_ = _endpos__300_ in let _startpos__10_ = _startpos__100_ in + let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = + let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 2545 "reason_parser.mly" - ( _2 ) -# 61308 "reason_parser.ml" +# 2736 "reason_parser.mly" + ( _2 _3 ) +# 66122 "reason_parser.ml" in - let _endpos_x_ = _endpos__20_ in + let _endpos_x_ = _endpos__30_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61318 "reason_parser.ml" +# 66132 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61324 "reason_parser.ml" +# 66138 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61330 "reason_parser.ml" +# 66144 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110364,14 +107608,24 @@ module Tables = struct let _20 = _200 in let _10 = _100 in let x = + let _endpos__4_ = _endpos__40_ in + let _startpos__1_ = _startpos__10_ in let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in + let _endpos = _endpos__4_ in + let _startpos = _startpos__1_ in -# 2547 "reason_parser.mly" - ( List.fold_right mkexp_fun _2 _4 ) -# 61392 "reason_parser.ml" +# 2738 "reason_parser.mly" + ( let (ps, uncurried) = _2 in + let exp = List.fold_right mkexp_fun ps _4 in + if uncurried then + let loc = mklocation _startpos _endpos in + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 66216 "reason_parser.ml" in let _endpos_x_ = _endpos__40_ in @@ -110379,21 +107633,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61402 "reason_parser.ml" +# 66226 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61408 "reason_parser.ml" +# 66232 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61414 "reason_parser.ml" +# 66238 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110471,6 +107725,7 @@ module Tables = struct let _endpos__6_ = _endpos__60_ in let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in + let _startpos__1_ = _startpos__11_ in let _6 = _60 in let _5 = _50 in let _10 = _100 in @@ -110484,18 +107739,25 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 61507 "reason_parser.ml" +# 66332 "reason_parser.ml" in let _startpos__4_ = _startpos__10_ in let _endpos = _endpos__6_ in + let _startpos = _startpos__1_ in -# 2549 "reason_parser.mly" - ( List.fold_right mkexp_fun _2 - (ghexp_constraint (mklocation _startpos__4_ _endpos) _6 (Some _4, None)) ) -# 61516 "reason_parser.ml" +# 2746 "reason_parser.mly" + ( let (ps, uncurried) = _2 in + let exp = List.fold_right mkexp_fun ps + (ghexp_constraint (mklocation _startpos__4_ _endpos) _6 (Some _4, None)) in + if uncurried then + let loc = mklocation _startpos _endpos in + {exp with pexp_attributes = (uncurry_payload loc)::exp.pexp_attributes} + else exp + ) +# 66348 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -110503,21 +107765,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61526 "reason_parser.ml" +# 66358 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61532 "reason_parser.ml" +# 66364 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61538 "reason_parser.ml" +# 66370 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110537,16 +107799,22 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _200000 : 'tv_llist_aux_match_case_expr__ = Obj.magic _200000 in let _100000 : 'tv_match_case_expr_ = Obj.magic _100000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in @@ -110556,39 +107824,42 @@ module Tables = struct let _startpos__100_ = _startpos__1000_ in let _20000 = _200000 in let _10000 = _100000 in + let _200 = _2000 in let _100 = _1000 in let _1 = let _endpos__2000_ = _endpos__20000_ in let _startpos__10_ = _startpos__100_ in let _2000 = _20000 in let _1000 = _10000 in + let _20 = _200 in let _10 = _100 in let x = let _200 = _2000 in let _100 = _1000 in + let _2 = _20 in let _1 = _10 in - let _2 = + let _3 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 61597 "reason_parser.ml" +# 66438 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 61603 "reason_parser.ml" +# 66444 "reason_parser.ml" in -# 2555 "reason_parser.mly" - ( mkexp (Pexp_function _2) ) -# 61609 "reason_parser.ml" +# 2759 "reason_parser.mly" + ( _2 (mkexp (Pexp_function _3)) ) +# 66450 "reason_parser.ml" in let _endpos_x_ = _endpos__2000_ in @@ -110596,21 +107867,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61619 "reason_parser.ml" +# 66460 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61625 "reason_parser.ml" +# 66466 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61631 "reason_parser.ml" +# 66472 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110622,9 +107893,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _200000; MenhirLib.EngineTypes.startp = _startpos__200000_; @@ -110634,103 +107905,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; }; } = _menhir_stack in - let _5000 : unit = Obj.magic _5000 in - let _200000 : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = Obj.magic _200000 in - let _100000 : 'tv_match_case_semi_terminated_seq_expr_ = Obj.magic _100000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _6000 : unit = Obj.magic _6000 in + let _200000 : 'tv_llist_aux_match_case_seq_expr__ = Obj.magic _200000 in + let _100000 : 'tv_match_case_seq_expr_ = Obj.magic _100000 in + let _4000 : unit = Obj.magic _4000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__5000_ in + let _endpos = _endpos__6000_ in let _v : 'tv_unattributed_expr = let _1 = - let _endpos__500_ = _endpos__5000_ in + let _endpos__600_ = _endpos__6000_ in let _startpos__100_ = _startpos__1000_ in - let _500 = _5000 in + let _600 = _6000 in let _20000 = _200000 in let _10000 = _100000 in + let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__50_ = _endpos__500_ in + let _endpos__60_ = _endpos__600_ in let _startpos__10_ = _startpos__100_ in - let _50 = _500 in + let _60 = _600 in let _2000 = _20000 in let _1000 = _10000 in + let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _5 = _50 in + let _6 = _60 in let _200 = _2000 in let _100 = _1000 in + let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in - let _4 = + let _5 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 61717 "reason_parser.ml" +# 66567 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 61723 "reason_parser.ml" +# 66573 "reason_parser.ml" in -# 2557 "reason_parser.mly" - ( mkexp (Pexp_match (_2, _4)) ) -# 61729 "reason_parser.ml" +# 2762 "reason_parser.mly" + ( _2 (mkexp (Pexp_match (_3, _5))) ) +# 66579 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in + let _endpos_x_ = _endpos__60_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61739 "reason_parser.ml" +# 66589 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61745 "reason_parser.ml" +# 66595 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61751 "reason_parser.ml" +# 66601 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110742,9 +108022,9 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = _200000; MenhirLib.EngineTypes.startp = _startpos__200000_; @@ -110754,103 +108034,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__100000_; MenhirLib.EngineTypes.endp = _endpos__100000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; }; } = _menhir_stack in - let _5000 : unit = Obj.magic _5000 in - let _200000 : 'tv_llist_aux_match_case_semi_terminated_seq_expr__ = Obj.magic _200000 in - let _100000 : 'tv_match_case_semi_terminated_seq_expr_ = Obj.magic _100000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _6000 : unit = Obj.magic _6000 in + let _200000 : 'tv_llist_aux_match_case_seq_expr__ = Obj.magic _200000 in + let _100000 : 'tv_match_case_seq_expr_ = Obj.magic _100000 in + let _4000 : unit = Obj.magic _4000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__5000_ in + let _endpos = _endpos__6000_ in let _v : 'tv_unattributed_expr = let _1 = - let _endpos__500_ = _endpos__5000_ in + let _endpos__600_ = _endpos__6000_ in let _startpos__100_ = _startpos__1000_ in - let _500 = _5000 in + let _600 = _6000 in let _20000 = _200000 in let _10000 = _100000 in + let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__50_ = _endpos__500_ in + let _endpos__60_ = _endpos__600_ in let _startpos__10_ = _startpos__100_ in - let _50 = _500 in + let _60 = _600 in let _2000 = _20000 in let _1000 = _10000 in + let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _5 = _50 in + let _6 = _60 in let _200 = _2000 in let _100 = _1000 in + let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in - let _4 = + let _5 = let _20 = _200 in let _10 = _100 in let _1 = let _2 = _20 in let _1 = _10 in -# 4405 "reason_parser.mly" +# 4720 "reason_parser.mly" ( _1 :: List.rev _2 ) -# 61837 "reason_parser.ml" +# 66696 "reason_parser.ml" in -# 3052 "reason_parser.mly" +# 3299 "reason_parser.mly" ( _1 ) -# 61843 "reason_parser.ml" +# 66702 "reason_parser.ml" in -# 2559 "reason_parser.mly" - ( mkexp (Pexp_try (_2, _4)) ) -# 61849 "reason_parser.ml" +# 2765 "reason_parser.mly" + ( _2 (mkexp (Pexp_try (_3, _5))) ) +# 66708 "reason_parser.ml" in - let _endpos_x_ = _endpos__50_ in + let _endpos_x_ = _endpos__60_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61859 "reason_parser.ml" +# 66718 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61865 "reason_parser.ml" +# 66724 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61871 "reason_parser.ml" +# 66730 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110862,83 +108151,92 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4000; - MenhirLib.EngineTypes.startp = _startpos__4000_; - MenhirLib.EngineTypes.endp = _endpos__4000_; + MenhirLib.EngineTypes.semv = _5000; + MenhirLib.EngineTypes.startp = _startpos__5000_; + MenhirLib.EngineTypes.endp = _endpos__5000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1000; - MenhirLib.EngineTypes.startp = _startpos__1000_; - MenhirLib.EngineTypes.endp = _endpos__1000_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in + let _5000 : unit = Obj.magic _5000 in let _4000 : unit = Obj.magic _4000 in - let _3000 : unit = Obj.magic _3000 in - let _2000 : 'tv_simple_expr_no_constructor = Obj.magic _2000 in + let _3000 : 'tv_simple_expr_no_constructor = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1000_ in - let _endpos = _endpos__4000_ in + let _endpos = _endpos__5000_ in let _v : 'tv_unattributed_expr = let _1 = - let _endpos__400_ = _endpos__4000_ in - let _startpos__400_ = _startpos__4000_ in + let _endpos__500_ = _endpos__5000_ in + let _startpos__500_ = _startpos__5000_ in let _startpos__100_ = _startpos__1000_ in + let _500 = _5000 in let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in let _100 = _1000 in let _1 = - let _endpos__40_ = _endpos__400_ in - let _startpos__40_ = _startpos__400_ in + let _endpos__50_ = _endpos__500_ in + let _startpos__50_ = _startpos__500_ in let _startpos__10_ = _startpos__100_ in + let _50 = _500 in let _40 = _400 in let _30 = _300 in let _20 = _200 in let _10 = _100 in let x = - let _endpos__4_ = _endpos__40_ in - let _startpos__4_ = _startpos__40_ in + let _endpos__5_ = _endpos__50_ in + let _startpos__5_ = _startpos__50_ in + let _5 = _50 in let _4 = _40 in let _3 = _30 in let _2 = _20 in let _1 = _10 in -# 2561 "reason_parser.mly" - ( syntax_error_exp (mklocation _startpos__4_ _endpos__4_) "Invalid try with") -# 61937 "reason_parser.ml" +# 2767 "reason_parser.mly" + ( syntax_error_exp (mklocation _startpos__5_ _endpos__5_) "Invalid try with") +# 66805 "reason_parser.ml" in - let _endpos_x_ = _endpos__40_ in + let _endpos_x_ = _endpos__50_ in let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 61947 "reason_parser.ml" +# 66815 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 61953 "reason_parser.ml" +# 66821 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 61959 "reason_parser.ml" +# 66827 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -110954,20 +108252,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10000_; MenhirLib.EngineTypes.endp = _endpos__10000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -110977,6 +108281,7 @@ module Tables = struct let _endpos__1000_ = _endpos__10000_ in let _startpos__1000_ = _startpos__10000_ in let _1000 = _10000 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -110984,37 +108289,39 @@ module Tables = struct let _endpos__100_ = _endpos__1000_ in let _startpos__100_ = _startpos__1000_ in let _100 = _1000 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _4 = + let _5 = # 110 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( None ) -# 62017 "reason_parser.ml" +# 66894 "reason_parser.ml" in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 62029 "reason_parser.ml" +# 66906 "reason_parser.ml" in -# 2563 "reason_parser.mly" - ( mkexp(Pexp_ifthenelse(_2, _3, _4)) ) -# 62035 "reason_parser.ml" +# 2770 "reason_parser.mly" + ( _2 (mkexp (Pexp_ifthenelse(_3, _4, _5))) ) +# 66912 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -111022,21 +108329,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62045 "reason_parser.ml" +# 66922 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62051 "reason_parser.ml" +# 66928 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62057 "reason_parser.ml" +# 66934 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111060,15 +108367,20 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10100_; MenhirLib.EngineTypes.endp = _endpos__10100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; @@ -111077,7 +108389,8 @@ module Tables = struct let x00000 : 'tv_expr = Obj.magic x00000 in let _100000 : unit = Obj.magic _100000 in let _10100 : 'tv_simple_expr_call = Obj.magic _10100 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -111090,6 +108403,7 @@ module Tables = struct let x0000 = x00000 in let _10000 = _100000 in let _1010 = _10100 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -111100,6 +108414,7 @@ module Tables = struct let x000 = x0000 in let _1000 = _10000 in let _101 = _1010 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = @@ -111108,9 +108423,10 @@ module Tables = struct let x00 = x000 in let _100 = _1000 in let _10 = _101 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _4 = + let _5 = let x0 = x00 in let _10 = _100 in let x = @@ -111119,31 +108435,31 @@ module Tables = struct # 157 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( x ) -# 62140 "reason_parser.ml" +# 67026 "reason_parser.ml" in # 112 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" ( Some x ) -# 62146 "reason_parser.ml" +# 67032 "reason_parser.ml" in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 62158 "reason_parser.ml" +# 67044 "reason_parser.ml" in -# 2563 "reason_parser.mly" - ( mkexp(Pexp_ifthenelse(_2, _3, _4)) ) -# 62164 "reason_parser.ml" +# 2770 "reason_parser.mly" + ( _2 (mkexp (Pexp_ifthenelse(_3, _4, _5))) ) +# 67050 "reason_parser.ml" in let _endpos_x_ = _endpos_x000_ in @@ -111151,21 +108467,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62174 "reason_parser.ml" +# 67060 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62180 "reason_parser.ml" +# 67066 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62186 "reason_parser.ml" +# 67072 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111181,20 +108497,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__10000_; MenhirLib.EngineTypes.endp = _endpos__10000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1100; + MenhirLib.EngineTypes.startp = _startpos__1100_; + MenhirLib.EngineTypes.endp = _endpos__1100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _2000 : 'tv_parenthesized_expr = Obj.magic _2000 in + let _3000 : 'tv_parenthesized_expr = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in let _1100 : unit = Obj.magic _1100 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1100_ in @@ -111204,6 +108526,7 @@ module Tables = struct let _endpos__1000_ = _endpos__10000_ in let _startpos__1000_ = _startpos__10000_ in let _1000 = _10000 in + let _300 = _3000 in let _200 = _2000 in let _110 = _1100 in let _1 = @@ -111211,30 +108534,32 @@ module Tables = struct let _endpos__100_ = _endpos__1000_ in let _startpos__100_ = _startpos__1000_ in let _100 = _1000 in + let _30 = _300 in let _20 = _200 in let _11 = _110 in let x = let _endpos__10_ = _endpos__100_ in let _startpos__10_ = _startpos__100_ in let _10 = _100 in + let _3 = _30 in let _2 = _20 in let _1 = _11 in - let _3 = + let _4 = let _endpos__1_ = _endpos__10_ in let _startpos__1_ = _startpos__10_ in let _1 = _10 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 62249 "reason_parser.ml" +# 67144 "reason_parser.ml" in -# 2565 "reason_parser.mly" - ( mkexp (Pexp_while(_2, _3)) ) -# 62255 "reason_parser.ml" +# 2772 "reason_parser.mly" + ( _2 (mkexp (Pexp_while(_3, _4))) ) +# 67150 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -111242,21 +108567,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62265 "reason_parser.ml" +# 67160 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62271 "reason_parser.ml" +# 67166 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62277 "reason_parser.ml" +# 67172 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111268,43 +108593,48 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _10000; - MenhirLib.EngineTypes.startp = _startpos__10000_; - MenhirLib.EngineTypes.endp = _endpos__10000_; + MenhirLib.EngineTypes.semv = _11000; + MenhirLib.EngineTypes.startp = _startpos__11000_; + MenhirLib.EngineTypes.endp = _endpos__11000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _8000; - MenhirLib.EngineTypes.startp = _startpos__8000_; - MenhirLib.EngineTypes.endp = _endpos__8000_; + MenhirLib.EngineTypes.semv = _9000; + MenhirLib.EngineTypes.startp = _startpos__9000_; + MenhirLib.EngineTypes.endp = _endpos__9000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _7000; - MenhirLib.EngineTypes.startp = _startpos__7000_; - MenhirLib.EngineTypes.endp = _endpos__7000_; + MenhirLib.EngineTypes.semv = _8000; + MenhirLib.EngineTypes.startp = _startpos__8000_; + MenhirLib.EngineTypes.endp = _endpos__8000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6000; - MenhirLib.EngineTypes.startp = _startpos__6000_; - MenhirLib.EngineTypes.endp = _endpos__6000_; + MenhirLib.EngineTypes.semv = _7000; + MenhirLib.EngineTypes.startp = _startpos__7000_; + MenhirLib.EngineTypes.endp = _endpos__7000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5000; - MenhirLib.EngineTypes.startp = _startpos__5000_; - MenhirLib.EngineTypes.endp = _endpos__5000_; + MenhirLib.EngineTypes.semv = _6000; + MenhirLib.EngineTypes.startp = _startpos__6000_; + MenhirLib.EngineTypes.endp = _endpos__6000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4000; - MenhirLib.EngineTypes.startp = _startpos__4000_; - MenhirLib.EngineTypes.endp = _endpos__4000_; + MenhirLib.EngineTypes.semv = _5000; + MenhirLib.EngineTypes.startp = _startpos__5000_; + MenhirLib.EngineTypes.endp = _endpos__5000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3000; - MenhirLib.EngineTypes.startp = _startpos__3000_; - MenhirLib.EngineTypes.endp = _endpos__3000_; + MenhirLib.EngineTypes.semv = _4000; + MenhirLib.EngineTypes.startp = _startpos__4000_; + MenhirLib.EngineTypes.endp = _endpos__4000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2000; - MenhirLib.EngineTypes.startp = _startpos__2000_; - MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.semv = _3000; + MenhirLib.EngineTypes.startp = _startpos__3000_; + MenhirLib.EngineTypes.endp = _endpos__3000_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1100; - MenhirLib.EngineTypes.startp = _startpos__1100_; - MenhirLib.EngineTypes.endp = _endpos__1100_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2000; + MenhirLib.EngineTypes.startp = _startpos__2000_; + MenhirLib.EngineTypes.endp = _endpos__2000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1000; + MenhirLib.EngineTypes.startp = _startpos__1000_; + MenhirLib.EngineTypes.endp = _endpos__1000_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; @@ -111314,23 +108644,25 @@ module Tables = struct }; }; } = _menhir_stack in - let _10000 : 'tv_simple_expr_call = Obj.magic _10000 in - let _8000 : unit = Obj.magic _8000 in - let _7000 : 'tv_expr = Obj.magic _7000 in - let _6000 : 'tv_direction_flag = Obj.magic _6000 in - let _5000 : 'tv_expr = Obj.magic _5000 in - let _4000 : unit = Obj.magic _4000 in - let _3000 : 'tv_pattern = Obj.magic _3000 in - let _2000 : unit = Obj.magic _2000 in - let _1100 : unit = Obj.magic _1100 in + let _11000 : 'tv_simple_expr_call = Obj.magic _11000 in + let _9000 : unit = Obj.magic _9000 in + let _8000 : 'tv_expr = Obj.magic _8000 in + let _7000 : 'tv_direction_flag = Obj.magic _7000 in + let _6000 : 'tv_expr = Obj.magic _6000 in + let _5000 : unit = Obj.magic _5000 in + let _4000 : 'tv_pattern = Obj.magic _4000 in + let _3000 : unit = Obj.magic _3000 in + let _2000 : 'tv_optional_expr_extension = Obj.magic _2000 in + let _1000 : unit = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1100_ in - let _endpos = _endpos__10000_ in + let _startpos = _startpos__1000_ in + let _endpos = _endpos__11000_ in let _v : 'tv_unattributed_expr = let _1 = - let _startpos__110_ = _startpos__1100_ in - let _endpos__1000_ = _endpos__10000_ in - let _startpos__1000_ = _startpos__10000_ in - let _1000 = _10000 in + let _endpos__1100_ = _endpos__11000_ in + let _startpos__1100_ = _startpos__11000_ in + let _startpos__100_ = _startpos__1000_ in + let _1100 = _11000 in + let _900 = _9000 in let _800 = _8000 in let _700 = _7000 in let _600 = _6000 in @@ -111338,12 +108670,13 @@ module Tables = struct let _400 = _4000 in let _300 = _3000 in let _200 = _2000 in - let _110 = _1100 in + let _100 = _1000 in let _1 = - let _startpos__11_ = _startpos__110_ in - let _endpos__100_ = _endpos__1000_ in - let _startpos__100_ = _startpos__1000_ in - let _100 = _1000 in + let _endpos__110_ = _endpos__1100_ in + let _startpos__110_ = _startpos__1100_ in + let _startpos__10_ = _startpos__100_ in + let _110 = _1100 in + let _90 = _900 in let _80 = _800 in let _70 = _700 in let _60 = _600 in @@ -111351,11 +108684,12 @@ module Tables = struct let _40 = _400 in let _30 = _300 in let _20 = _200 in - let _11 = _110 in + let _10 = _100 in let x = - let _endpos__10_ = _endpos__100_ in - let _startpos__10_ = _startpos__100_ in - let _10 = _100 in + let _endpos__11_ = _endpos__110_ in + let _startpos__11_ = _startpos__110_ in + let _11 = _110 in + let _9 = _90 in let _8 = _80 in let _7 = _70 in let _6 = _60 in @@ -111363,45 +108697,45 @@ module Tables = struct let _4 = _40 in let _3 = _30 in let _2 = _20 in - let _1 = _11 in - let _9 = - let _endpos__1_ = _endpos__10_ in - let _startpos__1_ = _startpos__10_ in - let _1 = _10 in + let _1 = _10 in + let _10 = + let _endpos__1_ = _endpos__11_ in + let _startpos__1_ = _startpos__11_ in + let _1 = _11 in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 62394 "reason_parser.ml" +# 67298 "reason_parser.ml" in -# 2567 "reason_parser.mly" - ( mkexp(Pexp_for(_3, _5, _7, _6, _9)) ) -# 62400 "reason_parser.ml" +# 2775 "reason_parser.mly" + ( _2 (mkexp (Pexp_for(_4, _6, _8, _7, _10))) ) +# 67304 "reason_parser.ml" in - let _endpos_x_ = _endpos__100_ in - let _startpos_x_ = _startpos__11_ in + let _endpos_x_ = _endpos__110_ in + let _startpos_x_ = _startpos__10_ in let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62410 "reason_parser.ml" +# 67314 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62416 "reason_parser.ml" +# 67320 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62422 "reason_parser.ml" +# 67326 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111507,12 +108841,12 @@ module Tables = struct let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in -# 2569 "reason_parser.mly" +# 2777 "reason_parser.mly" ( let loc_colon = mklocation _startpos__2_ _endpos__2_ in let loc = mklocation _symbolstartpos _endpos in mkexp_cons loc_colon (mkexp ~ghost:true ~loc (Pexp_tuple[_5;_7])) loc ) -# 62533 "reason_parser.ml" +# 67437 "reason_parser.ml" in let _endpos_x_ = _endpos__80_ in @@ -111520,21 +108854,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62543 "reason_parser.ml" +# 67447 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62549 "reason_parser.ml" +# 67453 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62555 "reason_parser.ml" +# 67459 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111564,9 +108898,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 984 "reason_parser.mly" +# 1104 "reason_parser.mly" (string) -# 62587 "reason_parser.ml" +# 67491 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_unattributed_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -111601,9 +108935,9 @@ module Tables = struct let x = let _1 = _10 in -# 4044 "reason_parser.mly" +# 4358 "reason_parser.mly" ( _1 ) -# 62624 "reason_parser.ml" +# 67528 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -111611,15 +108945,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 62634 "reason_parser.ml" +# 67538 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 62640 "reason_parser.ml" +# 67544 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -111627,21 +108961,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62650 "reason_parser.ml" +# 67554 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62656 "reason_parser.ml" +# 67560 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62662 "reason_parser.ml" +# 67566 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111671,9 +109005,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 985 "reason_parser.mly" +# 1105 "reason_parser.mly" (string) -# 62694 "reason_parser.ml" +# 67598 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_unattributed_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -111708,9 +109042,9 @@ module Tables = struct let x = let _1 = _10 in -# 4045 "reason_parser.mly" +# 4359 "reason_parser.mly" ( _1 ) -# 62731 "reason_parser.ml" +# 67635 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -111718,15 +109052,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 62741 "reason_parser.ml" +# 67645 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 62747 "reason_parser.ml" +# 67651 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -111734,21 +109068,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62757 "reason_parser.ml" +# 67661 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62763 "reason_parser.ml" +# 67667 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62769 "reason_parser.ml" +# 67673 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111778,9 +109112,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 986 "reason_parser.mly" +# 1106 "reason_parser.mly" (string) -# 62801 "reason_parser.ml" +# 67705 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_unattributed_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -111815,9 +109149,9 @@ module Tables = struct let x = let _1 = _10 in -# 4046 "reason_parser.mly" +# 4360 "reason_parser.mly" ( _1 ) -# 62838 "reason_parser.ml" +# 67742 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -111825,15 +109159,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 62848 "reason_parser.ml" +# 67752 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 62854 "reason_parser.ml" +# 67758 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -111841,21 +109175,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62864 "reason_parser.ml" +# 67768 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62870 "reason_parser.ml" +# 67774 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62876 "reason_parser.ml" +# 67780 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -111885,9 +109219,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 987 "reason_parser.mly" +# 1107 "reason_parser.mly" (string) -# 62908 "reason_parser.ml" +# 67812 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_unattributed_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -111922,9 +109256,9 @@ module Tables = struct let x = let _1 = _10 in -# 4047 "reason_parser.mly" +# 4361 "reason_parser.mly" ( _1 ) -# 62945 "reason_parser.ml" +# 67849 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -111932,15 +109266,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 62955 "reason_parser.ml" +# 67859 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 62961 "reason_parser.ml" +# 67865 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -111948,21 +109282,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 62971 "reason_parser.ml" +# 67875 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 62977 "reason_parser.ml" +# 67881 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 62983 "reason_parser.ml" +# 67887 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112025,9 +109359,9 @@ module Tables = struct let x = let _1 = _10 in -# 4049 "reason_parser.mly" +# 4363 "reason_parser.mly" ( "/>" ) -# 63048 "reason_parser.ml" +# 67952 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112035,15 +109369,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63058 "reason_parser.ml" +# 67962 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63064 "reason_parser.ml" +# 67968 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112051,21 +109385,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63074 "reason_parser.ml" +# 67978 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63080 "reason_parser.ml" +# 67984 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63086 "reason_parser.ml" +# 67990 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112095,9 +109429,9 @@ module Tables = struct } = _menhir_stack in let _3000 : 'tv_expr = Obj.magic _3000 in let _100000 : ( -# 990 "reason_parser.mly" +# 1110 "reason_parser.mly" (string) -# 63118 "reason_parser.ml" +# 68022 "reason_parser.ml" ) = Obj.magic _100000 in let _1000 : 'tv_unattributed_expr = Obj.magic _1000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -112132,9 +109466,9 @@ module Tables = struct let x = let _1 = _10 in -# 4050 "reason_parser.mly" +# 4364 "reason_parser.mly" ( _1 ) -# 63155 "reason_parser.ml" +# 68059 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112142,15 +109476,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63165 "reason_parser.ml" +# 68069 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63171 "reason_parser.ml" +# 68075 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112158,21 +109492,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63181 "reason_parser.ml" +# 68085 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63187 "reason_parser.ml" +# 68091 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63193 "reason_parser.ml" +# 68097 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112235,9 +109569,9 @@ module Tables = struct let x = let _1 = _10 in -# 4051 "reason_parser.mly" +# 4365 "reason_parser.mly" ( "+" ) -# 63258 "reason_parser.ml" +# 68162 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112245,15 +109579,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63268 "reason_parser.ml" +# 68172 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63274 "reason_parser.ml" +# 68178 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112261,21 +109595,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63284 "reason_parser.ml" +# 68188 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63290 "reason_parser.ml" +# 68194 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63296 "reason_parser.ml" +# 68200 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112338,9 +109672,9 @@ module Tables = struct let x = let _1 = _10 in -# 4052 "reason_parser.mly" +# 4366 "reason_parser.mly" ( "+." ) -# 63361 "reason_parser.ml" +# 68265 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112348,15 +109682,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63371 "reason_parser.ml" +# 68275 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63377 "reason_parser.ml" +# 68281 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112364,21 +109698,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63387 "reason_parser.ml" +# 68291 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63393 "reason_parser.ml" +# 68297 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63399 "reason_parser.ml" +# 68303 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112441,9 +109775,9 @@ module Tables = struct let x = let _1 = _10 in -# 4053 "reason_parser.mly" +# 4367 "reason_parser.mly" ( "-" ) -# 63464 "reason_parser.ml" +# 68368 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112451,15 +109785,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63474 "reason_parser.ml" +# 68378 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63480 "reason_parser.ml" +# 68384 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112467,21 +109801,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63490 "reason_parser.ml" +# 68394 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63496 "reason_parser.ml" +# 68400 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63502 "reason_parser.ml" +# 68406 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112544,9 +109878,9 @@ module Tables = struct let x = let _1 = _10 in -# 4054 "reason_parser.mly" +# 4368 "reason_parser.mly" ( "-." ) -# 63567 "reason_parser.ml" +# 68471 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112554,15 +109888,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63577 "reason_parser.ml" +# 68481 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63583 "reason_parser.ml" +# 68487 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112570,21 +109904,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63593 "reason_parser.ml" +# 68497 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63599 "reason_parser.ml" +# 68503 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63605 "reason_parser.ml" +# 68509 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112647,9 +109981,9 @@ module Tables = struct let x = let _1 = _10 in -# 4055 "reason_parser.mly" +# 4369 "reason_parser.mly" ( "*" ) -# 63670 "reason_parser.ml" +# 68574 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112657,15 +109991,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63680 "reason_parser.ml" +# 68584 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63686 "reason_parser.ml" +# 68590 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112673,21 +110007,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63696 "reason_parser.ml" +# 68600 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63702 "reason_parser.ml" +# 68606 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63708 "reason_parser.ml" +# 68612 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112750,9 +110084,9 @@ module Tables = struct let x = let _1 = _10 in -# 4056 "reason_parser.mly" +# 4370 "reason_parser.mly" ( "<" ) -# 63773 "reason_parser.ml" +# 68677 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112760,15 +110094,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63783 "reason_parser.ml" +# 68687 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63789 "reason_parser.ml" +# 68693 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112776,21 +110110,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63799 "reason_parser.ml" +# 68703 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63805 "reason_parser.ml" +# 68709 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63811 "reason_parser.ml" +# 68715 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112853,9 +110187,9 @@ module Tables = struct let x = let _1 = _10 in -# 4057 "reason_parser.mly" +# 4371 "reason_parser.mly" ( ">" ) -# 63876 "reason_parser.ml" +# 68780 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112863,15 +110197,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63886 "reason_parser.ml" +# 68790 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63892 "reason_parser.ml" +# 68796 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112879,21 +110213,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 63902 "reason_parser.ml" +# 68806 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 63908 "reason_parser.ml" +# 68812 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 63914 "reason_parser.ml" +# 68818 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -112956,9 +110290,9 @@ module Tables = struct let x = let _1 = _10 in -# 4058 "reason_parser.mly" +# 4372 "reason_parser.mly" ( "or" ) -# 63979 "reason_parser.ml" +# 68883 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -112966,15 +110300,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 63989 "reason_parser.ml" +# 68893 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 63995 "reason_parser.ml" +# 68899 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -112982,21 +110316,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64005 "reason_parser.ml" +# 68909 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64011 "reason_parser.ml" +# 68915 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64017 "reason_parser.ml" +# 68921 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113059,9 +110393,9 @@ module Tables = struct let x = let _1 = _10 in -# 4059 "reason_parser.mly" +# 4373 "reason_parser.mly" ( "||" ) -# 64082 "reason_parser.ml" +# 68986 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113069,15 +110403,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64092 "reason_parser.ml" +# 68996 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64098 "reason_parser.ml" +# 69002 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113085,21 +110419,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64108 "reason_parser.ml" +# 69012 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64114 "reason_parser.ml" +# 69018 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64120 "reason_parser.ml" +# 69024 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113162,9 +110496,9 @@ module Tables = struct let x = let _1 = _10 in -# 4060 "reason_parser.mly" +# 4374 "reason_parser.mly" ( "&" ) -# 64185 "reason_parser.ml" +# 69089 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113172,15 +110506,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64195 "reason_parser.ml" +# 69099 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64201 "reason_parser.ml" +# 69105 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113188,21 +110522,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64211 "reason_parser.ml" +# 69115 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64217 "reason_parser.ml" +# 69121 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64223 "reason_parser.ml" +# 69127 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113265,9 +110599,9 @@ module Tables = struct let x = let _1 = _10 in -# 4061 "reason_parser.mly" +# 4375 "reason_parser.mly" ( "&&" ) -# 64288 "reason_parser.ml" +# 69192 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113275,15 +110609,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64298 "reason_parser.ml" +# 69202 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64304 "reason_parser.ml" +# 69208 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113291,21 +110625,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64314 "reason_parser.ml" +# 69218 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64320 "reason_parser.ml" +# 69224 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64326 "reason_parser.ml" +# 69230 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113368,9 +110702,9 @@ module Tables = struct let x = let _1 = _10 in -# 4062 "reason_parser.mly" +# 4376 "reason_parser.mly" ( ":=" ) -# 64391 "reason_parser.ml" +# 69295 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113378,15 +110712,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64401 "reason_parser.ml" +# 69305 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64407 "reason_parser.ml" +# 69311 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113394,21 +110728,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64417 "reason_parser.ml" +# 69321 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64423 "reason_parser.ml" +# 69327 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64429 "reason_parser.ml" +# 69333 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113471,9 +110805,9 @@ module Tables = struct let x = let _1 = _10 in -# 4063 "reason_parser.mly" +# 4377 "reason_parser.mly" ( "+=" ) -# 64494 "reason_parser.ml" +# 69398 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113481,15 +110815,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64504 "reason_parser.ml" +# 69408 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64510 "reason_parser.ml" +# 69414 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113497,21 +110831,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64520 "reason_parser.ml" +# 69424 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64526 "reason_parser.ml" +# 69430 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64532 "reason_parser.ml" +# 69436 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113574,9 +110908,9 @@ module Tables = struct let x = let _1 = _10 in -# 4064 "reason_parser.mly" +# 4378 "reason_parser.mly" ( "%" ) -# 64597 "reason_parser.ml" +# 69501 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113584,15 +110918,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64607 "reason_parser.ml" +# 69511 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64613 "reason_parser.ml" +# 69517 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113600,21 +110934,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64623 "reason_parser.ml" +# 69527 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64629 "reason_parser.ml" +# 69533 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64635 "reason_parser.ml" +# 69539 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113677,9 +111011,9 @@ module Tables = struct let x = let _1 = _10 in -# 4071 "reason_parser.mly" +# 4385 "reason_parser.mly" ( "<..>" ) -# 64700 "reason_parser.ml" +# 69604 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -113687,15 +111021,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64710 "reason_parser.ml" +# 69614 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64716 "reason_parser.ml" +# 69620 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113703,21 +111037,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64726 "reason_parser.ml" +# 69630 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64732 "reason_parser.ml" +# 69636 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64738 "reason_parser.ml" +# 69642 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113791,9 +111125,9 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 4072 "reason_parser.mly" +# 4386 "reason_parser.mly" ( ">>" ) -# 64814 "reason_parser.ml" +# 69718 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -113801,15 +111135,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64824 "reason_parser.ml" +# 69728 "reason_parser.ml" in -# 2574 "reason_parser.mly" +# 2782 "reason_parser.mly" ( mkinfix _1 _2 _3 ) -# 64830 "reason_parser.ml" +# 69734 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -113817,21 +111151,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64840 "reason_parser.ml" +# 69744 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64846 "reason_parser.ml" +# 69750 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64852 "reason_parser.ml" +# 69756 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113883,15 +111217,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64906 "reason_parser.ml" +# 69810 "reason_parser.ml" in -# 2576 "reason_parser.mly" +# 2784 "reason_parser.mly" ( mkuminus _1 _2 ) -# 64912 "reason_parser.ml" +# 69816 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -113899,21 +111233,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 64922 "reason_parser.ml" +# 69826 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 64928 "reason_parser.ml" +# 69832 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 64934 "reason_parser.ml" +# 69838 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -113965,15 +111299,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 64988 "reason_parser.ml" +# 69892 "reason_parser.ml" in -# 2578 "reason_parser.mly" +# 2786 "reason_parser.mly" ( mkuplus _1 _2 ) -# 64994 "reason_parser.ml" +# 69898 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -113981,21 +111315,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65004 "reason_parser.ml" +# 69908 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65010 "reason_parser.ml" +# 69914 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65016 "reason_parser.ml" +# 69920 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114047,9 +111381,9 @@ module Tables = struct let x = let _1 = _10 in -# 2579 "reason_parser.mly" +# 2787 "reason_parser.mly" ("!") -# 65070 "reason_parser.ml" +# 69974 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -114057,15 +111391,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 65080 "reason_parser.ml" +# 69984 "reason_parser.ml" in -# 2580 "reason_parser.mly" +# 2788 "reason_parser.mly" ( mkexp(Pexp_apply(mkoperator _1, [Nolabel,_2])) ) -# 65086 "reason_parser.ml" +# 69990 "reason_parser.ml" in let _endpos_x_ = _endpos__20_ in @@ -114073,21 +111407,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65096 "reason_parser.ml" +# 70000 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65102 "reason_parser.ml" +# 70006 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65108 "reason_parser.ml" +# 70012 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114172,9 +111506,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 65195 "reason_parser.ml" +# 70099 "reason_parser.ml" in let _1 = @@ -114184,15 +111518,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65207 "reason_parser.ml" +# 70111 "reason_parser.ml" in -# 2582 "reason_parser.mly" +# 2790 "reason_parser.mly" ( mkexp(Pexp_setfield(_1, _3, _5)) ) -# 65213 "reason_parser.ml" +# 70117 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -114200,21 +111534,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65223 "reason_parser.ml" +# 70127 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65229 "reason_parser.ml" +# 70133 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65235 "reason_parser.ml" +# 70139 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114303,22 +111637,22 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65326 "reason_parser.ml" +# 70230 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in -# 2584 "reason_parser.mly" +# 2792 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "Array" "set") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_3; Nolabel,_6])) ) -# 65339 "reason_parser.ml" +# 70243 "reason_parser.ml" in let _endpos_x_ = _endpos__60_ in @@ -114326,21 +111660,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65349 "reason_parser.ml" +# 70253 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65355 "reason_parser.ml" +# 70259 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65361 "reason_parser.ml" +# 70265 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114438,22 +111772,22 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65461 "reason_parser.ml" +# 70365 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 2590 "reason_parser.mly" +# 2798 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let exp = Pexp_ident(array_function ~loc "String" "set") in mkexp(Pexp_apply(mkexp ~ghost:true ~loc exp, [Nolabel,_1; Nolabel,_4; Nolabel,_7])) ) -# 65474 "reason_parser.ml" +# 70378 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -114461,21 +111795,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65484 "reason_parser.ml" +# 70388 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65490 "reason_parser.ml" +# 70394 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65496 "reason_parser.ml" +# 70400 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114573,20 +111907,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65596 "reason_parser.ml" +# 70500 "reason_parser.ml" in let _startpos__1_ = _startpos__10_ in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 2596 "reason_parser.mly" +# 2804 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in bigarray_set ~loc _1 _4 _7 ) -# 65607 "reason_parser.ml" +# 70511 "reason_parser.ml" in let _endpos_x_ = _endpos__70_ in @@ -114594,21 +111928,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65617 "reason_parser.ml" +# 70521 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65623 "reason_parser.ml" +# 70527 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65629 "reason_parser.ml" +# 70533 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114639,9 +111973,9 @@ module Tables = struct let _3000 : 'tv_expr = Obj.magic _3000 in let _2000 : unit = Obj.magic _2000 in let _100000 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 65662 "reason_parser.ml" +# 70566 "reason_parser.ml" ) = Obj.magic _100000 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__100000_ in @@ -114673,9 +112007,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 65696 "reason_parser.ml" +# 70600 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -114683,15 +112017,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 65706 "reason_parser.ml" +# 70610 "reason_parser.ml" in -# 2600 "reason_parser.mly" +# 2808 "reason_parser.mly" ( mkexp(Pexp_setinstvar(_1, _3)) ) -# 65712 "reason_parser.ml" +# 70616 "reason_parser.ml" in let _endpos_x_ = _endpos__30_ in @@ -114699,21 +112033,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65722 "reason_parser.ml" +# 70626 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65728 "reason_parser.ml" +# 70632 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65734 "reason_parser.ml" +# 70638 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114765,15 +112099,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65788 "reason_parser.ml" +# 70692 "reason_parser.ml" in -# 2602 "reason_parser.mly" +# 2810 "reason_parser.mly" ( mkexp (Pexp_assert _2) ) -# 65794 "reason_parser.ml" +# 70698 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -114781,21 +112115,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65804 "reason_parser.ml" +# 70708 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65810 "reason_parser.ml" +# 70714 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65816 "reason_parser.ml" +# 70720 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114847,15 +112181,15 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 2790 "reason_parser.mly" +# 2998 "reason_parser.mly" ( mkexp_app_rev _startpos _endpos _1 ) -# 65870 "reason_parser.ml" +# 70774 "reason_parser.ml" in -# 2604 "reason_parser.mly" +# 2812 "reason_parser.mly" ( mkexp (Pexp_lazy _2) ) -# 65876 "reason_parser.ml" +# 70780 "reason_parser.ml" in let _endpos_x_ = _endpos__100_ in @@ -114863,21 +112197,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 65886 "reason_parser.ml" +# 70790 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 65892 "reason_parser.ml" +# 70796 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 65898 "reason_parser.ml" +# 70802 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -114958,7 +112292,7 @@ module Tables = struct let _2 = _20 in let _1 = _10 in -# 2630 "reason_parser.mly" +# 2838 "reason_parser.mly" ( (* Should use ghost expressions, but not sure how that would work with source maps *) (* So ? will become true and : becomes false for now*) let loc_question = mklocation _startpos__2_ _endpos__2_ in @@ -114971,7 +112305,7 @@ module Tables = struct let fauxMatchCaseFalse = Exp.case fauxFalsePat _5 in mkexp (Pexp_match (_1, [fauxMatchCaseTrue; fauxMatchCaseFalse])) ) -# 65992 "reason_parser.ml" +# 70896 "reason_parser.ml" in let _endpos_x_ = _endpos__50_ in @@ -114979,21 +112313,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4352 "reason_parser.mly" +# 4667 "reason_parser.mly" ( {x with pexp_loc = {x.pexp_loc with loc_start = _symbolstartpos; loc_end = _endpos}} ) -# 66002 "reason_parser.ml" +# 70906 "reason_parser.ml" in -# 2642 "reason_parser.mly" +# 2850 "reason_parser.mly" (_1) -# 66008 "reason_parser.ml" +# 70912 "reason_parser.ml" in -# 2660 "reason_parser.mly" +# 2868 "reason_parser.mly" ( _1 ) -# 66014 "reason_parser.ml" +# 70918 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115016,13 +112350,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 1209 "reason_parser.mly" +# 1329 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase list) -# 66039 "reason_parser.ml" +# 70943 "reason_parser.ml" ) = -# 1267 "reason_parser.mly" +# 1387 "reason_parser.mly" (apply_mapper_to_use_file _1 reason_mapper ) -# 66043 "reason_parser.ml" +# 70947 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115041,17 +112375,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66064 "reason_parser.ml" +# 70968 "reason_parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_val_ident = -# 4039 "reason_parser.mly" +# 4353 "reason_parser.mly" ( _1 ) -# 66072 "reason_parser.ml" +# 70976 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115086,9 +112420,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_val_ident = -# 4040 "reason_parser.mly" +# 4354 "reason_parser.mly" ( _2 ) -# 66109 "reason_parser.ml" +# 71013 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115111,9 +112445,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_val_longident = -# 4092 "reason_parser.mly" +# 4406 "reason_parser.mly" ( Lident _1 ) -# 66134 "reason_parser.ml" +# 71038 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115148,9 +112482,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_val_longident = -# 4093 "reason_parser.mly" +# 4407 "reason_parser.mly" ( Ldot(_1, _3) ) -# 66171 "reason_parser.ml" +# 71075 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115196,9 +112530,9 @@ module Tables = struct let _10 : 'tv_core_type = Obj.magic _10 in let _5 : unit = Obj.magic _5 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66219 "reason_parser.ml" +# 71123 "reason_parser.ml" ) = Obj.magic _100 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in @@ -115213,9 +112547,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66236 "reason_parser.ml" +# 71140 "reason_parser.ml" in let _endpos__6_ = _endpos__10_ in @@ -115226,9 +112560,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66249 "reason_parser.ml" +# 71153 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -115236,9 +112570,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66259 "reason_parser.ml" +# 71163 "reason_parser.ml" in let _endpos = _endpos__6_ in @@ -115247,12 +112581,12 @@ module Tables = struct else _startpos__2_ in -# 1918 "reason_parser.mly" +# 2052 "reason_parser.mly" ( if _1 = Override then not_expecting _symbolstartpos _endpos "members marked virtual may not also be marked overridden" else (_4, Mutable, Cfk_virtual _6) ) -# 66273 "reason_parser.ml" +# 71177 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115304,9 +112638,9 @@ module Tables = struct let _11 : 'tv_core_type = Obj.magic _11 in let _5 : unit = Obj.magic _5 in let _10 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66327 "reason_parser.ml" +# 71231 "reason_parser.ml" ) = Obj.magic _10 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in @@ -115321,23 +112655,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66344 "reason_parser.ml" +# 71248 "reason_parser.ml" in let _4 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66352 "reason_parser.ml" +# 71256 "reason_parser.ml" in -# 1923 "reason_parser.mly" +# 2057 "reason_parser.mly" ( not_expecting _startpos__7_ _endpos__7_ "not expecting equal - cannot specify value for virtual val" ) -# 66358 "reason_parser.ml" +# 71262 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115378,9 +112712,9 @@ module Tables = struct let _10 : 'tv_core_type = Obj.magic _10 in let _4 : unit = Obj.magic _4 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66401 "reason_parser.ml" +# 71305 "reason_parser.ml" ) = Obj.magic _100 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -115394,9 +112728,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66417 "reason_parser.ml" +# 71321 "reason_parser.ml" in let _3 = @@ -115406,9 +112740,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66429 "reason_parser.ml" +# 71333 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -115416,15 +112750,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66439 "reason_parser.ml" +# 71343 "reason_parser.ml" in -# 1925 "reason_parser.mly" +# 2059 "reason_parser.mly" ( (_3, _2, Cfk_virtual _5) ) -# 66445 "reason_parser.ml" +# 71349 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115471,9 +112805,9 @@ module Tables = struct let _5 : 'tv_core_type = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let _10 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66494 "reason_parser.ml" +# 71398 "reason_parser.ml" ) = Obj.magic _10 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -115483,15 +112817,15 @@ module Tables = struct let _v : 'tv_value = let _3 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66506 "reason_parser.ml" +# 71410 "reason_parser.ml" in -# 1927 "reason_parser.mly" +# 2061 "reason_parser.mly" ( not_expecting _startpos__6_ _endpos__6_ "not expecting equal - cannot specify value for virtual val" ) -# 66512 "reason_parser.ml" +# 71416 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115532,9 +112866,9 @@ module Tables = struct let _5 : 'tv_expr = Obj.magic _5 in let _4 : unit = Obj.magic _4 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66555 "reason_parser.ml" +# 71459 "reason_parser.ml" ) = Obj.magic _100 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _1 : 'tv_override_flag = Obj.magic _1 in @@ -115548,9 +112882,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66571 "reason_parser.ml" +# 71475 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -115558,15 +112892,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66581 "reason_parser.ml" +# 71485 "reason_parser.ml" in -# 1929 "reason_parser.mly" +# 2063 "reason_parser.mly" ( (_3, _2, Cfk_concrete (_1, _5)) ) -# 66587 "reason_parser.ml" +# 71491 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115613,9 +112947,9 @@ module Tables = struct let _5 : unit = Obj.magic _5 in let _4 : 'tv_type_constraint = Obj.magic _4 in let _100 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66636 "reason_parser.ml" +# 71540 "reason_parser.ml" ) = Obj.magic _100 in let _2 : 'tv_mutable_flag = Obj.magic _2 in let _1 : 'tv_override_flag = Obj.magic _1 in @@ -115629,9 +112963,9 @@ module Tables = struct let x = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66652 "reason_parser.ml" +# 71556 "reason_parser.ml" in let _endpos_x_ = _endpos__10_ in @@ -115639,9 +112973,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66662 "reason_parser.ml" +# 71566 "reason_parser.ml" in let _startpos__3_ = _startpos__100_ in @@ -115654,11 +112988,11 @@ module Tables = struct else _startpos__3_ in -# 1931 "reason_parser.mly" +# 2065 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let e = ghexp_constraint loc _6 _4 in (_3, _2, Cfk_concrete (_1, e)) ) -# 66679 "reason_parser.ml" +# 71583 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115694,9 +113028,9 @@ module Tables = struct let _11 : 'tv_core_type = Obj.magic _11 in let _3 : unit = Obj.magic _3 in let _10 : ( -# 1011 "reason_parser.mly" +# 1131 "reason_parser.mly" (string) -# 66717 "reason_parser.ml" +# 71621 "reason_parser.ml" ) = Obj.magic _10 in let _1 : 'tv_mutable_or_virtual_flags = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -115709,23 +113043,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66732 "reason_parser.ml" +# 71636 "reason_parser.ml" in let _2 = let _1 = _10 in -# 4187 "reason_parser.mly" +# 4501 "reason_parser.mly" ( _1 ) -# 66740 "reason_parser.ml" +# 71644 "reason_parser.ml" in -# 2148 "reason_parser.mly" +# 2291 "reason_parser.mly" ( let (mut, virt) = _1 in (_2, mut, virt, _4) ) -# 66746 "reason_parser.ml" +# 71650 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115741,9 +113075,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_virtual_flag = -# 4215 "reason_parser.mly" +# 4529 "reason_parser.mly" ( Concrete ) -# 66764 "reason_parser.ml" +# 71668 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115766,9 +113100,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_virtual_flag = -# 4216 "reason_parser.mly" +# 4530 "reason_parser.mly" ( Virtual ) -# 66789 "reason_parser.ml" +# 71693 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115814,7 +113148,7 @@ module Tables = struct let _11 : 'tv_core_type = Obj.magic _11 in let _5 : 'tv_embedded_private_flag_ = Obj.magic _5 in let _4 : unit = Obj.magic _4 in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : 'tv_label_longident = Obj.magic x0 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -115822,9 +113156,9 @@ module Tables = struct let _endpos = _endpos__11_ in let _v : 'tv_with_constraint = let _7 = -# 3474 "reason_parser.mly" +# 3756 "reason_parser.mly" ( [] ) -# 66845 "reason_parser.ml" +# 71749 "reason_parser.ml" in let _endpos__7_ = _endpos__11_ in @@ -115835,17 +113169,17 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66858 "reason_parser.ml" +# 71762 "reason_parser.ml" in let _3 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 66866 "reason_parser.ml" +# 71770 "reason_parser.ml" in let _2 = @@ -115855,21 +113189,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66878 "reason_parser.ml" +# 71782 "reason_parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 3674 "reason_parser.mly" +# 3972 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let typ = Type.mk {_2 with txt=Longident.last _2.txt} ~params:_3 ~cstrs:_7 ~manifest:_6 ~priv:_5 ~loc in Pwith_type (_2, typ) ) -# 66890 "reason_parser.ml" +# 71794 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -115921,7 +113255,7 @@ module Tables = struct let _11 : 'tv_core_type = Obj.magic _11 in let _5 : 'tv_embedded_private_flag_ = Obj.magic _5 in let _4 : unit = Obj.magic _4 in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : 'tv_label_longident = Obj.magic x0 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -115930,9 +113264,9 @@ module Tables = struct let _v : 'tv_with_constraint = let _7 = let _1 = _12 in -# 3475 "reason_parser.mly" +# 3757 "reason_parser.mly" ( _1 ) -# 66953 "reason_parser.ml" +# 71857 "reason_parser.ml" in let _endpos__7_ = _endpos__12_ in @@ -115943,17 +113277,17 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 66966 "reason_parser.ml" +# 71870 "reason_parser.ml" in let _3 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 66974 "reason_parser.ml" +# 71878 "reason_parser.ml" in let _2 = @@ -115963,21 +113297,21 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 66986 "reason_parser.ml" +# 71890 "reason_parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in -# 3674 "reason_parser.mly" +# 3972 "reason_parser.mly" ( let loc = mklocation _symbolstartpos _endpos in let typ = Type.mk {_2 with txt=Longident.last _2.txt} ~params:_3 ~cstrs:_7 ~manifest:_6 ~priv:_5 ~loc in Pwith_type (_2, typ) ) -# 66998 "reason_parser.ml" +# 71902 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -116017,7 +113351,7 @@ module Tables = struct } = _menhir_stack in let _11 : 'tv_core_type = Obj.magic _11 in let _4 : unit = Obj.magic _4 in - let _10 : 'tv_loption_parenthesized_separated_nonempty_list_COMMA_type_variable_with_variance___ = Obj.magic _10 in + let _10 : 'tv_loption_parenthesized_type_variables_with_variance_comma_list__ = Obj.magic _10 in let x0 : 'tv_label_longident = Obj.magic x0 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -116030,18 +113364,18 @@ module Tables = struct let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in -# 4337 "reason_parser.mly" +# 4652 "reason_parser.mly" ( only_core_type _1 _symbolstartpos _endpos ) -# 67053 "reason_parser.ml" +# 71957 "reason_parser.ml" in let _endpos__5_ = _endpos__11_ in let _3 = let _1 = _10 in -# 3496 "reason_parser.mly" +# 3782 "reason_parser.mly" ( _1 ) -# 67062 "reason_parser.ml" +# 71966 "reason_parser.ml" in let _2 = @@ -116051,9 +113385,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 67074 "reason_parser.ml" +# 71978 "reason_parser.ml" in let _endpos__2_ = _endpos_x0_ in @@ -116061,7 +113395,7 @@ module Tables = struct let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in -# 3683 "reason_parser.mly" +# 3981 "reason_parser.mly" ( let last = match _2.txt with | Lident s -> s | _ -> not_expecting _startpos__2_ _endpos__2_ "Long type identifier" @@ -116069,7 +113403,7 @@ module Tables = struct let loc = mklocation _symbolstartpos _endpos in Pwith_typesubst (Type.mk {_2 with txt=last} ~params:_3 ~manifest:_5 ~loc) ) -# 67090 "reason_parser.ml" +# 71994 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -116116,9 +113450,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 67139 "reason_parser.ml" +# 72043 "reason_parser.ml" in let _2 = @@ -116128,15 +113462,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 67151 "reason_parser.ml" +# 72055 "reason_parser.ml" in -# 3691 "reason_parser.mly" +# 3989 "reason_parser.mly" ( Pwith_module (_2, _4) ) -# 67157 "reason_parser.ml" +# 72061 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -116172,9 +113506,9 @@ module Tables = struct let x1 : 'tv_mod_ext_longident = Obj.magic x1 in let _3 : unit = Obj.magic _3 in let x0 : ( -# 1057 "reason_parser.mly" +# 1177 "reason_parser.mly" (string) -# 67195 "reason_parser.ml" +# 72099 "reason_parser.ml" ) = Obj.magic x0 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -116187,9 +113521,9 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 67210 "reason_parser.ml" +# 72114 "reason_parser.ml" in let _2 = @@ -116199,15 +113533,15 @@ module Tables = struct let _endpos = _endpos_x_ in let _symbolstartpos = _startpos_x_ in -# 4393 "reason_parser.mly" +# 4708 "reason_parser.mly" ( mkloc x (mklocation _symbolstartpos _endpos) ) -# 67222 "reason_parser.ml" +# 72126 "reason_parser.ml" in -# 3693 "reason_parser.mly" +# 3991 "reason_parser.mly" ( Pwith_modsubst (_2, _4) ) -# 67228 "reason_parser.ml" +# 72132 "reason_parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -116235,139 +113569,140 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3773 lexer lexbuf) : ( -# 1209 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 4068 lexer lexbuf) : ( +# 1329 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase list) -# 67259 "reason_parser.ml" +# 72163 "reason_parser.ml" )) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3498 lexer lexbuf) : ( -# 1207 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 3753 lexer lexbuf) : ( +# 1327 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase) -# 67267 "reason_parser.ml" +# 72171 "reason_parser.ml" )) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3494 lexer lexbuf) : ( -# 1215 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 3749 lexer lexbuf) : ( +# 1335 "reason_parser.mly" (Ast_404.Parsetree.pattern) -# 67275 "reason_parser.ml" +# 72179 "reason_parser.ml" )) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3490 lexer lexbuf) : ( -# 1213 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 3745 lexer lexbuf) : ( +# 1333 "reason_parser.mly" (Ast_404.Parsetree.expression) -# 67283 "reason_parser.ml" +# 72187 "reason_parser.ml" )) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3486 lexer lexbuf) : ( -# 1211 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 3741 lexer lexbuf) : ( +# 1331 "reason_parser.mly" (Ast_404.Parsetree.core_type) -# 67291 "reason_parser.ml" +# 72195 "reason_parser.ml" )) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 3482 lexer lexbuf) : ( -# 1205 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.entry 3737 lexer lexbuf) : ( +# 1325 "reason_parser.mly" (Ast_404.Parsetree.signature) -# 67299 "reason_parser.ml" +# 72203 "reason_parser.ml" )) and implementation = fun lexer lexbuf -> (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( -# 1203 "reason_parser.mly" +# 1323 "reason_parser.mly" (Ast_404.Parsetree.structure) -# 67307 "reason_parser.ml" +# 72211 "reason_parser.ml" )) module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3773 initial_position) : ( -# 1209 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 4068 initial_position) : ( +# 1329 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase list) -# 67317 "reason_parser.ml" +# 72221 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3498 initial_position) : ( -# 1207 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 3753 initial_position) : ( +# 1327 "reason_parser.mly" (Ast_404.Parsetree.toplevel_phrase) -# 67325 "reason_parser.ml" +# 72229 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3494 initial_position) : ( -# 1215 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 3749 initial_position) : ( +# 1335 "reason_parser.mly" (Ast_404.Parsetree.pattern) -# 67333 "reason_parser.ml" +# 72237 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3490 initial_position) : ( -# 1213 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 3745 initial_position) : ( +# 1333 "reason_parser.mly" (Ast_404.Parsetree.expression) -# 67341 "reason_parser.ml" +# 72245 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3486 initial_position) : ( -# 1211 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 3741 initial_position) : ( +# 1331 "reason_parser.mly" (Ast_404.Parsetree.core_type) -# 67349 "reason_parser.ml" +# 72253 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 3482 initial_position) : ( -# 1205 "reason_parser.mly" + (Obj.magic (MenhirInterpreter.start 3737 initial_position) : ( +# 1325 "reason_parser.mly" (Ast_404.Parsetree.signature) -# 67357 "reason_parser.ml" +# 72261 "reason_parser.ml" ) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> (Obj.magic (MenhirInterpreter.start 0 initial_position) : ( -# 1203 "reason_parser.mly" +# 1323 "reason_parser.mly" (Ast_404.Parsetree.structure) -# 67365 "reason_parser.ml" +# 72269 "reason_parser.ml" ) MenhirInterpreter.checkpoint) end -# 4431 "reason_parser.mly" +# 4746 "reason_parser.mly" -# 67373 "reason_parser.ml" +# 72277 "reason_parser.ml" # 219 "/Users/chenglou/.opam/4.02.3/lib/menhir/standard.mly" -# 67379 "reason_parser.ml" +# 72283 "reason_parser.ml" end module Reason_lexer = struct #1 "reason_lexer.ml" -# 70 "src/reason-parser/reason_lexer.mll" +# 68 "src/reason-parser/reason_lexer.mll" open Lexing open Reason_parser +open Lexer_warning type error = | Illegal_character of char @@ -116494,7 +113829,7 @@ let set_lexeme_length buf n = ( ) (* This cut comment characters of the current buffer. - * Operators (including "/*" and "//") are lexed with the same rule, and this + * Operators (including "/*" and "*/") are lexed with the same rule, and this * function cuts the lexeme at the beginning of an operator. *) let lexeme_without_comment buf = ( let lexeme = Lexing.lexeme buf in @@ -116502,7 +113837,7 @@ let lexeme_without_comment buf = ( let found = ref (-1) in while !i < len && !found = -1 do begin match lexeme.[!i], lexeme.[!i+1] with - | ('/', '*') | ('/', '/') | ('*', '/') -> + | ('/', '*') | ('*', '/') -> found := !i; | _ -> () end; @@ -116610,47 +113945,6 @@ let update_loc lexbuf file line absolute chars = let preprocessor = ref None -(* Warn about Latin-1 characters used in idents *) -(* - You may likely use these utilities to make the Reason parser compatible with - all versions of OCaml (including 4.06). They are obtained from the master OCaml - branch. - - The warning_printer should be exposed (not sure if exposed in all supported OCaml versions though). - - let print_updating_num_loc_lines ppf f arg = - let open Format in - let out_functions = pp_get_formatter_out_functions ppf () in - let out_string str start len = - let rec count i c = - if i = start + len then c - else if String.get str i = '\n' then count (succ i) (succ c) - else count (succ i) c in - num_loc_lines := !num_loc_lines + count start 0 ; - out_functions.out_string str start len in - pp_set_formatter_out_functions ppf - { out_functions with out_string } ; - f ppf arg ; - pp_print_flush ppf (); - pp_set_formatter_out_functions ppf out_functions - - let print_warning loc ppf w = - print_updating_num_loc_lines ppf (!warning_printer loc) w - ;; - - let prerr_warning loc w = print_warning loc !formatter_for_warnings w;; - - let deprecated ?(def = none) ?(use = none) loc msg = - prerr_warning loc (Warnings.Deprecated (msg, def, use)) - -*) - - -let warn_latin1 lexbuf = - Location.prerr_warning (Location.curr lexbuf) - (Warnings.Deprecated "ISO-Latin1 characters in identifiers") -;; - (* Error report *) open Format @@ -116698,11 +113992,11 @@ let set_lexeme_length buf n = ( ) -# 336 "src/reason-parser/reason_lexer.ml" +# 296 "src/reason-parser/reason_lexer.ml" let __ocaml_lex_tables = { Lexing.lex_base = - "\000\000\158\255\159\255\224\000\003\001\038\001\073\001\108\001\ - \143\001\178\001\192\255\213\001\248\001\199\255\091\000\059\002\ + "\000\000\156\255\157\255\224\000\003\001\038\001\073\001\108\001\ + \143\001\178\001\191\255\213\001\248\001\198\255\091\000\059\002\ \068\000\071\000\084\000\151\002\220\255\186\002\222\255\223\255\ \225\255\221\002\060\003\012\001\090\003\238\255\174\003\002\004\ \086\004\038\005\246\005\198\006\165\007\200\007\235\007\063\008\ @@ -116711,96 +114005,96 @@ let __ocaml_lex_tables = { \112\010\095\000\096\000\097\000\006\000\174\010\246\255\103\000\ \008\011\100\011\135\011\144\004\165\011\249\011\077\012\161\012\ \245\012\073\013\157\013\241\013\069\014\153\014\237\014\108\000\ - \065\015\149\015\233\015\061\016\145\016\118\000\197\255\237\255\ - \058\003\236\016\107\000\108\000\007\000\236\255\235\255\231\255\ - \010\002\128\000\109\000\234\255\151\002\110\000\233\255\238\002\ - \113\000\232\255\152\005\162\005\005\017\144\000\046\017\081\017\ - \228\255\011\000\012\000\008\001\024\001\016\000\228\255\017\000\ - \116\017\151\017\186\017\141\000\214\255\210\255\211\255\212\255\ - \208\255\221\017\000\018\067\018\151\018\241\018\018\019\200\255\ - \108\019\143\019\151\000\186\255\202\255\203\255\129\000\188\255\ - \184\255\194\255\178\019\213\019\191\255\024\020\056\006\116\020\ - \151\020\189\255\188\020\223\020\002\021\037\021\072\021\216\000\ - \233\000\107\021\040\001\005\001\142\021\012\001\070\001\250\255\ - \143\000\205\000\030\001\252\255\046\001\253\255\222\000\251\255\ - \066\007\243\255\244\255\018\000\245\255\253\001\091\008\253\255\ - \218\000\231\000\255\255\254\255\252\255\119\008\189\021\237\000\ - \240\000\111\001\251\255\250\255\249\255\017\007\077\003\244\000\ - \248\255\087\003\252\000\247\255\018\018\004\001\246\255\112\001\ - \217\002\247\255\248\255\249\255\113\001\222\021\255\255\250\255\ - \231\019\219\004\253\255\046\001\129\001\139\001\124\005\252\255\ - \039\022\251\255\146\001\220\001\252\255\047\022\254\255\255\255\ - \147\001\148\001\253\255\076\022\009\001\020\001\047\001\069\001\ - \035\001\093\001\034\001\013\000\255\255"; + \065\015\149\015\233\015\061\016\145\016\118\000\096\005\237\255\ + \058\003\229\016\064\017\107\000\108\000\007\000\236\255\235\255\ + \231\255\010\002\128\000\109\000\234\255\151\002\110\000\233\255\ + \238\002\113\000\232\255\104\006\114\006\089\017\144\000\130\017\ + \165\017\228\255\011\000\012\000\008\001\024\001\016\000\228\255\ + \017\000\200\017\235\017\014\018\141\000\214\255\210\255\211\255\ + \212\255\208\255\049\018\084\018\151\018\235\018\069\019\102\019\ + \199\255\192\019\227\019\151\000\184\255\202\255\203\255\129\000\ + \187\255\182\255\193\255\006\020\073\020\190\255\008\007\165\020\ + \121\008\001\021\036\021\188\255\073\021\108\021\143\021\178\021\ + \213\021\216\000\233\000\248\021\040\001\005\001\027\022\012\001\ + \070\001\250\255\143\000\205\000\030\001\252\255\046\001\253\255\ + \222\000\251\255\124\018\243\255\244\255\018\000\245\255\253\001\ + \025\022\253\255\218\000\231\000\255\255\254\255\252\255\057\022\ + \148\022\237\000\240\000\111\001\251\255\250\255\249\255\024\020\ + \077\003\244\000\248\255\087\003\252\000\247\255\182\022\004\001\ + \246\255\112\001\217\002\247\255\248\255\249\255\113\001\253\022\ + \255\255\250\255\031\023\219\004\253\255\046\001\129\001\139\001\ + \171\005\252\255\070\023\251\255\146\001\220\001\252\255\078\023\ + \254\255\255\255\147\001\148\001\253\255\107\023\009\001\020\001\ + \047\001\069\001\035\001\093\001\034\001\013\000\255\255"; Lexing.lex_backtrk = - "\255\255\255\255\255\255\093\000\088\000\087\000\086\000\077\000\ - \072\000\094\000\255\255\062\000\059\000\255\255\050\000\048\000\ - \046\000\042\000\039\000\080\000\255\255\034\000\255\255\255\255\ - \255\255\028\000\038\000\031\000\057\000\255\255\012\000\012\000\ + "\255\255\255\255\255\255\095\000\090\000\089\000\088\000\079\000\ + \074\000\096\000\255\255\063\000\060\000\255\255\050\000\048\000\ + \046\000\042\000\039\000\082\000\255\255\034\000\255\255\255\255\ + \255\255\028\000\038\000\031\000\058\000\255\255\012\000\012\000\ \011\000\010\000\008\000\007\000\049\000\005\000\004\000\003\000\ - \002\000\255\255\097\000\097\000\094\000\094\000\090\000\255\255\ - \255\255\255\255\255\255\085\000\255\255\075\000\076\000\255\255\ - \092\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \086\000\037\000\006\000\065\000\016\000\016\000\014\000\013\000\ + \002\000\255\255\099\000\099\000\096\000\096\000\092\000\255\255\ + \255\255\255\255\255\255\087\000\255\255\077\000\078\000\255\255\ + \094\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \088\000\037\000\006\000\066\000\016\000\016\000\014\000\013\000\ \016\000\013\000\013\000\012\000\014\000\013\000\014\000\255\255\ - \015\000\015\000\012\000\012\000\014\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \024\000\024\000\024\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\026\000\255\255\026\000\025\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \029\000\081\000\036\000\040\000\255\255\255\255\255\255\255\255\ - \255\255\086\000\082\000\086\000\054\000\083\000\255\255\255\255\ - \086\000\084\000\070\000\255\255\255\255\255\255\051\000\255\255\ - \255\255\255\255\060\000\086\000\255\255\086\000\068\000\091\000\ - \094\000\255\255\073\000\074\000\089\000\079\000\078\000\255\255\ - \255\255\088\000\255\255\255\255\095\000\255\255\255\255\255\255\ - \005\000\005\000\000\000\255\255\001\000\255\255\000\000\255\255\ - \255\255\255\255\255\255\012\000\255\255\012\000\012\000\255\255\ - \012\000\012\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \015\000\015\000\012\000\012\000\014\000\255\255\059\000\255\255\ + \255\255\055\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\024\000\024\000\024\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\026\000\255\255\026\000\ + \025\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\029\000\083\000\036\000\040\000\255\255\255\255\255\255\ + \255\255\255\255\088\000\084\000\088\000\054\000\085\000\255\255\ + \255\255\088\000\086\000\072\000\255\255\255\255\255\255\051\000\ + \255\255\255\255\255\255\061\000\088\000\255\255\070\000\088\000\ + \069\000\093\000\096\000\255\255\075\000\076\000\091\000\081\000\ + \080\000\255\255\255\255\090\000\255\255\255\255\097\000\255\255\ + \255\255\255\255\005\000\005\000\000\000\255\255\001\000\255\255\ + \000\000\255\255\255\255\255\255\255\255\012\000\255\255\012\000\ + \012\000\255\255\012\000\012\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\008\000\008\000\255\255\255\255\ - \005\000\005\000\255\255\001\000\005\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\003\000\255\255\255\255\ - \003\000\255\255\255\255\255\255\002\000\255\255\255\255\001\000\ - \255\255\255\255\255\255\255\255\255\255"; + \255\255\255\255\255\255\255\255\255\255\255\255\008\000\008\000\ + \255\255\255\255\005\000\005\000\255\255\001\000\005\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\000\ + \255\255\255\255\003\000\255\255\255\255\255\255\002\000\255\255\ + \255\255\001\000\255\255\255\255\255\255\255\255\255\255"; Lexing.lex_default = "\001\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\000\000\255\255\255\255\000\000\255\255\255\255\ \255\255\255\255\255\255\255\255\000\000\255\255\000\000\000\000\ - \000\000\255\255\255\255\090\000\255\255\000\000\255\255\255\255\ + \000\000\255\255\255\255\091\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\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\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\000\000\000\000\ - \255\255\095\000\255\255\255\255\255\255\000\000\000\000\000\000\ - \255\255\255\255\255\255\000\000\255\255\255\255\000\000\255\255\ - \255\255\000\000\114\000\255\255\255\255\255\255\255\255\255\255\ - \000\000\255\255\114\000\115\000\114\000\117\000\000\000\255\255\ - \255\255\255\255\255\255\255\255\000\000\000\000\000\000\000\000\ - \000\000\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\000\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ + \255\255\255\255\096\000\255\255\255\255\255\255\000\000\000\000\ + \000\000\255\255\255\255\255\255\000\000\255\255\255\255\000\000\ + \255\255\255\255\000\000\115\000\255\255\255\255\255\255\255\255\ + \255\255\000\000\255\255\115\000\116\000\115\000\118\000\000\000\ + \255\255\255\255\255\255\255\255\255\255\000\000\000\000\000\000\ + \000\000\000\000\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\ + \000\000\000\000\000\000\255\255\255\255\000\000\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\ + \169\000\000\000\255\255\255\255\255\255\000\000\255\255\000\000\ + \255\255\000\000\179\000\000\000\000\000\255\255\000\000\193\000\ + \255\255\000\000\255\255\255\255\000\000\000\000\000\000\255\255\ + \255\255\255\255\255\255\255\255\000\000\000\000\000\000\255\255\ + \255\255\255\255\000\000\255\255\255\255\000\000\255\255\255\255\ + \000\000\255\255\211\000\000\000\000\000\000\000\255\255\217\000\ \000\000\000\000\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\255\255\255\255\255\255\255\255\255\255\167\000\000\000\ - \255\255\255\255\255\255\000\000\255\255\000\000\255\255\000\000\ - \177\000\000\000\000\000\255\255\000\000\191\000\255\255\000\000\ - \255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\ - \255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\ - \000\000\255\255\255\255\000\000\255\255\255\255\000\000\255\255\ - \209\000\000\000\000\000\000\000\255\255\215\000\000\000\000\000\ - \255\255\255\255\000\000\255\255\255\255\255\255\255\255\000\000\ - \255\255\000\000\255\255\228\000\000\000\255\255\000\000\000\000\ - \255\255\255\255\000\000\255\255\255\255\255\255\238\000\241\000\ - \255\255\241\000\255\255\255\255\000\000"; + \255\255\000\000\255\255\000\000\255\255\230\000\000\000\255\255\ + \000\000\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ + \240\000\243\000\255\255\243\000\255\255\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\040\000\041\000\041\000\040\000\042\000\060\000\049\000\ - \041\000\091\000\050\000\060\000\092\000\112\000\112\000\244\000\ - \113\000\113\000\118\000\118\000\178\000\119\000\119\000\207\000\ + \041\000\092\000\050\000\060\000\093\000\113\000\113\000\246\000\ + \114\000\114\000\119\000\119\000\180\000\120\000\120\000\209\000\ \040\000\008\000\029\000\026\000\006\000\003\000\025\000\027\000\ \023\000\022\000\021\000\007\000\020\000\019\000\018\000\009\000\ \031\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ @@ -116812,115 +114106,115 @@ let __ocaml_lex_tables = { \024\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\028\000\012\000\010\000\038\000\128\000\ - \138\000\127\000\123\000\040\000\126\000\125\000\040\000\051\000\ + \035\000\035\000\035\000\028\000\012\000\010\000\038\000\129\000\ + \139\000\128\000\124\000\040\000\127\000\126\000\040\000\051\000\ \046\000\056\000\056\000\044\000\051\000\046\000\044\000\056\000\ - \044\000\006\000\094\000\093\000\099\000\102\000\006\000\141\000\ - \105\000\140\000\040\000\139\000\078\000\078\000\078\000\078\000\ + \044\000\006\000\095\000\094\000\100\000\103\000\006\000\142\000\ + \106\000\141\000\040\000\140\000\078\000\078\000\078\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\084\000\084\000\ \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ - \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\ - \100\000\100\000\108\000\124\000\144\000\143\000\175\000\108\000\ + \101\000\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ + \101\000\101\000\109\000\125\000\145\000\144\000\177\000\109\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\142\000\ + \032\000\032\000\032\000\032\000\032\000\032\000\032\000\143\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\034\000\170\000\ + \034\000\034\000\034\000\034\000\034\000\034\000\034\000\172\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \002\000\164\000\156\000\164\000\164\000\164\000\164\000\156\000\ - \174\000\187\000\164\000\164\000\255\255\164\000\164\000\164\000\ - \255\255\186\000\112\000\005\000\196\000\113\000\091\000\195\000\ - \005\000\092\000\164\000\200\000\164\000\164\000\164\000\164\000\ - \164\000\116\000\112\000\203\000\161\000\113\000\161\000\161\000\ - \161\000\161\000\117\000\206\000\237\000\161\000\161\000\161\000\ - \161\000\161\000\161\000\255\255\161\000\238\000\164\000\219\000\ - \116\000\239\000\115\000\164\000\165\000\161\000\164\000\161\000\ - \161\000\161\000\161\000\161\000\242\000\243\000\000\000\005\000\ - \172\000\005\000\005\000\005\000\005\000\171\000\219\000\240\000\ - \005\000\005\000\161\000\005\000\005\000\005\000\161\000\161\000\ - \174\000\000\000\000\000\000\000\164\000\173\000\164\000\162\000\ - \005\000\161\000\005\000\005\000\005\000\005\000\005\000\240\000\ - \089\000\000\000\006\000\000\000\006\000\006\000\006\000\006\000\ - \168\000\000\000\000\000\006\000\006\000\169\000\006\000\006\000\ - \006\000\192\000\178\000\211\000\193\000\207\000\226\000\161\000\ - \000\000\161\000\160\000\006\000\005\000\006\000\006\000\006\000\ - \006\000\006\000\000\000\219\000\000\000\046\000\221\000\046\000\ - \046\000\046\000\046\000\000\000\000\000\219\000\046\000\156\000\ - \221\000\046\000\158\000\046\000\211\000\231\000\231\000\226\000\ - \233\000\233\000\005\000\000\000\005\000\063\000\046\000\006\000\ - \046\000\157\000\046\000\046\000\046\000\000\000\000\000\000\000\ + \002\000\166\000\158\000\166\000\166\000\166\000\166\000\158\000\ + \176\000\189\000\166\000\166\000\255\255\166\000\166\000\166\000\ + \255\255\188\000\113\000\005\000\198\000\114\000\092\000\197\000\ + \005\000\093\000\166\000\202\000\166\000\166\000\166\000\166\000\ + \166\000\117\000\113\000\205\000\163\000\114\000\163\000\163\000\ + \163\000\163\000\118\000\208\000\239\000\163\000\163\000\163\000\ + \163\000\163\000\163\000\255\255\163\000\240\000\166\000\221\000\ + \117\000\241\000\116\000\166\000\167\000\163\000\166\000\163\000\ + \163\000\163\000\163\000\163\000\244\000\245\000\000\000\005\000\ + \174\000\005\000\005\000\005\000\005\000\173\000\221\000\242\000\ + \005\000\005\000\163\000\005\000\005\000\005\000\163\000\163\000\ + \176\000\000\000\000\000\000\000\166\000\175\000\166\000\164\000\ + \005\000\163\000\005\000\005\000\005\000\005\000\005\000\242\000\ + \090\000\000\000\006\000\000\000\006\000\006\000\006\000\006\000\ + \170\000\000\000\000\000\006\000\006\000\171\000\006\000\006\000\ + \006\000\194\000\180\000\213\000\195\000\209\000\228\000\163\000\ + \000\000\163\000\162\000\006\000\005\000\006\000\006\000\006\000\ + \006\000\006\000\000\000\221\000\000\000\046\000\223\000\046\000\ + \046\000\046\000\046\000\000\000\000\000\221\000\046\000\158\000\ + \223\000\046\000\160\000\046\000\213\000\233\000\233\000\228\000\ + \235\000\235\000\005\000\000\000\005\000\063\000\046\000\006\000\ + \046\000\159\000\046\000\046\000\046\000\000\000\000\000\000\000\ \051\000\000\000\051\000\051\000\051\000\051\000\000\000\000\000\ \000\000\051\000\051\000\000\000\051\000\051\000\051\000\000\000\ \000\000\000\000\000\000\000\000\000\000\006\000\000\000\006\000\ - \055\000\051\000\046\000\051\000\154\000\051\000\051\000\051\000\ + \055\000\051\000\046\000\051\000\156\000\051\000\051\000\051\000\ \000\000\000\000\000\000\044\000\000\000\044\000\044\000\044\000\ \044\000\000\000\000\000\000\000\044\000\044\000\000\000\044\000\ - \044\000\044\000\000\000\000\000\000\000\000\000\231\000\000\000\ - \046\000\232\000\046\000\052\000\044\000\051\000\044\000\044\000\ - \151\000\044\000\044\000\000\000\000\000\000\000\006\000\000\000\ + \044\000\044\000\000\000\000\000\000\000\000\000\233\000\000\000\ + \046\000\234\000\046\000\052\000\044\000\051\000\044\000\044\000\ + \153\000\044\000\044\000\000\000\000\000\000\000\006\000\000\000\ \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ - \006\000\000\000\006\000\006\000\006\000\000\000\000\000\192\000\ - \255\255\000\000\193\000\051\000\255\255\051\000\059\000\006\000\ - \044\000\147\000\006\000\006\000\006\000\006\000\000\000\000\000\ + \006\000\000\000\006\000\006\000\006\000\000\000\000\000\194\000\ + \255\255\000\000\195\000\051\000\255\255\051\000\059\000\006\000\ + \044\000\148\000\006\000\006\000\006\000\006\000\000\000\000\000\ \255\255\006\000\000\000\006\000\006\000\006\000\006\000\000\000\ - \000\000\000\000\006\000\006\000\194\000\006\000\006\000\006\000\ + \000\000\000\000\006\000\006\000\196\000\006\000\006\000\006\000\ \000\000\000\000\000\000\000\000\000\000\000\000\044\000\255\255\ \044\000\063\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\000\000\103\000\103\000\103\000\103\000\103\000\103\000\ - \103\000\103\000\103\000\103\000\000\000\255\255\255\255\000\000\ - \000\000\000\000\000\000\103\000\103\000\103\000\103\000\103\000\ - \103\000\006\000\148\000\006\000\063\000\145\000\006\000\000\000\ - \229\000\190\000\000\000\000\000\006\000\255\255\006\000\006\000\ + \006\000\000\000\104\000\104\000\104\000\104\000\104\000\104\000\ + \104\000\104\000\104\000\104\000\000\000\255\255\255\255\000\000\ + \000\000\000\000\000\000\104\000\104\000\104\000\104\000\104\000\ + \104\000\006\000\149\000\006\000\063\000\146\000\006\000\000\000\ + \231\000\192\000\000\000\000\000\006\000\255\255\006\000\006\000\ \006\000\006\000\000\000\000\000\000\000\006\000\006\000\000\000\ - \006\000\129\000\131\000\103\000\103\000\103\000\103\000\103\000\ - \103\000\000\000\000\000\000\000\146\000\006\000\006\000\006\000\ - \006\000\130\000\006\000\006\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\000\000\063\000\ - \000\000\006\000\132\000\000\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\000\000\006\000\ + \006\000\130\000\132\000\104\000\104\000\104\000\104\000\104\000\ + \104\000\000\000\000\000\000\000\147\000\006\000\006\000\006\000\ + \006\000\131\000\006\000\006\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\000\000\063\000\ + \000\000\006\000\133\000\000\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\000\000\006\000\ \046\000\006\000\046\000\046\000\046\000\046\000\000\000\000\000\ - \000\000\046\000\046\000\000\000\046\000\121\000\046\000\101\000\ - \101\000\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ - \101\000\046\000\000\000\046\000\046\000\122\000\046\000\046\000\ - \000\000\000\000\000\000\044\000\230\000\044\000\044\000\044\000\ - \044\000\000\000\000\000\211\000\056\000\044\000\212\000\044\000\ + \000\000\046\000\046\000\000\000\046\000\122\000\046\000\102\000\ + \102\000\102\000\102\000\102\000\102\000\102\000\102\000\102\000\ + \102\000\046\000\000\000\046\000\046\000\123\000\046\000\046\000\ + \000\000\000\000\000\000\044\000\232\000\044\000\044\000\044\000\ + \044\000\000\000\000\000\213\000\056\000\044\000\214\000\044\000\ \044\000\044\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\055\000\044\000\046\000\044\000\044\000\ - \044\000\044\000\044\000\214\000\000\000\255\255\006\000\000\000\ - \006\000\006\000\006\000\120\000\000\000\000\000\000\000\006\000\ + \044\000\044\000\044\000\216\000\000\000\255\255\006\000\000\000\ + \006\000\006\000\006\000\121\000\000\000\000\000\000\000\006\000\ \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ \000\000\000\000\000\000\046\000\000\000\046\000\057\000\006\000\ - \044\000\006\000\006\000\006\000\006\000\006\000\104\000\104\000\ - \104\000\104\000\104\000\104\000\104\000\104\000\104\000\104\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\104\000\ - \104\000\104\000\104\000\104\000\104\000\213\000\044\000\000\000\ + \044\000\006\000\006\000\006\000\006\000\006\000\105\000\105\000\ + \105\000\105\000\105\000\105\000\105\000\105\000\105\000\105\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\105\000\ + \105\000\105\000\105\000\105\000\105\000\215\000\044\000\000\000\ \044\000\063\000\000\000\006\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\107\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\104\000\ - \104\000\104\000\104\000\104\000\104\000\000\000\000\000\000\000\ - \000\000\006\000\000\000\006\000\107\000\108\000\000\000\108\000\ - \108\000\108\000\108\000\000\000\000\000\000\000\108\000\108\000\ - \000\000\108\000\108\000\108\000\106\000\106\000\106\000\106\000\ - \106\000\106\000\106\000\106\000\106\000\106\000\108\000\000\000\ - \108\000\110\000\108\000\108\000\108\000\201\000\201\000\201\000\ - \201\000\201\000\201\000\201\000\201\000\201\000\201\000\202\000\ - \202\000\202\000\202\000\202\000\202\000\202\000\202\000\202\000\ - \202\000\000\000\000\000\000\000\000\000\000\000\086\000\000\000\ - \109\000\088\000\108\000\088\000\088\000\088\000\088\000\088\000\ + \000\000\000\000\000\000\000\000\000\000\108\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\105\000\ + \105\000\105\000\105\000\105\000\105\000\000\000\000\000\000\000\ + \000\000\006\000\000\000\006\000\108\000\109\000\000\000\109\000\ + \109\000\109\000\109\000\000\000\000\000\000\000\109\000\109\000\ + \000\000\109\000\109\000\109\000\107\000\107\000\107\000\107\000\ + \107\000\107\000\107\000\107\000\107\000\107\000\109\000\000\000\ + \109\000\111\000\109\000\109\000\109\000\203\000\203\000\203\000\ + \203\000\203\000\203\000\203\000\203\000\203\000\203\000\204\000\ + \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ + \204\000\000\000\000\000\000\000\000\000\000\000\086\000\000\000\ + \110\000\088\000\109\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\000\000\087\000\000\000\ - \108\000\088\000\108\000\088\000\088\000\088\000\088\000\088\000\ + \109\000\088\000\109\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\068\000\087\000\000\000\ - \000\000\210\000\000\000\000\000\070\000\000\000\030\000\030\000\ + \000\000\212\000\000\000\000\000\070\000\000\000\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\ \068\000\068\000\068\000\069\000\068\000\071\000\071\000\071\000\ @@ -116958,8 +114252,8 @@ let __ocaml_lex_tables = { \000\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ - \067\000\067\000\067\000\222\000\222\000\222\000\222\000\222\000\ - \222\000\222\000\222\000\222\000\222\000\000\000\032\000\032\000\ + \067\000\067\000\067\000\224\000\224\000\224\000\224\000\224\000\ + \224\000\224\000\224\000\224\000\224\000\000\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\ @@ -116977,15 +114271,15 @@ let __ocaml_lex_tables = { \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \033\000\116\000\112\000\000\000\000\000\113\000\000\000\000\000\ - \000\000\000\000\000\000\107\000\223\000\223\000\223\000\223\000\ - \223\000\223\000\223\000\223\000\223\000\223\000\000\000\000\000\ - \116\000\000\000\115\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\107\000\000\000\000\000\000\000\000\000\000\000\ - \106\000\106\000\106\000\106\000\106\000\106\000\106\000\106\000\ - \106\000\106\000\106\000\106\000\106\000\106\000\106\000\106\000\ - \106\000\106\000\106\000\106\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\032\000\032\000\ + \033\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\000\000\000\000\000\000\000\000\089\000\ + \000\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\225\000\225\000\225\000\225\000\225\000\ + \225\000\225\000\225\000\225\000\225\000\000\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\000\000\032\000\032\000\ @@ -117003,15 +114297,15 @@ let __ocaml_lex_tables = { \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\000\000\000\000\000\000\000\000\150\000\ - \255\255\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\000\000\000\000\000\000\034\000\034\000\ + \034\000\117\000\113\000\000\000\000\000\114\000\000\000\000\000\ + \000\000\000\000\000\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\ + \117\000\000\000\116\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\108\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\000\000\034\000\034\000\ @@ -117029,22 +114323,22 @@ let __ocaml_lex_tables = { \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\000\000\178\000\000\000\000\000\179\000\ - \000\000\000\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\ - \000\000\181\000\000\000\000\000\184\000\000\000\000\000\000\000\ - \000\000\185\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\034\000\034\000\ + \035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\000\000\000\000\000\000\000\000\150\000\ + \255\255\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\000\000\000\000\000\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\000\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\182\000\034\000\034\000\ + \034\000\034\000\034\000\034\000\034\000\000\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\006\000\000\000\ \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ @@ -117061,7 +114355,7 @@ let __ocaml_lex_tables = { \051\000\051\000\051\000\051\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\180\000\000\000\051\000\000\000\051\000\052\000\ + \000\000\000\000\000\000\000\000\051\000\000\000\051\000\052\000\ \000\000\051\000\061\000\000\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ @@ -117076,14 +114370,14 @@ let __ocaml_lex_tables = { \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\189\000\000\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\188\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\000\000\188\000\000\000\000\000\000\000\000\000\ + \035\000\035\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\000\000\000\000\000\000\000\000\ + \152\000\000\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ @@ -117342,196 +114636,229 @@ let __ocaml_lex_tables = { \084\000\000\000\068\000\068\000\068\000\068\000\068\000\068\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ - \080\000\080\000\080\000\080\000\098\000\000\000\098\000\000\000\ - \000\000\000\000\000\000\098\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\097\000\097\000\097\000\097\000\ - \097\000\097\000\097\000\097\000\097\000\097\000\108\000\000\000\ - \108\000\108\000\108\000\108\000\000\000\000\000\000\000\108\000\ - \108\000\000\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\108\000\ - \000\000\108\000\108\000\108\000\108\000\108\000\000\000\000\000\ - \098\000\000\000\000\000\000\000\000\000\000\000\098\000\108\000\ - \000\000\108\000\108\000\108\000\108\000\000\000\000\000\000\000\ - \108\000\108\000\098\000\108\000\108\000\108\000\098\000\000\000\ - \098\000\109\000\000\000\108\000\096\000\000\000\000\000\000\000\ - \108\000\000\000\111\000\108\000\108\000\108\000\108\000\000\000\ - \000\000\000\000\108\000\000\000\108\000\108\000\108\000\108\000\ - \000\000\000\000\000\000\108\000\108\000\000\000\108\000\108\000\ - \108\000\108\000\000\000\108\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\109\000\108\000\108\000\108\000\108\000\108\000\ - \108\000\108\000\000\000\000\000\000\000\006\000\000\000\006\000\ - \006\000\006\000\006\000\000\000\000\000\000\000\006\000\006\000\ - \000\000\006\000\006\000\006\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\108\000\000\000\108\000\109\000\006\000\108\000\ - \006\000\006\000\006\000\006\000\006\000\000\000\000\000\000\000\ - \046\000\000\000\046\000\046\000\046\000\046\000\000\000\000\000\ - \000\000\046\000\046\000\000\000\046\000\046\000\046\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\108\000\000\000\108\000\ - \063\000\046\000\006\000\046\000\046\000\046\000\046\000\046\000\ - \000\000\000\000\000\000\046\000\000\000\046\000\046\000\046\000\ - \046\000\000\000\000\000\000\000\046\000\046\000\000\000\046\000\ - \046\000\046\000\000\000\000\000\255\255\000\000\000\000\000\000\ - \006\000\000\000\006\000\055\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\000\000\000\000\000\000\006\000\000\000\ - \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ - \006\000\000\000\006\000\136\000\006\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\046\000\000\000\046\000\055\000\006\000\ - \046\000\006\000\006\000\006\000\006\000\006\000\000\000\000\000\ + \080\000\080\000\080\000\080\000\089\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\089\000\000\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \000\000\000\000\000\000\000\000\089\000\000\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \099\000\000\000\099\000\000\000\000\000\000\000\000\000\099\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \098\000\098\000\098\000\098\000\098\000\098\000\098\000\098\000\ + \098\000\098\000\109\000\000\000\109\000\109\000\109\000\109\000\ + \000\000\000\000\000\000\109\000\109\000\000\000\109\000\109\000\ + \109\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\109\000\109\000\109\000\ + \109\000\109\000\000\000\000\000\099\000\000\000\000\000\000\000\ + \000\000\000\000\099\000\109\000\000\000\109\000\109\000\109\000\ + \109\000\000\000\000\000\000\000\109\000\109\000\099\000\109\000\ + \109\000\109\000\099\000\000\000\099\000\110\000\000\000\109\000\ + \097\000\000\000\000\000\000\000\109\000\000\000\112\000\109\000\ + \109\000\109\000\109\000\000\000\000\000\000\000\109\000\000\000\ + \109\000\109\000\109\000\109\000\000\000\000\000\000\000\109\000\ + \109\000\000\000\109\000\109\000\109\000\109\000\000\000\109\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\110\000\109\000\ + \109\000\109\000\109\000\109\000\109\000\109\000\000\000\000\000\ \000\000\006\000\000\000\006\000\006\000\006\000\006\000\000\000\ \000\000\000\000\006\000\006\000\000\000\006\000\006\000\006\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\046\000\000\000\ - \046\000\063\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\000\000\205\000\205\000\205\000\205\000\205\000\205\000\ - \205\000\205\000\205\000\205\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\205\000\205\000\205\000\205\000\205\000\ - \205\000\006\000\000\000\006\000\063\000\000\000\006\000\000\000\ - \000\000\000\000\000\000\000\000\006\000\000\000\006\000\006\000\ - \006\000\006\000\000\000\000\000\000\000\006\000\006\000\000\000\ - \006\000\006\000\006\000\205\000\205\000\205\000\205\000\205\000\ - \205\000\000\000\000\000\000\000\006\000\006\000\006\000\006\000\ - \006\000\133\000\006\000\006\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\000\000\063\000\ - \000\000\006\000\134\000\000\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\132\000\006\000\ - \000\000\006\000\000\000\000\000\000\000\132\000\000\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\000\000\000\000\000\000\000\000\132\000\000\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\006\000\000\000\006\000\006\000\006\000\006\000\ - \000\000\000\000\000\000\006\000\006\000\000\000\006\000\006\000\ - \006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\006\000\000\000\006\000\006\000\006\000\ - \006\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \134\000\000\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\000\000\063\000\000\000\006\000\ - \135\000\000\000\000\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\006\000\000\000\006\000\ - \000\000\134\000\000\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\006\000\000\000\006\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\109\000\000\000\ + \109\000\110\000\006\000\109\000\006\000\006\000\006\000\006\000\ + \006\000\000\000\000\000\000\000\046\000\000\000\046\000\046\000\ + \046\000\046\000\000\000\000\000\000\000\046\000\046\000\000\000\ + \046\000\046\000\046\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\109\000\000\000\109\000\063\000\046\000\006\000\046\000\ + \046\000\046\000\046\000\046\000\000\000\000\000\000\000\046\000\ + \000\000\046\000\046\000\046\000\046\000\000\000\000\000\000\000\ + \046\000\046\000\000\000\046\000\046\000\046\000\000\000\000\000\ + \255\255\000\000\000\000\000\000\006\000\000\000\006\000\055\000\ + \046\000\046\000\046\000\046\000\046\000\046\000\046\000\000\000\ + \000\000\000\000\006\000\000\000\006\000\006\000\006\000\006\000\ + \000\000\000\000\000\000\006\000\006\000\000\000\006\000\137\000\ + \006\000\000\000\000\000\000\000\000\000\000\000\000\000\046\000\ + \000\000\046\000\055\000\006\000\046\000\006\000\006\000\006\000\ + \006\000\006\000\000\000\000\000\000\000\006\000\000\000\006\000\ \006\000\006\000\006\000\000\000\000\000\000\000\006\000\006\000\ - \000\000\006\000\006\000\006\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\ - \006\000\006\000\137\000\006\000\006\000\000\000\000\000\000\000\ + \000\000\006\000\006\000\006\000\000\000\000\000\180\000\000\000\ + \000\000\181\000\046\000\000\000\046\000\063\000\006\000\006\000\ + \006\000\006\000\006\000\006\000\006\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\ + \000\000\000\000\000\000\183\000\000\000\000\000\186\000\000\000\ + \000\000\000\000\000\000\187\000\000\000\006\000\000\000\006\000\ + \063\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\ \006\000\000\000\006\000\006\000\006\000\006\000\000\000\000\000\ \000\000\006\000\006\000\000\000\006\000\006\000\006\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \063\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \000\000\000\000\000\000\006\000\000\000\006\000\006\000\006\000\ - \006\000\000\000\000\000\000\000\006\000\006\000\000\000\006\000\ - \006\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \006\000\000\000\006\000\063\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\000\000\000\000\000\000\006\000\000\000\ + \006\000\006\000\006\000\006\000\006\000\134\000\006\000\006\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\000\000\063\000\000\000\006\000\135\000\184\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\133\000\006\000\000\000\006\000\000\000\000\000\ + \000\000\133\000\000\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\000\000\000\000\ + \000\000\000\000\133\000\000\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\006\000\000\000\ \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ - \006\000\000\000\006\000\006\000\149\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\006\000\000\000\006\000\063\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\000\000\224\000\ - \224\000\224\000\224\000\224\000\224\000\224\000\224\000\224\000\ - \224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \224\000\224\000\224\000\224\000\224\000\224\000\006\000\000\000\ - \006\000\063\000\000\000\006\000\000\000\000\000\000\000\000\000\ - \000\000\006\000\000\000\006\000\006\000\006\000\006\000\000\000\ + \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\182\000\000\000\000\000\006\000\ + \000\000\006\000\006\000\006\000\006\000\006\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\135\000\000\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \000\000\063\000\000\000\006\000\136\000\000\000\000\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\006\000\000\000\006\000\000\000\135\000\000\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\006\000\000\000\006\000\006\000\006\000\006\000\000\000\ \000\000\000\000\006\000\006\000\000\000\006\000\006\000\006\000\ - \224\000\224\000\224\000\224\000\224\000\224\000\000\000\000\000\ - \000\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\006\000\000\000\006\000\006\000\138\000\006\000\ + \006\000\000\000\000\000\000\000\006\000\000\000\006\000\006\000\ + \006\000\006\000\000\000\000\000\000\000\006\000\006\000\000\000\ + \006\000\006\000\006\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\063\000\006\000\006\000\006\000\ + \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ + \000\000\006\000\006\000\006\000\006\000\000\000\000\000\000\000\ + \006\000\006\000\000\000\006\000\006\000\006\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\006\000\000\000\006\000\063\000\ + \006\000\006\000\006\000\006\000\006\000\006\000\006\000\000\000\ + \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\ + \206\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\206\000\206\000\206\000\206\000\206\000\206\000\006\000\ + \000\000\006\000\063\000\000\000\006\000\000\000\000\000\000\000\ + \000\000\000\000\006\000\000\000\006\000\006\000\006\000\006\000\ + \000\000\000\000\000\000\006\000\006\000\000\000\006\000\006\000\ + \151\000\206\000\206\000\206\000\206\000\206\000\206\000\000\000\ + \000\000\000\000\006\000\006\000\006\000\006\000\006\000\006\000\ + \006\000\006\000\150\000\150\000\150\000\150\000\150\000\150\000\ \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\000\000\063\000\000\000\006\000\150\000\ - \000\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\000\000\063\000\000\000\006\000\ + \150\000\000\000\150\000\150\000\150\000\150\000\150\000\150\000\ \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\000\000\006\000\044\000\006\000\044\000\ + \150\000\150\000\150\000\150\000\000\000\006\000\006\000\006\000\ + \006\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ + \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\ + \000\000\006\000\006\000\006\000\006\000\006\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \000\000\063\000\000\000\006\000\152\000\000\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \000\000\006\000\044\000\006\000\044\000\044\000\044\000\044\000\ + \000\000\000\000\000\000\044\000\044\000\000\000\044\000\044\000\ + \044\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\044\000\000\000\044\000\044\000\044\000\ + \044\000\044\000\000\000\000\000\000\000\044\000\000\000\044\000\ \044\000\044\000\044\000\000\000\000\000\000\000\044\000\044\000\ \000\000\044\000\044\000\044\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\044\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\059\000\044\000\044\000\ \044\000\044\000\044\000\044\000\044\000\000\000\000\000\000\000\ - \044\000\000\000\044\000\044\000\044\000\044\000\000\000\000\000\ - \000\000\044\000\044\000\000\000\044\000\044\000\044\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \059\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \000\000\000\000\000\000\000\000\000\000\051\000\000\000\051\000\ + \000\000\000\000\051\000\000\000\051\000\051\000\051\000\051\000\ + \000\000\000\000\000\000\051\000\051\000\000\000\051\000\051\000\ + \051\000\000\000\000\000\000\000\000\000\154\000\000\000\044\000\ + \059\000\155\000\044\000\051\000\000\000\051\000\157\000\051\000\ + \051\000\051\000\000\000\000\000\000\000\051\000\000\000\051\000\ \051\000\051\000\051\000\000\000\000\000\000\000\051\000\051\000\ \000\000\051\000\051\000\051\000\000\000\000\000\000\000\000\000\ - \152\000\000\000\044\000\059\000\153\000\044\000\051\000\000\000\ - \051\000\155\000\051\000\051\000\051\000\000\000\000\000\000\000\ - \051\000\000\000\051\000\051\000\051\000\051\000\000\000\000\000\ - \000\000\051\000\051\000\000\000\051\000\051\000\051\000\000\000\ - \000\000\000\000\000\000\044\000\000\000\044\000\000\000\000\000\ - \052\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \000\000\000\000\000\000\156\000\000\000\156\000\156\000\156\000\ - \156\000\000\000\000\000\000\000\156\000\156\000\000\000\156\000\ - \156\000\156\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \051\000\000\000\051\000\052\000\156\000\051\000\156\000\156\000\ - \156\000\156\000\156\000\000\000\000\000\000\000\046\000\000\000\ + \044\000\000\000\044\000\000\000\000\000\052\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\000\000\000\000\000\000\ + \158\000\000\000\158\000\158\000\158\000\158\000\000\000\000\000\ + \000\000\158\000\158\000\000\000\158\000\158\000\158\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\051\000\000\000\051\000\ + \052\000\158\000\051\000\158\000\158\000\158\000\158\000\158\000\ + \000\000\000\000\000\000\046\000\000\000\046\000\046\000\046\000\ + \046\000\000\000\000\000\000\000\046\000\046\000\000\000\046\000\ + \046\000\046\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \051\000\000\000\051\000\161\000\046\000\158\000\046\000\046\000\ + \046\000\046\000\046\000\000\000\000\000\000\000\046\000\000\000\ \046\000\046\000\046\000\046\000\000\000\000\000\000\000\046\000\ \046\000\000\000\046\000\046\000\046\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\051\000\000\000\051\000\159\000\046\000\ - \156\000\046\000\046\000\046\000\046\000\046\000\000\000\000\000\ - \000\000\046\000\000\000\046\000\046\000\046\000\046\000\000\000\ - \000\000\000\000\046\000\046\000\000\000\046\000\046\000\046\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\156\000\000\000\ - \156\000\055\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\000\000\000\000\000\000\161\000\000\000\161\000\161\000\ - \161\000\161\000\000\000\000\000\000\000\161\000\161\000\000\000\ - \161\000\161\000\161\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\046\000\000\000\046\000\055\000\161\000\046\000\161\000\ - \161\000\161\000\161\000\161\000\000\000\000\000\000\000\164\000\ - \000\000\164\000\164\000\164\000\164\000\000\000\000\000\000\000\ - \164\000\164\000\000\000\164\000\164\000\164\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\046\000\000\000\046\000\163\000\ - \164\000\161\000\164\000\164\000\164\000\164\000\164\000\000\000\ + \000\000\000\000\000\000\158\000\000\000\158\000\055\000\046\000\ + \046\000\046\000\046\000\046\000\046\000\046\000\000\000\000\000\ + \000\000\163\000\000\000\163\000\163\000\163\000\163\000\000\000\ + \000\000\000\000\163\000\163\000\000\000\163\000\163\000\163\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\046\000\000\000\ + \046\000\055\000\163\000\046\000\163\000\163\000\163\000\163\000\ + \163\000\000\000\000\000\000\000\166\000\000\000\166\000\166\000\ + \166\000\166\000\000\000\000\000\000\000\166\000\166\000\000\000\ + \166\000\166\000\166\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\046\000\000\000\046\000\165\000\166\000\163\000\166\000\ + \166\000\166\000\166\000\166\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\199\000\000\000\199\000\ - \000\000\000\000\000\000\000\000\199\000\000\000\000\000\161\000\ - \219\000\161\000\165\000\220\000\164\000\198\000\198\000\198\000\ - \198\000\198\000\198\000\198\000\198\000\198\000\198\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\218\000\000\000\ - \218\000\000\000\000\000\000\000\000\000\218\000\000\000\000\000\ - \000\000\000\000\164\000\000\000\164\000\000\000\217\000\217\000\ - \217\000\217\000\217\000\217\000\217\000\217\000\217\000\217\000\ - \000\000\199\000\000\000\000\000\000\000\000\000\000\000\199\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\199\000\000\000\000\000\000\000\199\000\ - \000\000\199\000\000\000\000\000\000\000\197\000\000\000\000\000\ - \000\000\000\000\218\000\000\000\000\000\000\000\000\000\000\000\ - \218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\218\000\000\000\000\000\000\000\ - \218\000\000\000\218\000\000\000\000\000\000\000\216\000\225\000\ - \225\000\225\000\225\000\225\000\225\000\225\000\225\000\225\000\ - \225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \225\000\225\000\225\000\225\000\225\000\225\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\163\000\000\000\163\000\167\000\ + \191\000\166\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\000\000\190\000\000\000\166\000\ + \191\000\166\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\201\000\190\000\201\000\000\000\ + \000\000\000\000\000\000\201\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\200\000\200\000\200\000\200\000\ + \200\000\200\000\200\000\200\000\200\000\200\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\207\000\207\000\ + \207\000\207\000\207\000\207\000\207\000\207\000\207\000\207\000\ + \201\000\000\000\000\000\000\000\000\000\000\000\201\000\207\000\ + \207\000\207\000\207\000\207\000\207\000\000\000\000\000\000\000\ + \000\000\000\000\201\000\000\000\000\000\000\000\201\000\221\000\ + \201\000\000\000\222\000\000\000\199\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\207\000\ + \207\000\207\000\207\000\207\000\207\000\220\000\000\000\220\000\ + \000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\219\000\219\000\219\000\ + \219\000\219\000\219\000\219\000\219\000\219\000\219\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \225\000\225\000\225\000\225\000\225\000\225\000\235\000\000\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\000\000\235\000\234\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\000\000\ - \000\000\234\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\255\255\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\ + \226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ + \226\000\220\000\000\000\000\000\000\000\000\000\000\000\220\000\ + \226\000\226\000\226\000\226\000\226\000\226\000\000\000\000\000\ + \000\000\000\000\000\000\220\000\000\000\000\000\000\000\220\000\ + \000\000\220\000\000\000\000\000\000\000\218\000\227\000\227\000\ + \227\000\227\000\227\000\227\000\227\000\227\000\227\000\227\000\ + \226\000\226\000\226\000\226\000\226\000\226\000\000\000\227\000\ + \227\000\227\000\227\000\227\000\227\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\227\000\ + \227\000\227\000\227\000\227\000\227\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\237\000\236\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\ + \236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ @@ -117542,12 +114869,15 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000"; + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \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_check = "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\000\000\042\000\000\000\000\000\042\000\050\000\ - \060\000\092\000\050\000\060\000\092\000\113\000\114\000\243\000\ - \113\000\114\000\117\000\119\000\179\000\117\000\119\000\179\000\ + \060\000\093\000\050\000\060\000\093\000\114\000\115\000\245\000\ + \114\000\115\000\118\000\120\000\181\000\118\000\120\000\181\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ @@ -117562,41 +114892,41 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\ \014\000\017\000\018\000\040\000\017\000\017\000\040\000\052\000\ \055\000\057\000\058\000\059\000\052\000\055\000\057\000\058\000\ - \059\000\063\000\090\000\091\000\098\000\101\000\063\000\014\000\ - \104\000\014\000\040\000\014\000\079\000\079\000\079\000\079\000\ + \059\000\063\000\091\000\092\000\099\000\102\000\063\000\014\000\ + \105\000\014\000\040\000\014\000\079\000\079\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\085\000\085\000\ \085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ - \097\000\097\000\097\000\097\000\097\000\097\000\097\000\097\000\ - \097\000\097\000\109\000\123\000\138\000\142\000\168\000\109\000\ + \098\000\098\000\098\000\098\000\098\000\098\000\098\000\098\000\ + \098\000\098\000\110\000\124\000\139\000\143\000\170\000\110\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\169\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\171\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\159\000\003\000\003\000\003\000\003\000\159\000\ - \174\000\184\000\003\000\003\000\114\000\003\000\003\000\003\000\ - \117\000\185\000\115\000\160\000\191\000\115\000\027\000\192\000\ - \160\000\027\000\003\000\199\000\003\000\003\000\003\000\003\000\ - \003\000\116\000\116\000\202\000\004\000\116\000\004\000\004\000\ - \004\000\004\000\115\000\205\000\236\000\004\000\004\000\163\000\ - \004\000\004\000\004\000\027\000\163\000\237\000\165\000\219\000\ - \116\000\238\000\116\000\165\000\003\000\004\000\003\000\004\000\ - \004\000\004\000\004\000\004\000\240\000\242\000\255\255\005\000\ - \170\000\005\000\005\000\005\000\005\000\170\000\219\000\239\000\ - \005\000\005\000\162\000\005\000\005\000\005\000\162\000\162\000\ - \172\000\255\255\255\255\255\255\003\000\172\000\003\000\004\000\ - \005\000\004\000\005\000\005\000\005\000\005\000\005\000\241\000\ + \000\000\003\000\161\000\003\000\003\000\003\000\003\000\161\000\ + \176\000\186\000\003\000\003\000\115\000\003\000\003\000\003\000\ + \118\000\187\000\116\000\162\000\193\000\116\000\027\000\194\000\ + \162\000\027\000\003\000\201\000\003\000\003\000\003\000\003\000\ + \003\000\117\000\117\000\204\000\004\000\117\000\004\000\004\000\ + \004\000\004\000\116\000\207\000\238\000\004\000\004\000\165\000\ + \004\000\004\000\004\000\027\000\165\000\239\000\167\000\221\000\ + \117\000\240\000\117\000\167\000\003\000\004\000\003\000\004\000\ + \004\000\004\000\004\000\004\000\242\000\244\000\255\255\005\000\ + \172\000\005\000\005\000\005\000\005\000\172\000\221\000\241\000\ + \005\000\005\000\164\000\005\000\005\000\005\000\164\000\164\000\ + \174\000\255\255\255\255\255\255\003\000\174\000\003\000\004\000\ + \005\000\004\000\005\000\005\000\005\000\005\000\005\000\243\000\ \027\000\255\255\006\000\255\255\006\000\006\000\006\000\006\000\ - \166\000\255\255\255\255\006\000\006\000\166\000\006\000\006\000\ - \006\000\193\000\207\000\212\000\193\000\207\000\212\000\004\000\ + \168\000\255\255\255\255\006\000\006\000\168\000\006\000\006\000\ + \006\000\195\000\209\000\214\000\195\000\209\000\214\000\004\000\ \255\255\004\000\005\000\006\000\005\000\006\000\006\000\006\000\ - \006\000\006\000\255\255\220\000\255\255\007\000\220\000\007\000\ - \007\000\007\000\007\000\255\255\255\255\221\000\007\000\007\000\ - \221\000\007\000\007\000\007\000\226\000\232\000\233\000\226\000\ - \232\000\233\000\005\000\255\255\005\000\006\000\007\000\006\000\ + \006\000\006\000\255\255\222\000\255\255\007\000\222\000\007\000\ + \007\000\007\000\007\000\255\255\255\255\223\000\007\000\007\000\ + \223\000\007\000\007\000\007\000\228\000\234\000\235\000\228\000\ + \234\000\235\000\005\000\255\255\005\000\006\000\007\000\006\000\ \007\000\007\000\007\000\007\000\007\000\255\255\255\255\255\255\ \008\000\255\255\008\000\008\000\008\000\008\000\255\255\255\255\ \255\255\008\000\008\000\255\255\008\000\008\000\008\000\255\255\ @@ -117604,25 +114934,25 @@ let __ocaml_lex_tables = { \007\000\008\000\007\000\008\000\008\000\008\000\008\000\008\000\ \255\255\255\255\255\255\009\000\255\255\009\000\009\000\009\000\ \009\000\255\255\255\255\255\255\009\000\009\000\255\255\009\000\ - \009\000\009\000\255\255\255\255\255\255\255\255\227\000\255\255\ - \007\000\227\000\007\000\008\000\009\000\008\000\009\000\009\000\ + \009\000\009\000\255\255\255\255\255\255\255\255\229\000\255\255\ + \007\000\229\000\007\000\008\000\009\000\008\000\009\000\009\000\ \009\000\009\000\009\000\255\255\255\255\255\255\011\000\255\255\ \011\000\011\000\011\000\011\000\255\255\255\255\255\255\011\000\ - \011\000\255\255\011\000\011\000\011\000\255\255\255\255\181\000\ - \115\000\255\255\181\000\008\000\027\000\008\000\009\000\011\000\ + \011\000\255\255\011\000\011\000\011\000\255\255\255\255\183\000\ + \116\000\255\255\183\000\008\000\027\000\008\000\009\000\011\000\ \009\000\011\000\011\000\011\000\011\000\011\000\255\255\255\255\ - \116\000\012\000\255\255\012\000\012\000\012\000\012\000\255\255\ - \255\255\255\255\012\000\012\000\181\000\012\000\012\000\012\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\009\000\238\000\ + \117\000\012\000\255\255\012\000\012\000\012\000\012\000\255\255\ + \255\255\255\255\012\000\012\000\183\000\012\000\012\000\012\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\009\000\240\000\ \009\000\011\000\012\000\011\000\012\000\012\000\012\000\012\000\ - \012\000\255\255\096\000\096\000\096\000\096\000\096\000\096\000\ - \096\000\096\000\096\000\096\000\255\255\239\000\166\000\255\255\ - \255\255\255\255\255\255\096\000\096\000\096\000\096\000\096\000\ - \096\000\011\000\011\000\011\000\012\000\012\000\012\000\255\255\ - \227\000\181\000\255\255\255\255\015\000\241\000\015\000\015\000\ + \012\000\255\255\097\000\097\000\097\000\097\000\097\000\097\000\ + \097\000\097\000\097\000\097\000\255\255\241\000\168\000\255\255\ + \255\255\255\255\255\255\097\000\097\000\097\000\097\000\097\000\ + \097\000\011\000\011\000\011\000\012\000\012\000\012\000\255\255\ + \229\000\183\000\255\255\255\255\015\000\243\000\015\000\015\000\ \015\000\015\000\255\255\255\255\255\255\015\000\015\000\255\255\ - \015\000\015\000\015\000\096\000\096\000\096\000\096\000\096\000\ - \096\000\255\255\255\255\255\255\012\000\015\000\012\000\015\000\ + \015\000\015\000\015\000\097\000\097\000\097\000\097\000\097\000\ + \097\000\255\255\255\255\255\255\012\000\015\000\012\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ @@ -117632,33 +114962,33 @@ let __ocaml_lex_tables = { \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\255\255\015\000\ \019\000\015\000\019\000\019\000\019\000\019\000\255\255\255\255\ - \255\255\019\000\019\000\255\255\019\000\019\000\019\000\100\000\ - \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\ - \100\000\019\000\255\255\019\000\019\000\019\000\019\000\019\000\ - \255\255\255\255\255\255\021\000\227\000\021\000\021\000\021\000\ - \021\000\255\255\255\255\208\000\021\000\021\000\208\000\021\000\ + \255\255\019\000\019\000\255\255\019\000\019\000\019\000\101\000\ + \101\000\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ + \101\000\019\000\255\255\019\000\019\000\019\000\019\000\019\000\ + \255\255\255\255\255\255\021\000\229\000\021\000\021\000\021\000\ + \021\000\255\255\255\255\210\000\021\000\021\000\210\000\021\000\ \021\000\021\000\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\019\000\021\000\019\000\021\000\021\000\ - \021\000\021\000\021\000\208\000\255\255\181\000\025\000\255\255\ + \021\000\021\000\021\000\210\000\255\255\183\000\025\000\255\255\ \025\000\025\000\025\000\025\000\255\255\255\255\255\255\025\000\ \025\000\255\255\025\000\025\000\025\000\255\255\255\255\255\255\ \255\255\255\255\255\255\019\000\255\255\019\000\021\000\025\000\ - \021\000\025\000\025\000\025\000\025\000\025\000\103\000\103\000\ - \103\000\103\000\103\000\103\000\103\000\103\000\103\000\103\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\103\000\ - \103\000\103\000\103\000\103\000\103\000\208\000\021\000\255\255\ + \021\000\025\000\025\000\025\000\025\000\025\000\104\000\104\000\ + \104\000\104\000\104\000\104\000\104\000\104\000\104\000\104\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\104\000\ + \104\000\104\000\104\000\104\000\104\000\210\000\021\000\255\255\ \021\000\025\000\255\255\025\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\026\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\103\000\ - \103\000\103\000\103\000\103\000\103\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\104\000\ + \104\000\104\000\104\000\104\000\104\000\255\255\255\255\255\255\ \255\255\025\000\255\255\025\000\026\000\026\000\255\255\026\000\ \026\000\026\000\026\000\255\255\255\255\255\255\026\000\026\000\ \255\255\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\255\255\ - \026\000\026\000\026\000\026\000\026\000\198\000\198\000\198\000\ - \198\000\198\000\198\000\198\000\198\000\198\000\198\000\201\000\ - \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\ - \201\000\255\255\255\255\255\255\255\255\255\255\028\000\255\255\ + \026\000\026\000\026\000\026\000\026\000\200\000\200\000\200\000\ + \200\000\200\000\200\000\200\000\200\000\200\000\200\000\203\000\ + \203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ + \203\000\255\255\255\255\255\255\255\255\255\255\028\000\255\255\ \026\000\088\000\026\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ @@ -117667,7 +114997,7 @@ let __ocaml_lex_tables = { \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\030\000\028\000\255\255\ - \255\255\208\000\255\255\255\255\030\000\255\255\030\000\030\000\ + \255\255\210\000\255\255\255\255\030\000\255\255\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ @@ -117705,8 +115035,8 @@ let __ocaml_lex_tables = { \255\255\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ - \067\000\067\000\067\000\217\000\217\000\217\000\217\000\217\000\ - \217\000\217\000\217\000\217\000\217\000\255\255\032\000\032\000\ + \067\000\067\000\067\000\219\000\219\000\219\000\219\000\219\000\ + \219\000\219\000\219\000\219\000\219\000\255\255\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\255\255\032\000\032\000\ @@ -117724,15 +115054,15 @@ let __ocaml_lex_tables = { \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \033\000\106\000\106\000\255\255\255\255\106\000\255\255\255\255\ - \255\255\255\255\255\255\107\000\222\000\222\000\222\000\222\000\ - \222\000\222\000\222\000\222\000\222\000\222\000\255\255\255\255\ - \106\000\255\255\106\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\107\000\255\255\255\255\255\255\255\255\255\255\ - \106\000\106\000\106\000\106\000\106\000\106\000\106\000\106\000\ - \106\000\106\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\ - \255\255\255\255\255\255\255\255\255\255\255\255\033\000\033\000\ + \033\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\255\255\255\255\255\255\255\255\086\000\ + \255\255\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\224\000\224\000\224\000\224\000\224\000\ + \224\000\224\000\224\000\224\000\224\000\255\255\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\255\255\033\000\033\000\ @@ -117750,15 +115080,15 @@ let __ocaml_lex_tables = { \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\255\255\255\255\255\255\255\255\150\000\ - \106\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\255\255\255\255\255\255\034\000\034\000\ + \034\000\107\000\107\000\255\255\255\255\107\000\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\ + \107\000\255\255\107\000\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\ + \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\ + \107\000\107\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\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\255\255\034\000\034\000\ @@ -117776,22 +115106,22 @@ let __ocaml_lex_tables = { \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\ - \197\000\197\000\197\000\255\255\176\000\255\255\255\255\176\000\ - \255\255\255\255\197\000\197\000\197\000\197\000\197\000\197\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\176\000\255\255\255\255\255\255\ - \255\255\176\000\255\255\255\255\176\000\255\255\255\255\255\255\ - \255\255\176\000\197\000\197\000\197\000\197\000\197\000\197\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\035\000\035\000\ + \035\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\255\255\255\255\255\255\255\255\150\000\ + \107\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ + \150\000\150\000\150\000\255\255\255\255\255\255\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\255\255\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\176\000\035\000\035\000\ + \035\000\035\000\035\000\035\000\035\000\255\255\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\036\000\255\255\ \036\000\036\000\036\000\036\000\255\255\255\255\255\255\036\000\ \036\000\255\255\036\000\036\000\036\000\255\255\255\255\255\255\ @@ -117808,7 +115138,7 @@ let __ocaml_lex_tables = { \038\000\038\000\038\000\038\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\176\000\255\255\037\000\255\255\037\000\038\000\ + \255\255\255\255\255\255\255\255\037\000\255\255\037\000\038\000\ \255\255\038\000\038\000\255\255\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ @@ -117823,14 +115153,14 @@ let __ocaml_lex_tables = { \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\182\000\255\255\182\000\182\000\182\000\182\000\ - \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ - \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\ - \182\000\182\000\182\000\182\000\182\000\182\000\189\000\182\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\000\189\000\ - \189\000\189\000\255\255\189\000\255\255\255\255\255\255\255\255\ + \039\000\039\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\255\255\255\255\255\255\255\255\ + \152\000\255\255\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\ + \152\000\152\000\152\000\152\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ @@ -118089,196 +115419,229 @@ let __ocaml_lex_tables = { \084\000\255\255\084\000\084\000\084\000\084\000\084\000\084\000\ \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ - \084\000\084\000\084\000\084\000\089\000\255\255\089\000\255\255\ - \255\255\255\255\255\255\089\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\089\000\089\000\089\000\089\000\ - \089\000\089\000\089\000\089\000\089\000\089\000\108\000\255\255\ - \108\000\108\000\108\000\108\000\255\255\255\255\255\255\108\000\ - \108\000\255\255\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\108\000\ - \255\255\108\000\108\000\108\000\108\000\108\000\255\255\255\255\ - \089\000\255\255\255\255\255\255\255\255\255\255\089\000\110\000\ - \255\255\110\000\110\000\110\000\110\000\255\255\255\255\255\255\ - \110\000\110\000\089\000\110\000\110\000\110\000\089\000\255\255\ - \089\000\108\000\255\255\108\000\089\000\255\255\255\255\255\255\ - \110\000\255\255\110\000\110\000\110\000\110\000\110\000\255\255\ - \255\255\255\255\111\000\255\255\111\000\111\000\111\000\111\000\ - \255\255\255\255\255\255\111\000\111\000\255\255\111\000\111\000\ - \111\000\108\000\255\255\108\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\110\000\111\000\110\000\111\000\111\000\111\000\ - \111\000\111\000\255\255\255\255\255\255\120\000\255\255\120\000\ - \120\000\120\000\120\000\255\255\255\255\255\255\120\000\120\000\ - \255\255\120\000\120\000\120\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\110\000\255\255\110\000\111\000\120\000\111\000\ - \120\000\120\000\120\000\120\000\120\000\255\255\255\255\255\255\ - \121\000\255\255\121\000\121\000\121\000\121\000\255\255\255\255\ - \255\255\121\000\121\000\255\255\121\000\121\000\121\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\111\000\255\255\111\000\ - \120\000\121\000\120\000\121\000\121\000\121\000\121\000\121\000\ - \255\255\255\255\255\255\122\000\255\255\122\000\122\000\122\000\ - \122\000\255\255\255\255\255\255\122\000\122\000\255\255\122\000\ - \122\000\122\000\255\255\255\255\089\000\255\255\255\255\255\255\ - \120\000\255\255\120\000\121\000\122\000\121\000\122\000\122\000\ - \122\000\122\000\122\000\255\255\255\255\255\255\129\000\255\255\ - \129\000\129\000\129\000\129\000\255\255\255\255\255\255\129\000\ - \129\000\255\255\129\000\129\000\129\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\121\000\255\255\121\000\122\000\129\000\ - \122\000\129\000\129\000\129\000\129\000\129\000\255\255\255\255\ - \255\255\130\000\255\255\130\000\130\000\130\000\130\000\255\255\ - \255\255\255\255\130\000\130\000\255\255\130\000\130\000\130\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\122\000\255\255\ - \122\000\129\000\130\000\129\000\130\000\130\000\130\000\130\000\ - \130\000\255\255\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\204\000\204\000\204\000\204\000\204\000\ - \204\000\129\000\255\255\129\000\130\000\255\255\130\000\255\255\ - \255\255\255\255\255\255\255\255\131\000\255\255\131\000\131\000\ - \131\000\131\000\255\255\255\255\255\255\131\000\131\000\255\255\ - \131\000\131\000\131\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\255\255\255\255\255\255\130\000\131\000\130\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\255\255\131\000\ - \255\255\131\000\131\000\255\255\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\ - \131\000\131\000\131\000\131\000\131\000\131\000\132\000\131\000\ - \255\255\131\000\255\255\255\255\255\255\132\000\255\255\132\000\ - \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \084\000\084\000\084\000\084\000\089\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\089\000\255\255\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \255\255\255\255\255\255\255\255\089\000\255\255\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ + \090\000\255\255\090\000\255\255\255\255\255\255\255\255\090\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ + \090\000\090\000\109\000\255\255\109\000\109\000\109\000\109\000\ + \255\255\255\255\255\255\109\000\109\000\255\255\109\000\109\000\ + \109\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\109\000\255\255\109\000\109\000\109\000\ + \109\000\109\000\255\255\255\255\090\000\255\255\255\255\255\255\ + \255\255\255\255\090\000\111\000\255\255\111\000\111\000\111\000\ + \111\000\255\255\255\255\255\255\111\000\111\000\090\000\111\000\ + \111\000\111\000\090\000\255\255\090\000\109\000\255\255\109\000\ + \090\000\255\255\255\255\255\255\111\000\255\255\111\000\111\000\ + \111\000\111\000\111\000\255\255\255\255\255\255\112\000\255\255\ + \112\000\112\000\112\000\112\000\255\255\255\255\255\255\112\000\ + \112\000\255\255\112\000\112\000\112\000\109\000\255\255\109\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\111\000\112\000\ + \111\000\112\000\112\000\112\000\112\000\112\000\255\255\255\255\ + \255\255\121\000\255\255\121\000\121\000\121\000\121\000\255\255\ + \255\255\255\255\121\000\121\000\255\255\121\000\121\000\121\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\111\000\255\255\ + \111\000\112\000\121\000\112\000\121\000\121\000\121\000\121\000\ + \121\000\255\255\255\255\255\255\122\000\255\255\122\000\122\000\ + \122\000\122\000\255\255\255\255\255\255\122\000\122\000\255\255\ + \122\000\122\000\122\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\112\000\255\255\112\000\121\000\122\000\121\000\122\000\ + \122\000\122\000\122\000\122\000\255\255\255\255\255\255\123\000\ + \255\255\123\000\123\000\123\000\123\000\255\255\255\255\255\255\ + \123\000\123\000\255\255\123\000\123\000\123\000\255\255\255\255\ + \090\000\255\255\255\255\255\255\121\000\255\255\121\000\122\000\ + \123\000\122\000\123\000\123\000\123\000\123\000\123\000\255\255\ + \255\255\255\255\130\000\255\255\130\000\130\000\130\000\130\000\ + \255\255\255\255\255\255\130\000\130\000\255\255\130\000\130\000\ + \130\000\255\255\255\255\255\255\255\255\255\255\255\255\122\000\ + \255\255\122\000\123\000\130\000\123\000\130\000\130\000\130\000\ + \130\000\130\000\255\255\255\255\255\255\131\000\255\255\131\000\ + \131\000\131\000\131\000\255\255\255\255\255\255\131\000\131\000\ + \255\255\131\000\131\000\131\000\255\255\255\255\178\000\255\255\ + \255\255\178\000\123\000\255\255\123\000\130\000\131\000\130\000\ + \131\000\131\000\131\000\131\000\131\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\178\000\255\255\ + \255\255\255\255\255\255\178\000\255\255\255\255\178\000\255\255\ + \255\255\255\255\255\255\178\000\255\255\130\000\255\255\130\000\ + \131\000\255\255\131\000\255\255\255\255\255\255\255\255\255\255\ + \132\000\255\255\132\000\132\000\132\000\132\000\255\255\255\255\ + \255\255\132\000\132\000\255\255\132\000\132\000\132\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \131\000\132\000\131\000\132\000\132\000\132\000\132\000\132\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\255\255\255\255\255\255\255\255\132\000\255\255\ + \132\000\132\000\255\255\132\000\255\255\132\000\132\000\178\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\ - \132\000\132\000\133\000\255\255\133\000\133\000\133\000\133\000\ - \255\255\255\255\255\255\133\000\133\000\255\255\133\000\133\000\ - \133\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\133\000\255\255\133\000\133\000\133\000\ - \133\000\133\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\134\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \134\000\255\255\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\255\255\133\000\255\255\133\000\ - \134\000\255\255\255\255\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\133\000\255\255\133\000\ - \255\255\134\000\255\255\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\ - \134\000\134\000\134\000\134\000\134\000\136\000\255\255\136\000\ - \136\000\136\000\136\000\255\255\255\255\255\255\136\000\136\000\ - \255\255\136\000\136\000\136\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\136\000\255\255\ - \136\000\136\000\136\000\136\000\136\000\255\255\255\255\255\255\ - \137\000\255\255\137\000\137\000\137\000\137\000\255\255\255\255\ - \255\255\137\000\137\000\255\255\137\000\137\000\137\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \136\000\137\000\136\000\137\000\137\000\137\000\137\000\137\000\ - \255\255\255\255\255\255\146\000\255\255\146\000\146\000\146\000\ - \146\000\255\255\255\255\255\255\146\000\146\000\255\255\146\000\ - \146\000\146\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \136\000\255\255\136\000\137\000\146\000\137\000\146\000\146\000\ - \146\000\146\000\146\000\255\255\255\255\255\255\147\000\255\255\ - \147\000\147\000\147\000\147\000\255\255\255\255\255\255\147\000\ - \147\000\255\255\147\000\147\000\147\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\137\000\255\255\137\000\146\000\147\000\ - \146\000\147\000\147\000\147\000\147\000\147\000\255\255\216\000\ - \216\000\216\000\216\000\216\000\216\000\216\000\216\000\216\000\ - \216\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \216\000\216\000\216\000\216\000\216\000\216\000\146\000\255\255\ - \146\000\147\000\255\255\147\000\255\255\255\255\255\255\255\255\ - \255\255\149\000\255\255\149\000\149\000\149\000\149\000\255\255\ - \255\255\255\255\149\000\149\000\255\255\149\000\149\000\149\000\ - \216\000\216\000\216\000\216\000\216\000\216\000\255\255\255\255\ - \255\255\147\000\149\000\147\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\255\255\149\000\255\255\149\000\149\000\ - \255\255\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\149\000\149\000\149\000\149\000\149\000\ - \149\000\149\000\149\000\255\255\149\000\151\000\149\000\151\000\ - \151\000\151\000\151\000\255\255\255\255\255\255\151\000\151\000\ - \255\255\151\000\151\000\151\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\151\000\255\255\ - \151\000\151\000\151\000\151\000\151\000\255\255\255\255\255\255\ - \152\000\255\255\152\000\152\000\152\000\152\000\255\255\255\255\ - \255\255\152\000\152\000\255\255\152\000\152\000\152\000\255\255\ + \132\000\132\000\133\000\132\000\255\255\132\000\255\255\255\255\ + \255\255\133\000\255\255\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\255\255\255\255\ + \255\255\255\255\133\000\255\255\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\133\000\133\000\ + \133\000\133\000\133\000\133\000\133\000\133\000\134\000\255\255\ + \134\000\134\000\134\000\134\000\255\255\255\255\255\255\134\000\ + \134\000\255\255\134\000\134\000\134\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\178\000\255\255\255\255\134\000\ + \255\255\134\000\134\000\134\000\134\000\134\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\135\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\135\000\255\255\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \255\255\134\000\255\255\134\000\135\000\255\255\255\255\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\134\000\255\255\134\000\255\255\135\000\255\255\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\ + \135\000\137\000\255\255\137\000\137\000\137\000\137\000\255\255\ + \255\255\255\255\137\000\137\000\255\255\137\000\137\000\137\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \151\000\152\000\151\000\152\000\152\000\152\000\152\000\152\000\ - \255\255\255\255\255\255\255\255\255\255\154\000\255\255\154\000\ + \255\255\255\255\137\000\255\255\137\000\137\000\137\000\137\000\ + \137\000\255\255\255\255\255\255\138\000\255\255\138\000\138\000\ + \138\000\138\000\255\255\255\255\255\255\138\000\138\000\255\255\ + \138\000\138\000\138\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\137\000\138\000\137\000\138\000\ + \138\000\138\000\138\000\138\000\255\255\255\255\255\255\147\000\ + \255\255\147\000\147\000\147\000\147\000\255\255\255\255\255\255\ + \147\000\147\000\255\255\147\000\147\000\147\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\137\000\255\255\137\000\138\000\ + \147\000\138\000\147\000\147\000\147\000\147\000\147\000\255\255\ + \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\ + \199\000\199\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\199\000\199\000\199\000\199\000\199\000\199\000\138\000\ + \255\255\138\000\147\000\255\255\147\000\255\255\255\255\255\255\ + \255\255\255\255\148\000\255\255\148\000\148\000\148\000\148\000\ + \255\255\255\255\255\255\148\000\148\000\255\255\148\000\148\000\ + \148\000\199\000\199\000\199\000\199\000\199\000\199\000\255\255\ + \255\255\255\255\147\000\148\000\147\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\255\255\148\000\255\255\148\000\ + \148\000\255\255\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\148\000\148\000\148\000\148\000\ + \148\000\148\000\148\000\148\000\255\255\148\000\151\000\148\000\ + \151\000\151\000\151\000\151\000\255\255\255\255\255\255\151\000\ + \151\000\255\255\151\000\151\000\151\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\151\000\ + \255\255\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \255\255\151\000\255\255\151\000\151\000\255\255\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \151\000\151\000\151\000\151\000\151\000\151\000\151\000\151\000\ + \255\255\151\000\153\000\151\000\153\000\153\000\153\000\153\000\ + \255\255\255\255\255\255\153\000\153\000\255\255\153\000\153\000\ + \153\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\153\000\255\255\153\000\153\000\153\000\ + \153\000\153\000\255\255\255\255\255\255\154\000\255\255\154\000\ \154\000\154\000\154\000\255\255\255\255\255\255\154\000\154\000\ \255\255\154\000\154\000\154\000\255\255\255\255\255\255\255\255\ - \151\000\255\255\151\000\152\000\152\000\152\000\154\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\153\000\154\000\153\000\ \154\000\154\000\154\000\154\000\154\000\255\255\255\255\255\255\ - \155\000\255\255\155\000\155\000\155\000\155\000\255\255\255\255\ - \255\255\155\000\155\000\255\255\155\000\155\000\155\000\255\255\ - \255\255\255\255\255\255\152\000\255\255\152\000\255\255\255\255\ - \154\000\155\000\154\000\155\000\155\000\155\000\155\000\155\000\ - \255\255\255\255\255\255\156\000\255\255\156\000\156\000\156\000\ - \156\000\255\255\255\255\255\255\156\000\156\000\255\255\156\000\ - \156\000\156\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \154\000\255\255\154\000\155\000\156\000\155\000\156\000\156\000\ - \156\000\156\000\156\000\255\255\255\255\255\255\157\000\255\255\ - \157\000\157\000\157\000\157\000\255\255\255\255\255\255\157\000\ - \157\000\255\255\157\000\157\000\157\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\155\000\255\255\155\000\156\000\157\000\ - \156\000\157\000\157\000\157\000\157\000\157\000\255\255\255\255\ - \255\255\158\000\255\255\158\000\158\000\158\000\158\000\255\255\ - \255\255\255\255\158\000\158\000\255\255\158\000\158\000\158\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\156\000\255\255\ - \156\000\157\000\158\000\157\000\158\000\158\000\158\000\158\000\ - \158\000\255\255\255\255\255\255\161\000\255\255\161\000\161\000\ - \161\000\161\000\255\255\255\255\255\255\161\000\161\000\255\255\ - \161\000\161\000\161\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\157\000\255\255\157\000\158\000\161\000\158\000\161\000\ - \161\000\161\000\161\000\161\000\255\255\255\255\255\255\164\000\ - \255\255\164\000\164\000\164\000\164\000\255\255\255\255\255\255\ - \164\000\164\000\255\255\164\000\164\000\164\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\158\000\255\255\158\000\161\000\ - \164\000\161\000\164\000\164\000\164\000\164\000\164\000\255\255\ + \255\255\255\255\156\000\255\255\156\000\156\000\156\000\156\000\ + \255\255\255\255\255\255\156\000\156\000\255\255\156\000\156\000\ + \156\000\255\255\255\255\255\255\255\255\153\000\255\255\153\000\ + \154\000\154\000\154\000\156\000\255\255\156\000\156\000\156\000\ + \156\000\156\000\255\255\255\255\255\255\157\000\255\255\157\000\ + \157\000\157\000\157\000\255\255\255\255\255\255\157\000\157\000\ + \255\255\157\000\157\000\157\000\255\255\255\255\255\255\255\255\ + \154\000\255\255\154\000\255\255\255\255\156\000\157\000\156\000\ + \157\000\157\000\157\000\157\000\157\000\255\255\255\255\255\255\ + \158\000\255\255\158\000\158\000\158\000\158\000\255\255\255\255\ + \255\255\158\000\158\000\255\255\158\000\158\000\158\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\156\000\255\255\156\000\ + \157\000\158\000\157\000\158\000\158\000\158\000\158\000\158\000\ + \255\255\255\255\255\255\159\000\255\255\159\000\159\000\159\000\ + \159\000\255\255\255\255\255\255\159\000\159\000\255\255\159\000\ + \159\000\159\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \157\000\255\255\157\000\158\000\159\000\158\000\159\000\159\000\ + \159\000\159\000\159\000\255\255\255\255\255\255\160\000\255\255\ + \160\000\160\000\160\000\160\000\255\255\255\255\255\255\160\000\ + \160\000\255\255\160\000\160\000\160\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\158\000\255\255\158\000\159\000\160\000\ + \159\000\160\000\160\000\160\000\160\000\160\000\255\255\255\255\ + \255\255\163\000\255\255\163\000\163\000\163\000\163\000\255\255\ + \255\255\255\255\163\000\163\000\255\255\163\000\163\000\163\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\159\000\255\255\ + \159\000\160\000\163\000\160\000\163\000\163\000\163\000\163\000\ + \163\000\255\255\255\255\255\255\166\000\255\255\166\000\166\000\ + \166\000\166\000\255\255\255\255\255\255\166\000\166\000\255\255\ + \166\000\166\000\166\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\160\000\255\255\160\000\163\000\166\000\163\000\166\000\ + \166\000\166\000\166\000\166\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\190\000\255\255\190\000\ - \255\255\255\255\255\255\255\255\190\000\255\255\255\255\161\000\ - \213\000\161\000\164\000\213\000\164\000\190\000\190\000\190\000\ - \190\000\190\000\190\000\190\000\190\000\190\000\190\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\213\000\255\255\ - \213\000\255\255\255\255\255\255\255\255\213\000\255\255\255\255\ - \255\255\255\255\164\000\255\255\164\000\255\255\213\000\213\000\ - \213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\ - \255\255\190\000\255\255\255\255\255\255\255\255\255\255\190\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\190\000\255\255\255\255\255\255\190\000\ - \255\255\190\000\255\255\255\255\255\255\190\000\255\255\255\255\ - \255\255\255\255\213\000\255\255\255\255\255\255\255\255\255\255\ - \213\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\213\000\255\255\255\255\255\255\ - \213\000\255\255\213\000\255\255\255\255\255\255\213\000\224\000\ - \224\000\224\000\224\000\224\000\224\000\224\000\224\000\224\000\ - \224\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \224\000\224\000\224\000\224\000\224\000\224\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\163\000\255\255\163\000\166\000\ + \184\000\166\000\184\000\184\000\184\000\184\000\184\000\184\000\ + \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ + \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\ + \184\000\184\000\184\000\184\000\255\255\184\000\255\255\166\000\ + \191\000\166\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\191\000\191\000\191\000\191\000\ + \191\000\191\000\191\000\191\000\192\000\191\000\192\000\255\255\ + \255\255\255\255\255\255\192\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\192\000\192\000\192\000\192\000\ + \192\000\192\000\192\000\192\000\192\000\192\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\206\000\206\000\ + \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\ + \192\000\255\255\255\255\255\255\255\255\255\255\192\000\206\000\ + \206\000\206\000\206\000\206\000\206\000\255\255\255\255\255\255\ + \255\255\255\255\192\000\255\255\255\255\255\255\192\000\215\000\ + \192\000\255\255\215\000\255\255\192\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\206\000\ + \206\000\206\000\206\000\206\000\206\000\215\000\255\255\215\000\ + \255\255\255\255\255\255\255\255\215\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\215\000\215\000\215\000\ + \215\000\215\000\215\000\215\000\215\000\215\000\215\000\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \224\000\224\000\224\000\224\000\224\000\224\000\229\000\255\255\ - \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ - \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ - \229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ - \229\000\229\000\255\255\235\000\229\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\ - \235\000\235\000\235\000\235\000\235\000\235\000\235\000\255\255\ - \255\255\235\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\213\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\218\000\ + \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\ + \218\000\215\000\255\255\255\255\255\255\255\255\255\255\215\000\ + \218\000\218\000\218\000\218\000\218\000\218\000\255\255\255\255\ + \255\255\255\255\255\255\215\000\255\255\255\255\255\255\215\000\ + \255\255\215\000\255\255\255\255\255\255\215\000\226\000\226\000\ + \226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ + \218\000\218\000\218\000\218\000\218\000\218\000\255\255\226\000\ + \226\000\226\000\226\000\226\000\226\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\226\000\ + \226\000\226\000\226\000\226\000\226\000\231\000\255\255\231\000\ + \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ + \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ + \231\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ + \231\000\255\255\237\000\231\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\255\255\ + \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\215\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\ @@ -118289,7 +115652,10 @@ let __ocaml_lex_tables = { \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255"; + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255"; 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\ @@ -118304,8 +115670,8 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\010\000\036\000\000\000\000\000\000\000\000\000\ - \012\000\000\000\000\000\000\000\002\000\000\000\027\000\000\000\ + \000\000\000\000\000\000\010\000\036\000\000\000\000\000\000\000\ + \000\000\012\000\000\000\000\000\000\000\002\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\ @@ -118317,11 +115683,11 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\002\000\004\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\002\000\004\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000"; + \000\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\ @@ -118350,10 +115716,10 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\039\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\039\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \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\ @@ -118369,7 +115735,7 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\019\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ @@ -118385,7 +115751,7 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \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\001\000\000\000\036\000\036\000\000\000\036\000\000\000\ @@ -118426,17 +115792,17 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\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\026\000\115\000\213\000\220\000\115\000\221\000\255\255\ + \255\255\026\000\116\000\215\000\222\000\116\000\223\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\ - \026\000\255\255\115\000\000\000\116\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\106\000\107\000\255\255\255\255\ + \026\000\255\255\116\000\000\000\117\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\107\000\108\000\255\255\255\255\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ - \026\000\026\000\106\000\106\000\106\000\106\000\106\000\106\000\ - \106\000\106\000\106\000\106\000\107\000\255\255\255\255\255\255\ + \026\000\026\000\107\000\107\000\107\000\107\000\107\000\107\000\ + \107\000\107\000\107\000\107\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\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\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\ @@ -118457,7 +115823,7 @@ let __ocaml_lex_tables = { \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \115\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \116\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\ @@ -118473,7 +115839,7 @@ let rec token lexbuf = and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 446 "src/reason-parser/reason_lexer.mll" +# 404 "src/reason-parser/reason_lexer.mll" ( match !preprocessor with | None -> @@ -118482,118 +115848,118 @@ and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = | Some _ -> update_loc lexbuf None 1 false 0; token lexbuf ) -# 2120 "src/reason-parser/reason_lexer.ml" +# 2152 "src/reason-parser/reason_lexer.ml" | 1 -> -# 455 "src/reason-parser/reason_lexer.mll" +# 413 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 0; match !preprocessor with | None -> token lexbuf | Some _ -> EOL ) -# 2129 "src/reason-parser/reason_lexer.ml" +# 2161 "src/reason-parser/reason_lexer.ml" | 2 -> -# 461 "src/reason-parser/reason_lexer.mll" +# 419 "src/reason-parser/reason_lexer.mll" ( token lexbuf ) -# 2134 "src/reason-parser/reason_lexer.ml" +# 2166 "src/reason-parser/reason_lexer.ml" | 3 -> -# 463 "src/reason-parser/reason_lexer.mll" +# 421 "src/reason-parser/reason_lexer.mll" ( UNDERSCORE ) -# 2139 "src/reason-parser/reason_lexer.ml" +# 2171 "src/reason-parser/reason_lexer.ml" | 4 -> -# 465 "src/reason-parser/reason_lexer.mll" +# 423 "src/reason-parser/reason_lexer.mll" ( TILDE ) -# 2144 "src/reason-parser/reason_lexer.ml" +# 2176 "src/reason-parser/reason_lexer.ml" | 5 -> -# 467 "src/reason-parser/reason_lexer.mll" +# 425 "src/reason-parser/reason_lexer.mll" ( QUESTION ) -# 2149 "src/reason-parser/reason_lexer.ml" +# 2181 "src/reason-parser/reason_lexer.ml" | 6 -> -# 469 "src/reason-parser/reason_lexer.mll" +# 427 "src/reason-parser/reason_lexer.mll" ( set_lexeme_length lexbuf 1; EQUAL ) -# 2154 "src/reason-parser/reason_lexer.ml" +# 2186 "src/reason-parser/reason_lexer.ml" | 7 -> -# 471 "src/reason-parser/reason_lexer.mll" +# 429 "src/reason-parser/reason_lexer.mll" ( let s = Lexing.lexeme lexbuf in try Hashtbl.find keyword_table s with Not_found -> LIDENT s ) -# 2161 "src/reason-parser/reason_lexer.ml" +# 2193 "src/reason-parser/reason_lexer.ml" | 8 -> -# 475 "src/reason-parser/reason_lexer.mll" +# 433 "src/reason-parser/reason_lexer.mll" ( warn_latin1 lexbuf; LIDENT (Lexing.lexeme lexbuf) ) -# 2166 "src/reason-parser/reason_lexer.ml" +# 2198 "src/reason-parser/reason_lexer.ml" | 9 -> -# 477 "src/reason-parser/reason_lexer.mll" +# 435 "src/reason-parser/reason_lexer.mll" ( let l = Lexing.lexeme lexbuf in LABEL_WITH_EQUAL(String.sub l 1 (String.length l - 2)) ) -# 2172 "src/reason-parser/reason_lexer.ml" +# 2204 "src/reason-parser/reason_lexer.ml" | 10 -> -# 480 "src/reason-parser/reason_lexer.mll" +# 438 "src/reason-parser/reason_lexer.mll" ( UIDENT(Lexing.lexeme lexbuf) ) -# 2177 "src/reason-parser/reason_lexer.ml" +# 2209 "src/reason-parser/reason_lexer.ml" | 11 -> -# 482 "src/reason-parser/reason_lexer.mll" +# 440 "src/reason-parser/reason_lexer.mll" ( warn_latin1 lexbuf; UIDENT(Lexing.lexeme lexbuf) ) -# 2182 "src/reason-parser/reason_lexer.ml" +# 2214 "src/reason-parser/reason_lexer.ml" | 12 -> -# 483 "src/reason-parser/reason_lexer.mll" +# 441 "src/reason-parser/reason_lexer.mll" ( INT (Lexing.lexeme lexbuf, None) ) -# 2187 "src/reason-parser/reason_lexer.ml" +# 2219 "src/reason-parser/reason_lexer.ml" | 13 -> let -# 484 "src/reason-parser/reason_lexer.mll" +# 442 "src/reason-parser/reason_lexer.mll" lit -# 2193 "src/reason-parser/reason_lexer.ml" +# 2225 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_curr_pos + -1) and -# 484 "src/reason-parser/reason_lexer.mll" +# 442 "src/reason-parser/reason_lexer.mll" modif -# 2198 "src/reason-parser/reason_lexer.ml" +# 2230 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_curr_pos + -1) in -# 485 "src/reason-parser/reason_lexer.mll" +# 443 "src/reason-parser/reason_lexer.mll" ( INT (lit, Some modif) ) -# 2202 "src/reason-parser/reason_lexer.ml" +# 2234 "src/reason-parser/reason_lexer.ml" | 14 -> -# 487 "src/reason-parser/reason_lexer.mll" +# 445 "src/reason-parser/reason_lexer.mll" ( FLOAT (Lexing.lexeme lexbuf, None) ) -# 2207 "src/reason-parser/reason_lexer.ml" +# 2239 "src/reason-parser/reason_lexer.ml" | 15 -> let -# 488 "src/reason-parser/reason_lexer.mll" +# 446 "src/reason-parser/reason_lexer.mll" lit -# 2213 "src/reason-parser/reason_lexer.ml" +# 2245 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_curr_pos + -1) and -# 488 "src/reason-parser/reason_lexer.mll" +# 446 "src/reason-parser/reason_lexer.mll" modif -# 2218 "src/reason-parser/reason_lexer.ml" +# 2250 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_curr_pos + -1) in -# 489 "src/reason-parser/reason_lexer.mll" +# 447 "src/reason-parser/reason_lexer.mll" ( FLOAT (lit, Some modif) ) -# 2222 "src/reason-parser/reason_lexer.ml" +# 2254 "src/reason-parser/reason_lexer.ml" | 16 -> -# 491 "src/reason-parser/reason_lexer.mll" +# 449 "src/reason-parser/reason_lexer.mll" ( raise (Error(Invalid_literal (Lexing.lexeme lexbuf), Location.curr lexbuf)) ) -# 2228 "src/reason-parser/reason_lexer.ml" +# 2260 "src/reason-parser/reason_lexer.ml" | 17 -> -# 494 "src/reason-parser/reason_lexer.mll" +# 452 "src/reason-parser/reason_lexer.mll" ( reset_string_buffer(); is_in_string := true; let string_start = lexbuf.lex_start_p in @@ -118602,10 +115968,10 @@ and is_in_string := false; lexbuf.lex_start_p <- string_start; STRING (get_stored_string(), None) ) -# 2240 "src/reason-parser/reason_lexer.ml" +# 2272 "src/reason-parser/reason_lexer.ml" | 18 -> -# 503 "src/reason-parser/reason_lexer.mll" +# 461 "src/reason-parser/reason_lexer.mll" ( reset_string_buffer(); let delim = Lexing.lexeme lexbuf in let delim = String.sub delim 1 (String.length delim - 2) in @@ -118616,428 +115982,446 @@ and is_in_string := false; lexbuf.lex_start_p <- string_start; STRING (get_stored_string(), Some delim) ) -# 2254 "src/reason-parser/reason_lexer.ml" +# 2286 "src/reason-parser/reason_lexer.ml" | 19 -> -# 514 "src/reason-parser/reason_lexer.mll" +# 472 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 1; CHAR (Lexing.lexeme_char lexbuf 1) ) -# 2260 "src/reason-parser/reason_lexer.ml" +# 2292 "src/reason-parser/reason_lexer.ml" | 20 -> -# 517 "src/reason-parser/reason_lexer.mll" +# 475 "src/reason-parser/reason_lexer.mll" ( CHAR(Lexing.lexeme_char lexbuf 1) ) -# 2265 "src/reason-parser/reason_lexer.ml" +# 2297 "src/reason-parser/reason_lexer.ml" | 21 -> -# 519 "src/reason-parser/reason_lexer.mll" +# 477 "src/reason-parser/reason_lexer.mll" ( CHAR(char_for_backslash (Lexing.lexeme_char lexbuf 2)) ) -# 2270 "src/reason-parser/reason_lexer.ml" +# 2302 "src/reason-parser/reason_lexer.ml" | 22 -> -# 521 "src/reason-parser/reason_lexer.mll" +# 479 "src/reason-parser/reason_lexer.mll" ( CHAR(char_for_decimal_code lexbuf 2) ) -# 2275 "src/reason-parser/reason_lexer.ml" +# 2307 "src/reason-parser/reason_lexer.ml" | 23 -> -# 523 "src/reason-parser/reason_lexer.mll" +# 481 "src/reason-parser/reason_lexer.mll" ( CHAR(char_for_hexadecimal_code lexbuf 3) ) -# 2280 "src/reason-parser/reason_lexer.ml" +# 2312 "src/reason-parser/reason_lexer.ml" | 24 -> -# 525 "src/reason-parser/reason_lexer.mll" +# 483 "src/reason-parser/reason_lexer.mll" ( let l = Lexing.lexeme lexbuf in let esc = String.sub l 1 (String.length l - 1) in raise (Error(Illegal_escape esc, Location.curr lexbuf)) ) -# 2288 "src/reason-parser/reason_lexer.ml" +# 2320 "src/reason-parser/reason_lexer.ml" | 25 -> -# 529 "src/reason-parser/reason_lexer.mll" +# 487 "src/reason-parser/reason_lexer.mll" ( (* Allow parsing of foo#= *) set_lexeme_length lexbuf 2; SHARPOP("#=") ) -# 2297 "src/reason-parser/reason_lexer.ml" +# 2329 "src/reason-parser/reason_lexer.ml" | 26 -> -# 535 "src/reason-parser/reason_lexer.mll" +# 493 "src/reason-parser/reason_lexer.mll" ( SHARPOP(lexeme_operator lexbuf) ) -# 2302 "src/reason-parser/reason_lexer.ml" +# 2334 "src/reason-parser/reason_lexer.ml" | 27 -> let -# 536 "src/reason-parser/reason_lexer.mll" +# 494 "src/reason-parser/reason_lexer.mll" num -# 2308 "src/reason-parser/reason_lexer.ml" +# 2340 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_mem.(1) and -# 537 "src/reason-parser/reason_lexer.mll" +# 495 "src/reason-parser/reason_lexer.mll" name -# 2313 "src/reason-parser/reason_lexer.ml" +# 2345 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3) lexbuf.Lexing.lex_mem.(2) in -# 539 "src/reason-parser/reason_lexer.mll" +# 497 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf name (int_of_string num) true 0; token lexbuf ) -# 2319 "src/reason-parser/reason_lexer.ml" +# 2351 "src/reason-parser/reason_lexer.ml" | 28 -> -# 542 "src/reason-parser/reason_lexer.mll" +# 500 "src/reason-parser/reason_lexer.mll" ( AMPERSAND ) -# 2324 "src/reason-parser/reason_lexer.ml" +# 2356 "src/reason-parser/reason_lexer.ml" | 29 -> -# 543 "src/reason-parser/reason_lexer.mll" +# 501 "src/reason-parser/reason_lexer.mll" ( AMPERAMPER ) -# 2329 "src/reason-parser/reason_lexer.ml" +# 2361 "src/reason-parser/reason_lexer.ml" | 30 -> -# 544 "src/reason-parser/reason_lexer.mll" +# 502 "src/reason-parser/reason_lexer.mll" ( BACKQUOTE ) -# 2334 "src/reason-parser/reason_lexer.ml" +# 2366 "src/reason-parser/reason_lexer.ml" | 31 -> -# 545 "src/reason-parser/reason_lexer.mll" +# 503 "src/reason-parser/reason_lexer.mll" ( QUOTE ) -# 2339 "src/reason-parser/reason_lexer.ml" +# 2371 "src/reason-parser/reason_lexer.ml" | 32 -> -# 546 "src/reason-parser/reason_lexer.mll" +# 504 "src/reason-parser/reason_lexer.mll" ( LPAREN ) -# 2344 "src/reason-parser/reason_lexer.ml" +# 2376 "src/reason-parser/reason_lexer.ml" | 33 -> -# 547 "src/reason-parser/reason_lexer.mll" +# 505 "src/reason-parser/reason_lexer.mll" ( RPAREN ) -# 2349 "src/reason-parser/reason_lexer.ml" +# 2381 "src/reason-parser/reason_lexer.ml" | 34 -> -# 548 "src/reason-parser/reason_lexer.mll" +# 506 "src/reason-parser/reason_lexer.mll" ( STAR ) -# 2354 "src/reason-parser/reason_lexer.ml" +# 2386 "src/reason-parser/reason_lexer.ml" | 35 -> -# 549 "src/reason-parser/reason_lexer.mll" +# 507 "src/reason-parser/reason_lexer.mll" ( COMMA ) -# 2359 "src/reason-parser/reason_lexer.ml" +# 2391 "src/reason-parser/reason_lexer.ml" | 36 -> -# 550 "src/reason-parser/reason_lexer.mll" +# 508 "src/reason-parser/reason_lexer.mll" ( MINUSGREATER ) -# 2364 "src/reason-parser/reason_lexer.ml" +# 2396 "src/reason-parser/reason_lexer.ml" | 37 -> -# 551 "src/reason-parser/reason_lexer.mll" +# 509 "src/reason-parser/reason_lexer.mll" ( EQUALGREATER ) -# 2369 "src/reason-parser/reason_lexer.ml" +# 2401 "src/reason-parser/reason_lexer.ml" | 38 -> -# 552 "src/reason-parser/reason_lexer.mll" +# 510 "src/reason-parser/reason_lexer.mll" ( SHARP ) -# 2374 "src/reason-parser/reason_lexer.ml" +# 2406 "src/reason-parser/reason_lexer.ml" | 39 -> -# 553 "src/reason-parser/reason_lexer.mll" +# 511 "src/reason-parser/reason_lexer.mll" ( DOT ) -# 2379 "src/reason-parser/reason_lexer.ml" +# 2411 "src/reason-parser/reason_lexer.ml" | 40 -> -# 554 "src/reason-parser/reason_lexer.mll" +# 512 "src/reason-parser/reason_lexer.mll" ( DOTDOT ) -# 2384 "src/reason-parser/reason_lexer.ml" +# 2416 "src/reason-parser/reason_lexer.ml" | 41 -> -# 555 "src/reason-parser/reason_lexer.mll" +# 513 "src/reason-parser/reason_lexer.mll" ( DOTDOTDOT ) -# 2389 "src/reason-parser/reason_lexer.ml" +# 2421 "src/reason-parser/reason_lexer.ml" | 42 -> -# 556 "src/reason-parser/reason_lexer.mll" +# 514 "src/reason-parser/reason_lexer.mll" ( COLON ) -# 2394 "src/reason-parser/reason_lexer.ml" +# 2426 "src/reason-parser/reason_lexer.ml" | 43 -> -# 557 "src/reason-parser/reason_lexer.mll" +# 515 "src/reason-parser/reason_lexer.mll" ( COLONCOLON ) -# 2399 "src/reason-parser/reason_lexer.ml" +# 2431 "src/reason-parser/reason_lexer.ml" | 44 -> -# 558 "src/reason-parser/reason_lexer.mll" +# 516 "src/reason-parser/reason_lexer.mll" ( COLONEQUAL ) -# 2404 "src/reason-parser/reason_lexer.ml" +# 2436 "src/reason-parser/reason_lexer.ml" | 45 -> -# 559 "src/reason-parser/reason_lexer.mll" +# 517 "src/reason-parser/reason_lexer.mll" ( COLONGREATER ) -# 2409 "src/reason-parser/reason_lexer.ml" +# 2441 "src/reason-parser/reason_lexer.ml" | 46 -> -# 560 "src/reason-parser/reason_lexer.mll" +# 518 "src/reason-parser/reason_lexer.mll" ( SEMI ) -# 2414 "src/reason-parser/reason_lexer.ml" +# 2446 "src/reason-parser/reason_lexer.ml" | 47 -> -# 561 "src/reason-parser/reason_lexer.mll" +# 519 "src/reason-parser/reason_lexer.mll" ( SEMISEMI ) -# 2419 "src/reason-parser/reason_lexer.ml" +# 2451 "src/reason-parser/reason_lexer.ml" | 48 -> -# 562 "src/reason-parser/reason_lexer.mll" +# 520 "src/reason-parser/reason_lexer.mll" ( LESS ) -# 2424 "src/reason-parser/reason_lexer.ml" +# 2456 "src/reason-parser/reason_lexer.ml" | 49 -> -# 563 "src/reason-parser/reason_lexer.mll" +# 521 "src/reason-parser/reason_lexer.mll" ( EQUAL ) -# 2429 "src/reason-parser/reason_lexer.ml" +# 2461 "src/reason-parser/reason_lexer.ml" | 50 -> -# 564 "src/reason-parser/reason_lexer.mll" +# 522 "src/reason-parser/reason_lexer.mll" ( LBRACKET ) -# 2434 "src/reason-parser/reason_lexer.ml" +# 2466 "src/reason-parser/reason_lexer.ml" | 51 -> -# 565 "src/reason-parser/reason_lexer.mll" +# 523 "src/reason-parser/reason_lexer.mll" ( LBRACKETBAR ) -# 2439 "src/reason-parser/reason_lexer.ml" +# 2471 "src/reason-parser/reason_lexer.ml" | 52 -> -# 566 "src/reason-parser/reason_lexer.mll" +# 524 "src/reason-parser/reason_lexer.mll" ( LBRACKETLESS ) -# 2444 "src/reason-parser/reason_lexer.ml" +# 2476 "src/reason-parser/reason_lexer.ml" | 53 -> -# 567 "src/reason-parser/reason_lexer.mll" +# 525 "src/reason-parser/reason_lexer.mll" ( LBRACKETGREATER ) -# 2449 "src/reason-parser/reason_lexer.ml" +# 2481 "src/reason-parser/reason_lexer.ml" | 54 -> -# 568 "src/reason-parser/reason_lexer.mll" +# 526 "src/reason-parser/reason_lexer.mll" ( let buf = Lexing.lexeme lexbuf in LESSIDENT (String.sub buf 1 (String.length buf - 1)) ) -# 2457 "src/reason-parser/reason_lexer.ml" +# 2489 "src/reason-parser/reason_lexer.ml" | 55 -> -# 572 "src/reason-parser/reason_lexer.mll" +# 530 "src/reason-parser/reason_lexer.mll" + ( + (* allows parsing of `{}> as correct jsx *) + set_lexeme_length lexbuf 1; + LBRACE + ) +# 2498 "src/reason-parser/reason_lexer.ml" + + | 56 -> +# 535 "src/reason-parser/reason_lexer.mll" ( let buf = Lexing.lexeme lexbuf in LESSSLASHIDENTGREATER (String.sub buf 2 (String.length buf - 2 - 1)) ) -# 2465 "src/reason-parser/reason_lexer.ml" +# 2506 "src/reason-parser/reason_lexer.ml" - | 56 -> -# 576 "src/reason-parser/reason_lexer.mll" + | 57 -> +# 539 "src/reason-parser/reason_lexer.mll" ( RBRACKET ) -# 2470 "src/reason-parser/reason_lexer.ml" +# 2511 "src/reason-parser/reason_lexer.ml" - | 57 -> -# 577 "src/reason-parser/reason_lexer.mll" + | 58 -> +# 540 "src/reason-parser/reason_lexer.mll" ( LBRACE ) -# 2475 "src/reason-parser/reason_lexer.ml" +# 2516 "src/reason-parser/reason_lexer.ml" - | 58 -> -# 578 "src/reason-parser/reason_lexer.mll" + | 59 -> +# 541 "src/reason-parser/reason_lexer.mll" ( LBRACELESS ) -# 2480 "src/reason-parser/reason_lexer.ml" +# 2521 "src/reason-parser/reason_lexer.ml" - | 59 -> -# 579 "src/reason-parser/reason_lexer.mll" + | 60 -> +# 542 "src/reason-parser/reason_lexer.mll" ( BAR ) -# 2485 "src/reason-parser/reason_lexer.ml" +# 2526 "src/reason-parser/reason_lexer.ml" - | 60 -> -# 580 "src/reason-parser/reason_lexer.mll" + | 61 -> +# 543 "src/reason-parser/reason_lexer.mll" ( BARBAR ) -# 2490 "src/reason-parser/reason_lexer.ml" +# 2531 "src/reason-parser/reason_lexer.ml" - | 61 -> -# 581 "src/reason-parser/reason_lexer.mll" + | 62 -> +# 544 "src/reason-parser/reason_lexer.mll" ( BARRBRACKET ) -# 2495 "src/reason-parser/reason_lexer.ml" +# 2536 "src/reason-parser/reason_lexer.ml" - | 62 -> -# 582 "src/reason-parser/reason_lexer.mll" + | 63 -> +# 545 "src/reason-parser/reason_lexer.mll" ( GREATER ) -# 2500 "src/reason-parser/reason_lexer.ml" +# 2541 "src/reason-parser/reason_lexer.ml" - | 63 -> -# 588 "src/reason-parser/reason_lexer.mll" + | 64 -> +# 551 "src/reason-parser/reason_lexer.mll" ( RBRACE ) -# 2505 "src/reason-parser/reason_lexer.ml" +# 2546 "src/reason-parser/reason_lexer.ml" - | 64 -> -# 589 "src/reason-parser/reason_lexer.mll" + | 65 -> +# 552 "src/reason-parser/reason_lexer.mll" ( GREATERRBRACE ) -# 2510 "src/reason-parser/reason_lexer.ml" +# 2551 "src/reason-parser/reason_lexer.ml" - | 65 -> -# 590 "src/reason-parser/reason_lexer.mll" + | 66 -> +# 553 "src/reason-parser/reason_lexer.mll" ( (* allow `let x=
;` *) set_lexeme_length lexbuf 1; EQUAL ) -# 2519 "src/reason-parser/reason_lexer.ml" +# 2560 "src/reason-parser/reason_lexer.ml" - | 66 -> -# 596 "src/reason-parser/reason_lexer.mll" + | 67 -> +# 559 "src/reason-parser/reason_lexer.mll" ( set_lexeme_length lexbuf 2; SLASHGREATER ) -# 2527 "src/reason-parser/reason_lexer.ml" +# 2568 "src/reason-parser/reason_lexer.ml" - | 67 -> -# 600 "src/reason-parser/reason_lexer.mll" + | 68 -> +# 563 "src/reason-parser/reason_lexer.mll" ( set_lexeme_length lexbuf 2; LBRACKETBAR ) -# 2535 "src/reason-parser/reason_lexer.ml" +# 2576 "src/reason-parser/reason_lexer.ml" - | 68 -> -# 604 "src/reason-parser/reason_lexer.mll" + | 69 -> +# 567 "src/reason-parser/reason_lexer.mll" ( (* allow parsing of
*) set_lexeme_length lexbuf 1; GREATER ) -# 2544 "src/reason-parser/reason_lexer.ml" +# 2585 "src/reason-parser/reason_lexer.ml" - | 69 -> -# 609 "src/reason-parser/reason_lexer.mll" + | 70 -> +# 572 "src/reason-parser/reason_lexer.mll" + ( + (* allow parsing of
*) + set_lexeme_length lexbuf 1; + GREATER + ) +# 2594 "src/reason-parser/reason_lexer.ml" + + | 71 -> +# 577 "src/reason-parser/reason_lexer.mll" ( LBRACKETAT ) -# 2549 "src/reason-parser/reason_lexer.ml" +# 2599 "src/reason-parser/reason_lexer.ml" - | 70 -> -# 610 "src/reason-parser/reason_lexer.mll" + | 72 -> +# 578 "src/reason-parser/reason_lexer.mll" ( LBRACKETPERCENT ) -# 2554 "src/reason-parser/reason_lexer.ml" +# 2604 "src/reason-parser/reason_lexer.ml" - | 71 -> -# 611 "src/reason-parser/reason_lexer.mll" + | 73 -> +# 579 "src/reason-parser/reason_lexer.mll" ( LBRACKETPERCENTPERCENT ) -# 2559 "src/reason-parser/reason_lexer.ml" +# 2609 "src/reason-parser/reason_lexer.ml" - | 72 -> -# 612 "src/reason-parser/reason_lexer.mll" + | 74 -> +# 580 "src/reason-parser/reason_lexer.mll" ( BANG ) -# 2564 "src/reason-parser/reason_lexer.ml" +# 2614 "src/reason-parser/reason_lexer.ml" - | 73 -> -# 613 "src/reason-parser/reason_lexer.mll" + | 75 -> +# 581 "src/reason-parser/reason_lexer.mll" ( INFIXOP0 "!=" ) -# 2569 "src/reason-parser/reason_lexer.ml" +# 2619 "src/reason-parser/reason_lexer.ml" - | 74 -> -# 614 "src/reason-parser/reason_lexer.mll" + | 76 -> +# 582 "src/reason-parser/reason_lexer.mll" ( INFIXOP0 "!==" ) -# 2574 "src/reason-parser/reason_lexer.ml" +# 2624 "src/reason-parser/reason_lexer.ml" - | 75 -> -# 615 "src/reason-parser/reason_lexer.mll" + | 77 -> +# 583 "src/reason-parser/reason_lexer.mll" ( INFIXOP0 "!=" ) -# 2579 "src/reason-parser/reason_lexer.ml" +# 2629 "src/reason-parser/reason_lexer.ml" - | 76 -> -# 616 "src/reason-parser/reason_lexer.mll" + | 78 -> +# 584 "src/reason-parser/reason_lexer.mll" ( INFIXOP0 "!==" ) -# 2584 "src/reason-parser/reason_lexer.ml" +# 2634 "src/reason-parser/reason_lexer.ml" - | 77 -> -# 617 "src/reason-parser/reason_lexer.mll" + | 79 -> +# 585 "src/reason-parser/reason_lexer.mll" ( PLUS ) -# 2589 "src/reason-parser/reason_lexer.ml" +# 2639 "src/reason-parser/reason_lexer.ml" - | 78 -> -# 618 "src/reason-parser/reason_lexer.mll" + | 80 -> +# 586 "src/reason-parser/reason_lexer.mll" ( PLUSDOT ) -# 2594 "src/reason-parser/reason_lexer.ml" +# 2644 "src/reason-parser/reason_lexer.ml" - | 79 -> -# 619 "src/reason-parser/reason_lexer.mll" + | 81 -> +# 587 "src/reason-parser/reason_lexer.mll" ( PLUSEQ ) -# 2599 "src/reason-parser/reason_lexer.ml" +# 2649 "src/reason-parser/reason_lexer.ml" - | 80 -> -# 620 "src/reason-parser/reason_lexer.mll" + | 82 -> +# 588 "src/reason-parser/reason_lexer.mll" ( MINUS ) -# 2604 "src/reason-parser/reason_lexer.ml" +# 2654 "src/reason-parser/reason_lexer.ml" - | 81 -> -# 621 "src/reason-parser/reason_lexer.mll" + | 83 -> +# 589 "src/reason-parser/reason_lexer.mll" ( MINUSDOT ) -# 2609 "src/reason-parser/reason_lexer.ml" +# 2659 "src/reason-parser/reason_lexer.ml" - | 82 -> -# 622 "src/reason-parser/reason_lexer.mll" + | 84 -> +# 590 "src/reason-parser/reason_lexer.mll" ( LESSGREATER ) -# 2614 "src/reason-parser/reason_lexer.ml" +# 2664 "src/reason-parser/reason_lexer.ml" - | 83 -> -# 623 "src/reason-parser/reason_lexer.mll" + | 85 -> +# 591 "src/reason-parser/reason_lexer.mll" ( LESSSLASHGREATER ) -# 2619 "src/reason-parser/reason_lexer.ml" +# 2669 "src/reason-parser/reason_lexer.ml" - | 84 -> -# 624 "src/reason-parser/reason_lexer.mll" + | 86 -> +# 592 "src/reason-parser/reason_lexer.mll" ( LESSDOTDOTGREATER ) -# 2624 "src/reason-parser/reason_lexer.ml" +# 2674 "src/reason-parser/reason_lexer.ml" - | 85 -> -# 626 "src/reason-parser/reason_lexer.mll" + | 87 -> +# 594 "src/reason-parser/reason_lexer.mll" ( PREFIXOP(lexeme_operator lexbuf) ) -# 2629 "src/reason-parser/reason_lexer.ml" +# 2679 "src/reason-parser/reason_lexer.ml" - | 86 -> -# 628 "src/reason-parser/reason_lexer.mll" + | 88 -> +# 596 "src/reason-parser/reason_lexer.mll" ( INFIXOP0(lexeme_operator lexbuf) ) -# 2634 "src/reason-parser/reason_lexer.ml" +# 2684 "src/reason-parser/reason_lexer.ml" - | 87 -> -# 630 "src/reason-parser/reason_lexer.mll" + | 89 -> +# 598 "src/reason-parser/reason_lexer.mll" ( INFIXOP1(lexeme_operator lexbuf) ) -# 2639 "src/reason-parser/reason_lexer.ml" +# 2689 "src/reason-parser/reason_lexer.ml" - | 88 -> -# 632 "src/reason-parser/reason_lexer.mll" + | 90 -> +# 600 "src/reason-parser/reason_lexer.mll" ( match lexeme_without_comment lexbuf with | "^." -> set_lexeme_length lexbuf 1; POSTFIXOP("^") | "^" -> POSTFIXOP("^") | op -> INFIXOP1(unescape_operator op) ) -# 2647 "src/reason-parser/reason_lexer.ml" +# 2697 "src/reason-parser/reason_lexer.ml" - | 89 -> -# 637 "src/reason-parser/reason_lexer.mll" + | 91 -> +# 605 "src/reason-parser/reason_lexer.mll" ( INFIXOP1(lexeme_operator lexbuf) ) -# 2652 "src/reason-parser/reason_lexer.ml" +# 2702 "src/reason-parser/reason_lexer.ml" - | 90 -> -# 639 "src/reason-parser/reason_lexer.mll" + | 92 -> +# 607 "src/reason-parser/reason_lexer.mll" ( INFIXOP2(lexeme_operator lexbuf) ) -# 2657 "src/reason-parser/reason_lexer.ml" +# 2707 "src/reason-parser/reason_lexer.ml" - | 91 -> -# 641 "src/reason-parser/reason_lexer.mll" + | 93 -> +# 609 "src/reason-parser/reason_lexer.mll" ( SLASHGREATER ) -# 2662 "src/reason-parser/reason_lexer.ml" +# 2712 "src/reason-parser/reason_lexer.ml" - | 92 -> -# 652 "src/reason-parser/reason_lexer.mll" + | 94 -> +# 620 "src/reason-parser/reason_lexer.mll" ( INFIXOP4(lexeme_operator lexbuf) ) -# 2667 "src/reason-parser/reason_lexer.ml" +# 2717 "src/reason-parser/reason_lexer.ml" - | 93 -> -# 653 "src/reason-parser/reason_lexer.mll" + | 95 -> +# 621 "src/reason-parser/reason_lexer.mll" ( PERCENT ) -# 2672 "src/reason-parser/reason_lexer.ml" +# 2722 "src/reason-parser/reason_lexer.ml" - | 94 -> -# 655 "src/reason-parser/reason_lexer.mll" + | 96 -> +# 623 "src/reason-parser/reason_lexer.mll" ( match lexeme_operator lexbuf with | "" -> (* If the operator is empty, it means the lexeme is beginning @@ -119045,34 +116429,34 @@ and * the case. *) enter_comment lexbuf | op -> INFIXOP3 op ) -# 2683 "src/reason-parser/reason_lexer.ml" +# 2733 "src/reason-parser/reason_lexer.ml" - | 95 -> -# 663 "src/reason-parser/reason_lexer.mll" + | 97 -> +# 631 "src/reason-parser/reason_lexer.mll" ( INFIXOP3(lexeme_operator lexbuf) ) -# 2688 "src/reason-parser/reason_lexer.ml" +# 2738 "src/reason-parser/reason_lexer.ml" - | 96 -> -# 664 "src/reason-parser/reason_lexer.mll" + | 98 -> +# 632 "src/reason-parser/reason_lexer.mll" ( EOF ) -# 2693 "src/reason-parser/reason_lexer.ml" +# 2743 "src/reason-parser/reason_lexer.ml" - | 97 -> -# 666 "src/reason-parser/reason_lexer.mll" + | 99 -> +# 634 "src/reason-parser/reason_lexer.mll" ( raise (Error(Illegal_character (Lexing.lexeme_char lexbuf 0), Location.curr lexbuf)) ) -# 2700 "src/reason-parser/reason_lexer.ml" +# 2750 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state and enter_comment lexbuf = - __ocaml_lex_enter_comment_rec lexbuf 166 + __ocaml_lex_enter_comment_rec lexbuf 168 and __ocaml_lex_enter_comment_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 672 "src/reason-parser/reason_lexer.mll" +# 640 "src/reason-parser/reason_lexer.mll" ( set_lexeme_length lexbuf 2; let start_loc = Location.curr lexbuf in comment_start_loc := [start_loc]; @@ -119082,10 +116466,10 @@ and __ocaml_lex_enter_comment_rec lexbuf __ocaml_lex_state = reset_string_buffer (); COMMENT (s, { start_loc with Location.loc_end }) ) -# 2720 "src/reason-parser/reason_lexer.ml" +# 2770 "src/reason-parser/reason_lexer.ml" | 1 -> -# 682 "src/reason-parser/reason_lexer.mll" +# 650 "src/reason-parser/reason_lexer.mll" ( let start_p = lexbuf.Lexing.lex_start_p in let start_loc = Location.curr lexbuf in comment_start_loc := [start_loc]; @@ -119096,15 +116480,15 @@ and __ocaml_lex_enter_comment_rec lexbuf __ocaml_lex_state = lexbuf.Lexing.lex_start_p <- start_p; DOCSTRING s ) -# 2734 "src/reason-parser/reason_lexer.ml" +# 2784 "src/reason-parser/reason_lexer.ml" | 2 -> -# 693 "src/reason-parser/reason_lexer.mll" +# 661 "src/reason-parser/reason_lexer.mll" ( DOCSTRING "" ) -# 2739 "src/reason-parser/reason_lexer.ml" +# 2789 "src/reason-parser/reason_lexer.ml" | 3 -> -# 695 "src/reason-parser/reason_lexer.mll" +# 663 "src/reason-parser/reason_lexer.mll" ( let loc = Location.curr lexbuf in if !print_warnings then Location.prerr_warning loc Warnings.Comment_start; @@ -119115,39 +116499,39 @@ and __ocaml_lex_enter_comment_rec lexbuf __ocaml_lex_state = reset_string_buffer (); COMMENT (s, { loc with Location.loc_end }) ) -# 2753 "src/reason-parser/reason_lexer.ml" +# 2803 "src/reason-parser/reason_lexer.ml" | 4 -> -# 706 "src/reason-parser/reason_lexer.mll" +# 674 "src/reason-parser/reason_lexer.mll" ( let loc = Location.curr lexbuf in Location.prerr_warning loc Warnings.Comment_not_end; set_lexeme_length lexbuf 1; STAR ) -# 2762 "src/reason-parser/reason_lexer.ml" +# 2812 "src/reason-parser/reason_lexer.ml" | 5 -> -# 711 "src/reason-parser/reason_lexer.mll" +# 679 "src/reason-parser/reason_lexer.mll" ( assert false ) -# 2767 "src/reason-parser/reason_lexer.ml" +# 2817 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_enter_comment_rec lexbuf __ocaml_lex_state and comment lexbuf = - __ocaml_lex_comment_rec lexbuf 176 + __ocaml_lex_comment_rec lexbuf 178 and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 715 "src/reason-parser/reason_lexer.mll" +# 683 "src/reason-parser/reason_lexer.mll" ( comment_start_loc := (Location.curr lexbuf) :: !comment_start_loc; store_lexeme lexbuf; comment lexbuf; ) -# 2782 "src/reason-parser/reason_lexer.ml" +# 2832 "src/reason-parser/reason_lexer.ml" | 1 -> -# 720 "src/reason-parser/reason_lexer.mll" +# 688 "src/reason-parser/reason_lexer.mll" ( match !comment_start_loc with | [] -> assert false | [_] -> comment_start_loc := []; Location.curr lexbuf @@ -119155,10 +116539,10 @@ and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = store_lexeme lexbuf; comment lexbuf; ) -# 2793 "src/reason-parser/reason_lexer.ml" +# 2843 "src/reason-parser/reason_lexer.ml" | 2 -> -# 728 "src/reason-parser/reason_lexer.mll" +# 696 "src/reason-parser/reason_lexer.mll" ( string_start_loc := Location.curr lexbuf; store_string_char '"'; @@ -119176,10 +116560,10 @@ and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = is_in_string := false; store_string_char '"'; comment lexbuf ) -# 2814 "src/reason-parser/reason_lexer.ml" +# 2864 "src/reason-parser/reason_lexer.ml" | 3 -> -# 746 "src/reason-parser/reason_lexer.mll" +# 714 "src/reason-parser/reason_lexer.mll" ( let delim = Lexing.lexeme lexbuf in let delim = String.sub delim 1 (String.length delim - 2) in @@ -119201,43 +116585,43 @@ and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = store_string delim; store_string_char '}'; comment lexbuf ) -# 2839 "src/reason-parser/reason_lexer.ml" +# 2889 "src/reason-parser/reason_lexer.ml" | 4 -> -# 769 "src/reason-parser/reason_lexer.mll" +# 737 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2844 "src/reason-parser/reason_lexer.ml" +# 2894 "src/reason-parser/reason_lexer.ml" | 5 -> -# 771 "src/reason-parser/reason_lexer.mll" +# 739 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 1; store_lexeme lexbuf; comment lexbuf ) -# 2852 "src/reason-parser/reason_lexer.ml" +# 2902 "src/reason-parser/reason_lexer.ml" | 6 -> -# 776 "src/reason-parser/reason_lexer.mll" +# 744 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2857 "src/reason-parser/reason_lexer.ml" +# 2907 "src/reason-parser/reason_lexer.ml" | 7 -> -# 778 "src/reason-parser/reason_lexer.mll" +# 746 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2862 "src/reason-parser/reason_lexer.ml" +# 2912 "src/reason-parser/reason_lexer.ml" | 8 -> -# 780 "src/reason-parser/reason_lexer.mll" +# 748 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2867 "src/reason-parser/reason_lexer.ml" +# 2917 "src/reason-parser/reason_lexer.ml" | 9 -> -# 782 "src/reason-parser/reason_lexer.mll" +# 750 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2872 "src/reason-parser/reason_lexer.ml" +# 2922 "src/reason-parser/reason_lexer.ml" | 10 -> -# 784 "src/reason-parser/reason_lexer.mll" +# 752 "src/reason-parser/reason_lexer.mll" ( match !comment_start_loc with | [] -> assert false | loc :: _ -> @@ -119245,69 +116629,69 @@ and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = comment_start_loc := []; raise (Error (Unterminated_comment start, loc)) ) -# 2883 "src/reason-parser/reason_lexer.ml" +# 2933 "src/reason-parser/reason_lexer.ml" | 11 -> -# 792 "src/reason-parser/reason_lexer.mll" +# 760 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 0; store_lexeme lexbuf; comment lexbuf ) -# 2891 "src/reason-parser/reason_lexer.ml" +# 2941 "src/reason-parser/reason_lexer.ml" | 12 -> -# 797 "src/reason-parser/reason_lexer.mll" +# 765 "src/reason-parser/reason_lexer.mll" ( store_lexeme lexbuf; comment lexbuf ) -# 2896 "src/reason-parser/reason_lexer.ml" +# 2946 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state and string lexbuf = - lexbuf.Lexing.lex_mem <- Array.make 2 (-1) ; __ocaml_lex_string_rec lexbuf 208 + lexbuf.Lexing.lex_mem <- Array.make 2 (-1) ; __ocaml_lex_string_rec lexbuf 210 and __ocaml_lex_string_rec lexbuf __ocaml_lex_state = match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 801 "src/reason-parser/reason_lexer.mll" +# 769 "src/reason-parser/reason_lexer.mll" ( () ) -# 2908 "src/reason-parser/reason_lexer.ml" +# 2958 "src/reason-parser/reason_lexer.ml" | 1 -> let -# 802 "src/reason-parser/reason_lexer.mll" +# 770 "src/reason-parser/reason_lexer.mll" space -# 2914 "src/reason-parser/reason_lexer.ml" +# 2964 "src/reason-parser/reason_lexer.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in -# 803 "src/reason-parser/reason_lexer.mll" +# 771 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false (String.length space); if in_comment () then store_lexeme lexbuf; string lexbuf ) -# 2921 "src/reason-parser/reason_lexer.ml" +# 2971 "src/reason-parser/reason_lexer.ml" | 2 -> -# 808 "src/reason-parser/reason_lexer.mll" +# 776 "src/reason-parser/reason_lexer.mll" ( if in_comment () then store_lexeme lexbuf else store_string_char(char_for_backslash(Lexing.lexeme_char lexbuf 1)); string lexbuf ) -# 2928 "src/reason-parser/reason_lexer.ml" +# 2978 "src/reason-parser/reason_lexer.ml" | 3 -> -# 812 "src/reason-parser/reason_lexer.mll" +# 780 "src/reason-parser/reason_lexer.mll" ( if in_comment () then store_lexeme lexbuf else store_string_char(char_for_decimal_code lexbuf 1); string lexbuf ) -# 2935 "src/reason-parser/reason_lexer.ml" +# 2985 "src/reason-parser/reason_lexer.ml" | 4 -> -# 816 "src/reason-parser/reason_lexer.mll" +# 784 "src/reason-parser/reason_lexer.mll" ( if in_comment () then store_lexeme lexbuf else store_string_char(char_for_hexadecimal_code lexbuf 2); string lexbuf ) -# 2942 "src/reason-parser/reason_lexer.ml" +# 2992 "src/reason-parser/reason_lexer.ml" | 5 -> -# 820 "src/reason-parser/reason_lexer.mll" +# 788 "src/reason-parser/reason_lexer.mll" ( if in_comment () then string lexbuf else begin @@ -119322,95 +116706,95 @@ let string lexbuf end ) -# 2960 "src/reason-parser/reason_lexer.ml" +# 3010 "src/reason-parser/reason_lexer.ml" | 6 -> -# 835 "src/reason-parser/reason_lexer.mll" +# 803 "src/reason-parser/reason_lexer.mll" ( if not (in_comment ()) then Location.prerr_warning (Location.curr lexbuf) Warnings.Eol_in_string; update_loc lexbuf None 1 false 0; store_lexeme lexbuf; string lexbuf ) -# 2970 "src/reason-parser/reason_lexer.ml" +# 3020 "src/reason-parser/reason_lexer.ml" | 7 -> -# 842 "src/reason-parser/reason_lexer.mll" +# 810 "src/reason-parser/reason_lexer.mll" ( is_in_string := false; raise (Error (Unterminated_string, !string_start_loc)) ) -# 2976 "src/reason-parser/reason_lexer.ml" +# 3026 "src/reason-parser/reason_lexer.ml" | 8 -> -# 845 "src/reason-parser/reason_lexer.mll" +# 813 "src/reason-parser/reason_lexer.mll" ( store_string_char(Lexing.lexeme_char lexbuf 0); string lexbuf ) -# 2982 "src/reason-parser/reason_lexer.ml" +# 3032 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_string_rec lexbuf __ocaml_lex_state and quoted_string delim lexbuf = - __ocaml_lex_quoted_string_rec delim lexbuf 227 + __ocaml_lex_quoted_string_rec delim lexbuf 229 and __ocaml_lex_quoted_string_rec delim lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 850 "src/reason-parser/reason_lexer.mll" +# 818 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 0; store_lexeme lexbuf; quoted_string delim lexbuf ) -# 2997 "src/reason-parser/reason_lexer.ml" +# 3047 "src/reason-parser/reason_lexer.ml" | 1 -> -# 855 "src/reason-parser/reason_lexer.mll" +# 823 "src/reason-parser/reason_lexer.mll" ( is_in_string := false; raise (Error (Unterminated_string, !string_start_loc)) ) -# 3003 "src/reason-parser/reason_lexer.ml" +# 3053 "src/reason-parser/reason_lexer.ml" | 2 -> -# 858 "src/reason-parser/reason_lexer.mll" +# 826 "src/reason-parser/reason_lexer.mll" ( let edelim = Lexing.lexeme lexbuf in let edelim = String.sub edelim 1 (String.length edelim - 2) in if delim = edelim then () else (store_lexeme lexbuf; quoted_string delim lexbuf) ) -# 3013 "src/reason-parser/reason_lexer.ml" +# 3063 "src/reason-parser/reason_lexer.ml" | 3 -> -# 865 "src/reason-parser/reason_lexer.mll" +# 833 "src/reason-parser/reason_lexer.mll" ( store_string_char(Lexing.lexeme_char lexbuf 0); quoted_string delim lexbuf ) -# 3019 "src/reason-parser/reason_lexer.ml" +# 3069 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_quoted_string_rec delim lexbuf __ocaml_lex_state and skip_sharp_bang lexbuf = - __ocaml_lex_skip_sharp_bang_rec lexbuf 236 + __ocaml_lex_skip_sharp_bang_rec lexbuf 238 and __ocaml_lex_skip_sharp_bang_rec lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 870 "src/reason-parser/reason_lexer.mll" +# 838 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 3 false 0 ) -# 3031 "src/reason-parser/reason_lexer.ml" +# 3081 "src/reason-parser/reason_lexer.ml" | 1 -> -# 872 "src/reason-parser/reason_lexer.mll" +# 840 "src/reason-parser/reason_lexer.mll" ( update_loc lexbuf None 1 false 0 ) -# 3036 "src/reason-parser/reason_lexer.ml" +# 3086 "src/reason-parser/reason_lexer.ml" | 2 -> -# 873 "src/reason-parser/reason_lexer.mll" +# 841 "src/reason-parser/reason_lexer.mll" ( () ) -# 3041 "src/reason-parser/reason_lexer.ml" +# 3091 "src/reason-parser/reason_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_sharp_bang_rec lexbuf __ocaml_lex_state ;; -# 875 "src/reason-parser/reason_lexer.mll" +# 843 "src/reason-parser/reason_lexer.mll" (* Filter commnets *) @@ -119591,711 +116975,831 @@ and __ocaml_lex_skip_sharp_bang_rec lexbuf __ocaml_lex_state = preprocessor := Some (init, preprocess) -# 3229 "src/reason-parser/reason_lexer.ml" +# 3279 "src/reason-parser/reason_lexer.ml" end module Reason_parser_explain_raw = struct #1 "reason_parser_explain_raw.ml" let transitions_on_lident = function - | 3780 - | 3777 - | 3773 - | 3769 - | 3768 - | 3767 - | 3766 - | 3765 - | 3764 - | 3762 - | 3750 - | 3746 - | 3744 + | 4075 + | 4072 + | 4068 + | 4066 + | 4065 + | 4064 + | 4063 + | 4062 + | 4060 + | 4059 + | 4058 + | 4054 + | 4051 + | 4050 + | 4048 + | 4047 + | 4044 + | 4042 + | 4041 + | 4039 + | 4038 + | 4037 + | 4036 + | 4035 + | 4029 + | 4028 + | 4027 + | 4026 + | 4023 + | 4012 + | 4008 + | 4005 + | 4002 + | 4000 + | 3997 + | 3996 + | 3994 + | 3991 + | 3989 + | 3988 + | 3984 + | 3980 + | 3978 + | 3976 + | 3974 + | 3972 + | 3969 + | 3968 + | 3966 + | 3964 + | 3962 + | 3960 + | 3958 + | 3956 + | 3954 + | 3952 + | 3950 + | 3948 + | 3946 + | 3944 + | 3942 + | 3940 + | 3938 + | 3936 + | 3934 + | 3932 + | 3931 + | 3929 + | 3927 + | 3924 + | 3922 + | 3919 + | 3901 + | 3898 + | 3888 + | 3884 + | 3881 + | 3878 + | 3876 + | 3875 + | 3872 + | 3870 + | 3868 + | 3866 + | 3865 + | 3862 + | 3860 + | 3858 + | 3856 + | 3854 + | 3852 + | 3843 + | 3841 + | 3838 + | 3835 + | 3834 + | 3832 + | 3831 + | 3828 + | 3826 + | 3823 + | 3822 + | 3821 + | 3820 + | 3819 + | 3810 + | 3809 + | 3803 + | 3802 + | 3794 + | 3793 + | 3759 + | 3758 + | 3756 + | 3753 + | 3749 + | 3745 | 3741 - | 3738 - | 3737 | 3731 - | 3730 | 3729 + | 3728 + | 3724 + | 3721 + | 3720 + | 3719 + | 3717 + | 3716 + | 3714 + | 3713 + | 3711 | 3710 - | 3707 - | 3704 - | 3702 - | 3699 - | 3698 - | 3696 - | 3693 - | 3687 - | 3685 - | 3679 - | 3677 + | 3708 + | 3705 + | 3683 + | 3681 + | 3680 + | 3676 | 3675 - | 3673 + | 3674 + | 3672 | 3670 | 3669 - | 3667 - | 3665 - | 3663 - | 3661 - | 3659 + | 3668 + | 3662 | 3657 | 3655 - | 3653 - | 3651 - | 3649 - | 3647 - | 3645 - | 3643 - | 3641 + | 3650 + | 3648 + | 3642 | 3639 - | 3637 - | 3635 - | 3633 - | 3630 - | 3628 - | 3623 - | 3620 - | 3613 - | 3610 - | 3605 - | 3603 - | 3602 - | 3599 - | 3597 - | 3595 - | 3593 - | 3589 - | 3587 - | 3585 - | 3583 - | 3581 - | 3579 - | 3572 - | 3570 - | 3565 - | 3564 - | 3562 - | 3561 - | 3558 - | 3556 - | 3553 - | 3550 - | 3549 - | 3540 - | 3539 - | 3533 - | 3525 - | 3503 - | 3502 - | 3500 - | 3498 - | 3494 - | 3490 - | 3486 - | 3476 - | 3474 + | 3626 + | 3616 + | 3560 + | 3557 + | 3552 + | 3515 + | 3512 + | 3511 + | 3492 + | 3483 + | 3481 + | 3479 + | 3478 + | 3477 | 3473 - | 3468 - | 3466 - | 3464 - | 3463 - | 3462 - | 3460 - | 3459 - | 3457 - | 3456 - | 3454 + | 3472 + | 3470 | 3453 - | 3451 - | 3448 - | 3426 - | 3424 - | 3423 + | 3452 + | 3439 + | 3438 + | 3435 | 3419 - | 3418 - | 3417 - | 3415 - | 3413 - | 3412 + | 3414 | 3411 - | 3405 + | 3407 | 3400 - | 3398 - | 3393 - | 3391 + | 3397 + | 3396 + | 3395 + | 3390 + | 3386 | 3385 - | 3382 + | 3377 + | 3375 + | 3374 + | 3372 + | 3371 | 3369 - | 3359 - | 3303 - | 3300 + | 3367 + | 3366 + | 3363 + | 3358 + | 3351 + | 3349 + | 3348 + | 3345 + | 3340 + | 3337 + | 3335 + | 3332 + | 3331 + | 3327 + | 3325 + | 3322 + | 3321 + | 3320 + | 3319 + | 3301 | 3295 - | 3258 - | 3255 - | 3254 - | 3239 - | 3230 - | 3228 - | 3226 - | 3225 + | 3293 + | 3292 + | 3290 + | 3289 + | 3287 + | 3285 + | 3284 + | 3281 + | 3278 + | 3273 + | 3266 + | 3252 + | 3250 + | 3248 + | 3222 | 3221 - | 3220 - | 3218 + | 3216 + | 3212 + | 3204 | 3201 | 3200 - | 3188 - | 3187 + | 3198 + | 3196 + | 3193 | 3184 - | 3168 - | 3163 + | 3179 + | 3176 + | 3172 + | 3165 + | 3162 + | 3161 | 3160 - | 3156 - | 3149 + | 3155 + | 3151 + | 3150 | 3146 - | 3145 - | 3144 - | 3139 - | 3135 - | 3134 - | 3126 + | 3143 + | 3136 + | 3131 | 3124 - | 3123 - | 3120 | 3119 - | 3117 - | 3116 - | 3113 - | 3108 - | 3101 - | 3099 + | 3114 + | 3111 + | 3109 + | 3107 + | 3103 + | 3100 | 3098 | 3095 - | 3090 - | 3087 - | 3085 - | 3083 - | 3082 - | 3078 + | 3094 + | 3091 + | 3088 + | 3080 + | 3077 | 3076 - | 3073 - | 3072 | 3071 - | 3070 - | 3052 - | 3046 - | 3044 - | 3043 - | 3042 - | 3039 - | 3038 - | 3036 - | 3035 + | 3066 + | 3063 + | 3061 + | 3058 + | 3056 + | 3053 + | 3051 + | 3049 + | 3040 + | 3037 + | 3034 | 3032 - | 3029 - | 3024 - | 3017 - | 3003 - | 3001 + | 3022 + | 3019 + | 3016 + | 3014 + | 3011 + | 3010 + | 3008 + | 3006 + | 3002 | 2999 - | 2973 + | 2996 + | 2994 + | 2991 + | 2990 + | 2988 + | 2980 + | 2975 | 2972 | 2968 - | 2965 - | 2960 - | 2955 - | 2954 - | 2952 + | 2961 + | 2957 | 2950 + | 2949 | 2947 + | 2946 + | 2945 + | 2944 + | 2941 + | 2940 | 2938 + | 2937 + | 2936 + | 2934 | 2933 + | 2932 | 2930 - | 2926 + | 2928 + | 2927 + | 2922 + | 2921 | 2919 + | 2917 | 2916 | 2915 - | 2914 - | 2909 + | 2913 + | 2912 + | 2911 + | 2906 | 2905 - | 2904 + | 2903 + | 2902 + | 2901 | 2900 + | 2899 + | 2898 | 2897 | 2890 - | 2885 - | 2877 + | 2888 + | 2886 + | 2880 + | 2878 + | 2876 | 2875 - | 2870 + | 2869 | 2867 - | 2865 + | 2864 | 2862 - | 2861 + | 2860 | 2859 - | 2851 + | 2858 + | 2857 + | 2856 + | 2853 + | 2852 | 2848 | 2846 - | 2844 + | 2845 + | 2842 | 2841 + | 2840 + | 2839 + | 2837 | 2836 - | 2834 - | 2831 - | 2829 - | 2826 - | 2823 - | 2821 + | 2835 | 2817 - | 2807 - | 2804 - | 2801 - | 2799 - | 2796 - | 2795 - | 2793 - | 2791 - | 2787 - | 2784 - | 2781 - | 2779 - | 2776 - | 2775 - | 2773 - | 2765 - | 2760 + | 2806 + | 2803 + | 2780 + | 2774 + | 2772 + | 2770 + | 2768 + | 2766 + | 2763 | 2757 - | 2753 - | 2746 - | 2721 + | 2756 + | 2737 | 2720 + | 2717 | 2714 - | 2712 + | 2711 | 2710 - | 2708 - | 2706 + | 2704 | 2702 | 2700 - | 2690 - | 2689 - | 2670 + | 2697 + | 2693 + | 2674 + | 2673 + | 2667 + | 2665 + | 2663 + | 2661 + | 2659 + | 2655 | 2653 - | 2650 - | 2647 - | 2644 - | 2639 - | 2636 - | 2631 - | 2628 - | 2627 - | 2626 - | 2617 - | 2615 - | 2613 - | 2609 - | 2608 + | 2643 + | 2642 + | 2623 | 2606 - | 2605 - | 2604 | 2603 | 2600 - | 2599 | 2597 - | 2596 - | 2595 - | 2593 | 2592 - | 2591 | 2589 - | 2587 - | 2586 + | 2584 | 2581 | 2580 - | 2578 - | 2576 - | 2575 - | 2574 - | 2572 - | 2571 + | 2579 | 2570 + | 2568 + | 2566 | 2565 | 2564 - | 2562 - | 2561 - | 2560 | 2559 - | 2558 - | 2557 - | 2556 - | 2554 + | 2553 + | 2552 + | 2551 + | 2550 | 2549 - | 2547 - | 2545 | 2544 | 2541 - | 2538 + | 2539 + | 2537 + | 2536 | 2535 - | 2533 - | 2532 | 2531 - | 2530 - | 2529 - | 2526 - | 2525 - | 2521 + | 2528 + | 2527 + | 2523 + | 2522 | 2519 - | 2518 | 2516 - | 2515 | 2514 | 2513 - | 2511 | 2510 | 2509 - | 2493 - | 2481 - | 2479 - | 2456 - | 2450 - | 2448 - | 2446 - | 2444 + | 2508 + | 2507 + | 2505 + | 2504 + | 2503 + | 2464 + | 2463 + | 2462 + | 2461 + | 2458 | 2442 - | 2439 - | 2433 - | 2432 - | 2413 - | 2396 - | 2393 - | 2390 + | 2434 + | 2431 + | 2402 + | 2399 + | 2398 + | 2395 + | 2388 | 2387 - | 2386 - | 2380 - | 2378 - | 2376 - | 2373 - | 2369 - | 2363 - | 2357 - | 2353 - | 2352 + | 2371 + | 2368 + | 2354 | 2351 | 2350 - | 2348 | 2347 - | 2346 | 2341 - | 2338 - | 2336 - | 2334 + | 2332 + | 2328 + | 2325 + | 2322 | 2320 - | 2319 - | 2313 + | 2317 + | 2316 + | 2314 | 2311 - | 2307 + | 2309 + | 2308 | 2306 + | 2303 | 2302 - | 2301 + | 2300 + | 2298 + | 2296 + | 2294 + | 2291 + | 2290 + | 2288 + | 2286 + | 2284 + | 2282 + | 2280 + | 2278 + | 2276 | 2274 - | 2273 | 2272 - | 2252 + | 2270 + | 2268 + | 2266 + | 2264 + | 2262 + | 2260 + | 2258 + | 2256 + | 2254 + | 2253 + | 2251 + | 2249 + | 2246 | 2244 | 2241 - | 2212 - | 2209 - | 2208 - | 2205 + | 2223 + | 2220 + | 2210 + | 2204 + | 2201 | 2198 - | 2197 - | 2183 - | 2180 + | 2194 + | 2192 + | 2190 + | 2185 + | 2182 + | 2181 + | 2174 + | 2172 + | 2171 + | 2168 | 2166 - | 2163 - | 2162 - | 2159 + | 2165 + | 2164 + | 2161 + | 2158 + | 2157 + | 2155 | 2153 - | 2140 + | 2148 + | 2145 + | 2142 | 2137 - | 2134 | 2132 - | 2129 + | 2130 | 2128 - | 2126 - | 2123 - | 2118 - | 2116 + | 2123 + | 2121 + | 2115 | 2114 + | 2113 + | 2112 | 2111 + | 2110 | 2109 | 2107 + | 2106 | 2105 + | 2103 | 2102 - | 2101 - | 2099 - | 2097 - | 2095 - | 2093 - | 2091 - | 2089 + | 2100 + | 2096 + | 2092 | 2087 - | 2085 - | 2083 | 2081 - | 2079 - | 2077 - | 2075 - | 2073 - | 2071 - | 2069 + | 2074 | 2067 - | 2065 + | 2064 | 2062 - | 2060 - | 2055 - | 2052 + | 2058 + | 2056 + | 2054 + | 2049 + | 2046 | 2045 - | 2042 - | 2039 + | 2037 | 2035 - | 2033 + | 2034 | 2031 - | 2026 - | 2023 - | 2022 + | 2029 + | 2028 + | 2027 + | 2024 + | 2021 + | 2020 + | 2018 + | 2016 | 2015 - | 2013 + | 2014 | 2012 - | 2009 | 2007 - | 2006 - | 2005 - | 2002 - | 1999 - | 1998 + | 2004 + | 2001 | 1996 - | 1994 - | 1988 - | 1986 - | 1983 + | 1991 + | 1989 + | 1987 + | 1982 | 1980 - | 1975 + | 1974 + | 1973 | 1972 - | 1966 + | 1970 + | 1968 + | 1967 | 1965 | 1964 - | 1963 | 1962 - | 1961 | 1960 + | 1959 | 1958 - | 1957 | 1956 - | 1954 + | 1955 | 1953 | 1951 - | 1947 - | 1943 - | 1938 - | 1932 - | 1925 + | 1950 + | 1948 + | 1946 + | 1945 + | 1944 + | 1939 + | 1934 + | 1931 + | 1929 + | 1927 + | 1924 + | 1922 | 1921 | 1920 + | 1919 + | 1918 | 1917 | 1916 + | 1915 + | 1913 | 1910 - | 1907 + | 1908 | 1905 + | 1903 + | 1902 | 1901 - | 1899 | 1897 + | 1895 + | 1894 + | 1893 | 1892 | 1889 - | 1888 - | 1880 - | 1878 - | 1877 - | 1874 - | 1872 - | 1871 - | 1870 - | 1867 - | 1864 - | 1863 - | 1861 + | 1885 + | 1883 + | 1881 + | 1876 + | 1873 + | 1868 + | 1860 | 1859 - | 1858 | 1856 - | 1851 - | 1848 + | 1854 + | 1852 + | 1850 + | 1849 + | 1847 | 1845 - | 1840 + | 1844 + | 1842 | 1837 - | 1831 - | 1830 - | 1829 + | 1835 + | 1833 | 1827 - | 1825 - | 1824 - | 1822 - | 1821 + | 1823 | 1819 - | 1817 - | 1816 + | 1818 | 1815 - | 1813 - | 1812 - | 1810 - | 1808 + | 1814 + | 1811 + | 1809 | 1807 | 1805 - | 1803 + | 1804 | 1802 | 1800 - | 1798 - | 1794 + | 1799 + | 1797 | 1792 - | 1791 | 1790 - | 1789 | 1788 - | 1787 - | 1786 - | 1784 - | 1781 - | 1779 + | 1780 | 1776 - | 1774 | 1773 - | 1772 + | 1771 + | 1769 | 1768 - | 1766 | 1765 - | 1764 - | 1763 + | 1761 | 1760 + | 1758 | 1757 + | 1755 + | 1753 + | 1751 | 1750 - | 1746 - | 1739 - | 1735 - | 1730 + | 1744 + | 1738 + | 1736 + | 1734 + | 1733 + | 1731 + | 1729 | 1728 + | 1727 + | 1725 | 1723 + | 1721 | 1720 - | 1715 - | 1712 + | 1719 + | 1718 + | 1717 + | 1716 | 1711 - | 1708 - | 1707 - | 1704 - | 1702 - | 1700 - | 1698 - | 1697 - | 1695 + | 1699 | 1693 | 1692 + | 1691 | 1690 + | 1689 + | 1687 | 1685 | 1683 | 1681 - | 1675 - | 1671 - | 1668 - | 1666 - | 1664 - | 1663 - | 1660 - | 1656 - | 1655 | 1653 - | 1652 - | 1650 | 1648 | 1646 - | 1645 | 1644 - | 1643 | 1642 | 1641 - | 1635 + | 1640 + | 1638 + | 1636 + | 1628 | 1625 + | 1623 + | 1620 | 1619 - | 1618 | 1617 - | 1616 | 1615 - | 1614 | 1612 - | 1610 - | 1608 + | 1609 | 1606 + | 1603 + | 1600 + | 1592 + | 1588 + | 1587 + | 1583 + | 1581 + | 1580 + | 1579 + | 1578 + | 1576 + | 1575 | 1573 - | 1571 - | 1569 + | 1572 + | 1570 + | 1568 | 1567 | 1566 - | 1565 + | 1564 | 1563 | 1561 - | 1554 + | 1559 + | 1558 + | 1556 + | 1553 + | 1552 | 1551 - | 1549 - | 1547 - | 1545 - | 1543 - | 1541 - | 1538 - | 1535 - | 1532 + | 1550 + | 1544 + | 1539 + | 1536 + | 1533 + | 1531 | 1529 + | 1526 + | 1524 + | 1523 + | 1522 | 1521 - | 1517 - | 1516 + | 1519 + | 1518 | 1512 - | 1510 | 1509 - | 1508 - | 1506 + | 1507 | 1505 | 1503 - | 1502 - | 1500 - | 1498 + | 1501 + | 1499 | 1497 - | 1496 | 1494 | 1493 | 1491 | 1489 - | 1488 - | 1486 + | 1487 + | 1485 | 1483 - | 1482 | 1481 | 1479 | 1477 + | 1475 | 1473 | 1471 - | 1470 | 1469 | 1467 - | 1466 - | 1460 + | 1465 + | 1463 + | 1461 + | 1459 | 1457 - | 1455 - | 1453 + | 1456 + | 1454 | 1451 | 1449 - | 1447 - | 1445 - | 1442 - | 1441 - | 1439 + | 1440 | 1437 | 1435 | 1433 | 1431 | 1429 | 1427 - | 1425 + | 1424 | 1423 | 1421 | 1419 @@ -120306,431 +117810,386 @@ let transitions_on_lident = function | 1409 | 1407 | 1405 - | 1404 - | 1402 + | 1403 + | 1401 | 1399 | 1397 + | 1395 + | 1393 + | 1391 + | 1389 | 1388 + | 1387 + | 1386 | 1385 | 1383 | 1381 | 1379 + | 1378 | 1377 - | 1375 + | 1374 + | 1373 | 1372 - | 1371 - | 1369 - | 1367 + | 1370 + | 1368 | 1365 - | 1363 - | 1361 - | 1359 - | 1357 + | 1356 | 1355 | 1353 - | 1351 - | 1349 - | 1347 - | 1345 - | 1343 - | 1341 - | 1339 - | 1337 - | 1336 - | 1335 - | 1334 - | 1333 - | 1331 - | 1329 - | 1327 - | 1326 - | 1325 - | 1322 - | 1321 - | 1320 - | 1318 - | 1316 - | 1313 | 1304 - | 1303 - | 1301 + | 1300 + | 1291 + | 1283 + | 1279 + | 1277 + | 1272 + | 1271 + | 1269 + | 1267 + | 1266 | 1264 - | 1260 + | 1258 + | 1256 + | 1255 + | 1252 | 1251 + | 1250 + | 1249 + | 1247 + | 1246 + | 1244 | 1243 + | 1240 | 1239 + | 1238 | 1237 - | 1232 + | 1235 + | 1234 + | 1233 | 1231 - | 1229 - | 1227 - | 1226 | 1224 + | 1223 + | 1222 + | 1221 + | 1219 | 1218 - | 1216 + | 1217 | 1215 | 1212 - | 1211 - | 1210 | 1209 - | 1207 - | 1206 - | 1204 | 1203 - | 1200 - | 1199 - | 1198 - | 1197 - | 1195 - | 1194 - | 1193 - | 1191 - | 1184 - | 1183 - | 1182 - | 1181 - | 1179 - | 1178 - | 1177 - | 1175 - | 1172 - | 1169 - | 1163 - | 1128 - | 1113 - | 1103 - | 1079 - | 1071 - | 1067 - | 1065 - | 1027 - | 1024 - | 1019 - | 982 + | 1156 + | 1141 + | 1131 + | 1107 + | 1099 + | 1095 + | 1093 + | 1055 + | 1052 + | 1047 + | 1010 + | 1007 + | 1006 + | 1004 + | 992 + | 990 + | 984 + | 983 + | 981 + | 980 | 979 - | 976 - | 975 + | 978 | 973 + | 971 + | 970 + | 969 + | 968 + | 966 + | 965 | 963 - | 961 + | 959 + | 957 | 955 - | 954 + | 953 + | 952 | 951 | 950 - | 949 + | 945 | 944 - | 943 - | 942 | 941 - | 940 | 939 | 938 | 937 - | 936 - | 935 | 934 | 933 - | 932 | 931 | 930 - | 929 | 928 - | 927 - | 926 - | 925 | 924 | 923 | 922 - | 921 | 920 - | 919 - | 918 | 917 - | 916 | 915 - | 914 | 913 - | 912 | 911 - | 910 - | 909 - | 908 | 907 | 906 - | 905 - | 904 | 903 - | 902 | 901 - | 900 | 899 | 898 | 897 | 896 | 895 | 894 - | 893 | 892 - | 891 - | 890 | 889 | 887 - | 886 - | 885 | 884 + | 883 | 882 | 881 + | 880 | 879 + | 877 + | 876 | 875 + | 874 | 873 + | 872 | 871 | 870 | 869 | 868 - | 865 - | 863 - | 862 - | 861 + | 866 | 859 - | 858 - | 856 - | 855 - | 854 - | 850 + | 857 + | 851 + | 849 | 842 - | 841 - | 840 - | 838 - | 835 - | 834 - | 832 - | 831 - | 830 - | 827 - | 826 - | 825 - | 824 - | 823 - | 821 + | 837 + | 828 | 819 - | 817 | 815 - | 814 - | 813 | 812 - | 811 - | 810 - | 808 - | 807 - | 806 - | 805 - | 804 - | 803 - | 802 - | 801 - | 800 - | 799 - | 797 + | 798 + | 794 | 790 - | 788 + | 787 + | 783 | 782 | 780 + | 775 | 773 + | 770 + | 769 | 768 - | 761 - | 755 + | 762 + | 753 + | 752 + | 751 + | 750 + | 749 | 747 - | 743 - | 740 - | 732 - | 727 - | 717 + | 742 + | 738 + | 737 + | 733 + | 729 + | 728 + | 723 + | 716 + | 715 + | 714 | 713 - | 708 - | 707 - | 706 - | 704 - | 703 - | 702 - | 700 - | 697 - | 694 + | 712 + | 709 + | 698 + | 696 + | 693 + | 692 + | 691 | 690 - | 688 - | 685 - | 684 - | 681 - | 675 - | 666 - | 665 - | 664 - | 663 - | 662 - | 660 - | 659 + | 682 + | 673 + | 672 + | 671 + | 670 + | 669 + | 668 + | 667 + | 661 | 655 | 652 | 651 - | 646 - | 640 + | 650 + | 647 + | 643 | 639 - | 638 - | 637 - | 636 - | 633 - | 622 - | 620 - | 617 - | 616 - | 615 + | 631 + | 623 + | 621 | 614 - | 606 - | 597 - | 596 - | 595 + | 604 + | 602 | 594 | 593 - | 592 | 591 + | 589 + | 587 | 585 - | 579 - | 576 | 575 - | 574 + | 573 + | 572 | 571 - | 567 - | 563 - | 555 - | 547 + | 565 + | 562 + | 561 + | 560 + | 558 + | 556 + | 554 + | 551 + | 550 + | 548 | 545 - | 538 + | 543 + | 542 + | 541 + | 539 + | 535 + | 531 | 528 - | 526 - | 518 - | 517 - | 515 - | 513 - | 511 - | 509 + | 525 + | 524 + | 519 + | 506 | 500 | 498 - | 497 - | 496 - | 490 - | 488 - | 487 - | 486 - | 484 + | 495 + | 491 + | 485 | 482 - | 480 - | 477 - | 476 + | 481 | 474 - | 471 + | 470 | 469 - | 468 | 467 + | 466 | 465 - | 461 - | 457 - | 454 - | 451 + | 459 | 450 - | 445 - | 432 - | 426 + | 444 + | 437 + | 425 | 424 - | 421 - | 417 + | 419 + | 416 + | 414 + | 413 + | 412 | 411 - | 408 | 407 - | 401 - | 393 + | 406 + | 397 | 391 | 390 - | 388 - | 387 | 381 - | 380 - | 378 + | 379 | 377 - | 376 + | 375 | 373 + | 371 + | 366 | 362 - | 356 - | 349 + | 360 + | 359 + | 357 + | 354 + | 353 + | 348 + | 347 + | 340 | 337 + | 335 | 334 + | 332 | 330 | 329 + | 328 + | 326 + | 325 + | 323 + | 322 + | 321 | 320 - | 314 + | 319 | 313 + | 310 + | 307 + | 306 + | 305 | 304 + | 303 | 302 + | 301 | 300 | 298 - | 296 + | 295 | 294 + | 293 + | 292 + | 291 + | 290 | 289 - | 285 + | 288 + | 287 + | 286 + | 284 | 283 - | 282 + | 281 | 280 - | 277 - | 276 + | 279 + | 274 + | 273 + | 272 | 271 | 270 - | 263 + | 269 + | 268 + | 267 + | 266 + | 265 + | 264 + | 262 + | 261 | 260 + | 259 | 258 | 257 + | 256 | 255 + | 254 | 253 | 252 - | 251 + | 250 | 249 - | 248 + | 247 | 246 - | 245 - | 244 - | 243 - | 242 + | 240 + | 239 + | 237 | 236 - | 233 - | 230 + | 234 + | 232 | 229 - | 228 - | 227 - | 226 - | 225 - | 224 - | 223 - | 221 | 218 - | 217 - | 216 - | 215 | 214 - | 213 - | 212 - | 211 | 210 + | 209 | 208 - | 207 - | 205 - | 204 - | 199 - | 198 - | 197 - | 196 - | 195 - | 194 - | 193 - | 192 - | 191 - | 190 | 188 | 187 | 186 @@ -120741,31 +118200,63 @@ let transitions_on_lident = function | 181 | 180 | 179 + | 178 | 177 | 176 + | 175 | 174 | 173 + | 172 | 171 + | 170 | 169 + | 168 + | 167 | 166 + | 165 + | 164 + | 163 + | 162 + | 161 + | 160 + | 159 + | 158 | 157 + | 156 + | 155 + | 154 | 153 + | 152 + | 151 + | 150 | 149 | 148 | 147 + | 146 + | 145 + | 144 + | 143 + | 142 + | 141 + | 140 + | 139 + | 138 + | 137 + | 136 + | 135 + | 134 + | 133 + | 132 + | 131 + | 129 + | 128 | 127 | 126 | 125 | 124 | 123 - | 122 - | 121 - | 120 - | 119 | 118 | 117 - | 116 - | 115 | 114 | 113 | 112 @@ -120774,15 +118265,12 @@ let transitions_on_lident = function | 109 | 108 | 107 - | 106 - | 105 | 104 | 103 | 102 | 101 | 100 | 99 - | 98 | 97 | 96 | 95 @@ -120791,10 +118279,8 @@ let transitions_on_lident = function | 92 | 91 | 90 - | 89 | 88 | 87 - | 86 | 85 | 84 | 83 @@ -120803,23 +118289,19 @@ let transitions_on_lident = function | 80 | 79 | 78 - | 77 - | 76 | 75 | 74 - | 73 - | 72 | 71 | 70 - | 68 + | 69 | 67 - | 66 | 65 - | 64 - | 63 | 62 + | 59 | 57 | 56 + | 55 + | 54 | 53 | 52 | 51 @@ -120828,6 +118310,8 @@ let transitions_on_lident = function | 48 | 47 | 46 + | 45 + | 44 | 43 | 42 | 41 @@ -120841,8 +118325,10 @@ let transitions_on_lident = function | 33 | 32 | 31 + | 30 | 29 | 28 + | 27 | 26 | 25 | 24 @@ -120850,711 +118336,835 @@ let transitions_on_lident = function | 22 | 21 | 20 + | 19 + | 18 | 17 | 16 + | 15 + | 14 | 13 | 12 | 11 + | 10 | 9 + | 8 | 7 + | 6 | 5 + | 4 | 3 | 1 | 0 -> true | _ -> false let transitions_on_uident = function - | 3780 - | 3777 - | 3773 + | 4075 + | 4072 + | 4068 + | 4066 + | 4065 + | 4064 + | 4063 + | 4062 + | 4060 + | 4059 + | 4058 + | 4055 + | 4054 + | 4052 + | 4051 + | 4050 + | 4047 + | 4044 + | 4041 + | 4040 + | 4039 + | 4038 + | 4037 + | 4036 + | 4035 + | 4034 + | 4032 + | 4031 + | 4029 + | 4028 + | 4027 + | 4026 + | 4023 + | 4020 + | 4016 + | 4013 + | 4012 + | 4010 + | 4008 + | 4005 + | 4002 + | 4000 + | 3997 + | 3996 + | 3994 + | 3991 + | 3989 + | 3988 + | 3984 + | 3980 + | 3978 + | 3976 + | 3974 + | 3972 + | 3969 + | 3968 + | 3966 + | 3964 + | 3962 + | 3960 + | 3958 + | 3956 + | 3954 + | 3952 + | 3950 + | 3948 + | 3946 + | 3944 + | 3942 + | 3940 + | 3938 + | 3936 + | 3934 + | 3932 + | 3931 + | 3929 + | 3927 + | 3924 + | 3901 + | 3898 + | 3888 + | 3884 + | 3881 + | 3878 + | 3872 + | 3870 + | 3868 + | 3865 + | 3862 + | 3858 + | 3856 + | 3854 + | 3852 + | 3843 + | 3841 + | 3838 + | 3837 + | 3835 + | 3834 + | 3832 + | 3831 + | 3828 + | 3826 + | 3823 + | 3822 + | 3821 + | 3820 + | 3819 + | 3818 + | 3810 + | 3809 + | 3803 + | 3802 + | 3794 + | 3793 + | 3783 + | 3782 + | 3779 + | 3778 | 3769 | 3768 - | 3767 - | 3766 - | 3765 | 3764 + | 3763 | 3762 - | 3757 - | 3754 - | 3746 - | 3742 + | 3761 + | 3759 + | 3758 + | 3756 + | 3753 + | 3749 + | 3745 | 3741 - | 3738 - | 3737 - | 3736 - | 3734 - | 3733 | 3731 - | 3730 | 3729 - | 3722 - | 3718 - | 3715 - | 3712 + | 3728 + | 3724 + | 3721 + | 3720 + | 3719 + | 3717 + | 3716 + | 3714 + | 3713 + | 3711 | 3710 - | 3707 - | 3704 - | 3702 - | 3699 - | 3698 - | 3696 - | 3693 - | 3687 - | 3685 - | 3679 - | 3677 + | 3708 + | 3705 + | 3676 | 3675 - | 3673 + | 3674 + | 3672 | 3670 | 3669 - | 3667 - | 3665 - | 3663 - | 3661 - | 3659 + | 3668 + | 3662 | 3657 | 3655 - | 3653 - | 3651 - | 3649 - | 3647 - | 3645 - | 3643 - | 3641 + | 3650 + | 3648 + | 3642 | 3639 - | 3637 + | 3636 | 3635 - | 3633 - | 3630 - | 3628 + | 3620 | 3613 - | 3610 - | 3605 - | 3599 - | 3597 - | 3595 - | 3589 - | 3585 - | 3583 - | 3581 - | 3579 - | 3572 - | 3570 + | 3611 + | 3582 | 3567 - | 3565 - | 3564 - | 3562 - | 3561 - | 3558 - | 3556 - | 3553 - | 3550 - | 3549 - | 3548 - | 3540 - | 3539 - | 3533 - | 3525 - | 3519 - | 3516 + | 3560 + | 3557 + | 3552 + | 3537 + | 3522 + | 3515 + | 3512 | 3511 - | 3507 - | 3506 - | 3505 - | 3503 - | 3502 - | 3500 - | 3498 - | 3494 - | 3490 - | 3486 - | 3476 - | 3474 + | 3492 + | 3483 + | 3481 + | 3479 + | 3478 + | 3477 | 3473 - | 3468 - | 3466 - | 3464 - | 3463 - | 3462 - | 3460 - | 3459 - | 3457 - | 3456 - | 3454 + | 3472 + | 3470 | 3453 - | 3451 - | 3448 + | 3452 + | 3439 + | 3438 + | 3435 | 3419 - | 3418 - | 3417 - | 3415 - | 3413 - | 3412 | 3411 - | 3405 + | 3407 | 3400 | 3398 - | 3393 - | 3391 + | 3397 + | 3396 + | 3395 + | 3390 + | 3386 | 3385 - | 3382 - | 3379 - | 3378 + | 3377 + | 3375 + | 3374 + | 3372 + | 3371 + | 3369 + | 3367 + | 3366 | 3363 + | 3360 + | 3358 | 3356 - | 3354 + | 3355 + | 3351 + | 3349 + | 3348 + | 3345 + | 3340 + | 3335 + | 3327 | 3325 - | 3310 - | 3303 - | 3300 + | 3322 + | 3321 + | 3320 + | 3319 + | 3301 + | 3299 | 3295 - | 3280 - | 3265 - | 3258 - | 3255 - | 3254 - | 3239 - | 3230 - | 3228 - | 3226 + | 3293 + | 3292 + | 3290 + | 3289 + | 3287 + | 3285 + | 3284 + | 3282 + | 3281 + | 3278 + | 3275 + | 3273 + | 3271 + | 3270 + | 3266 + | 3252 + | 3250 + | 3248 + | 3243 + | 3240 + | 3237 + | 3233 + | 3229 | 3225 + | 3223 + | 3222 | 3221 | 3220 - | 3218 - | 3201 - | 3200 - | 3188 - | 3187 + | 3216 + | 3212 + | 3204 + | 3196 | 3184 - | 3168 + | 3176 + | 3172 + | 3165 + | 3163 + | 3162 + | 3161 | 3160 - | 3156 - | 3149 - | 3147 + | 3155 + | 3151 + | 3150 | 3146 - | 3145 - | 3144 - | 3139 - | 3135 - | 3134 - | 3126 + | 3143 + | 3136 + | 3131 | 3124 - | 3123 - | 3120 | 3119 - | 3117 - | 3116 - | 3113 - | 3110 - | 3108 - | 3106 - | 3105 - | 3101 - | 3099 + | 3114 + | 3111 + | 3109 + | 3107 + | 3100 | 3098 | 3095 - | 3090 - | 3085 - | 3078 + | 3088 + | 3080 + | 3077 | 3076 - | 3073 - | 3072 | 3071 - | 3070 - | 3052 - | 3050 - | 3046 - | 3044 - | 3043 - | 3042 - | 3039 - | 3038 - | 3036 - | 3035 - | 3033 + | 3066 + | 3063 + | 3061 + | 3058 + | 3056 + | 3053 + | 3051 + | 3049 + | 3040 + | 3034 | 3032 - | 3029 - | 3026 - | 3024 | 3022 - | 3021 - | 3017 - | 3003 - | 3001 + | 3019 + | 3016 + | 3014 + | 3011 + | 3010 + | 3008 + | 3002 | 2999 + | 2996 | 2994 | 2991 + | 2990 | 2988 - | 2984 | 2980 - | 2976 - | 2974 - | 2973 | 2972 - | 2971 | 2968 - | 2965 - | 2960 - | 2950 + | 2961 + | 2957 + | 2946 | 2938 - | 2930 - | 2926 + | 2934 + | 2927 + | 2922 + | 2921 | 2919 | 2917 | 2916 | 2915 - | 2914 - | 2909 + | 2913 + | 2912 + | 2911 + | 2906 | 2905 - | 2904 + | 2903 + | 2902 + | 2901 | 2900 + | 2899 + | 2898 | 2897 | 2890 - | 2885 - | 2877 + | 2888 + | 2886 + | 2880 + | 2878 + | 2876 | 2875 + | 2869 | 2867 - | 2865 + | 2864 | 2862 + | 2860 | 2859 - | 2851 + | 2858 + | 2857 + | 2856 + | 2852 | 2848 | 2846 - | 2844 + | 2845 + | 2842 | 2841 + | 2840 + | 2839 + | 2837 | 2836 - | 2834 - | 2831 - | 2829 - | 2823 - | 2821 + | 2835 + | 2832 | 2817 - | 2807 - | 2804 - | 2801 - | 2799 - | 2796 - | 2795 - | 2793 - | 2787 - | 2784 - | 2781 - | 2779 - | 2776 - | 2775 - | 2773 - | 2765 + | 2809 + | 2806 + | 2803 + | 2788 + | 2785 + | 2783 + | 2778 + | 2774 + | 2770 + | 2768 + | 2763 + | 2762 + | 2760 + | 2759 | 2757 - | 2753 - | 2746 + | 2756 + | 2748 + | 2744 + | 2741 + | 2737 + | 2733 | 2731 - | 2728 - | 2726 - | 2718 | 2714 - | 2710 | 2708 - | 2702 + | 2704 | 2700 - | 2699 | 2697 - | 2696 - | 2694 | 2693 - | 2690 - | 2689 + | 2684 | 2681 - | 2677 - | 2674 - | 2670 - | 2666 - | 2664 + | 2679 + | 2671 + | 2667 + | 2663 + | 2661 + | 2655 + | 2653 + | 2652 + | 2650 + | 2649 | 2647 - | 2631 - | 2624 + | 2646 + | 2643 + | 2642 + | 2634 + | 2630 + | 2627 + | 2623 + | 2619 | 2617 - | 2613 - | 2605 - | 2597 - | 2593 - | 2586 - | 2581 - | 2580 - | 2578 - | 2576 - | 2575 - | 2574 - | 2572 - | 2571 + | 2600 + | 2584 + | 2577 | 2570 + | 2566 | 2565 | 2564 - | 2562 - | 2561 - | 2560 | 2559 - | 2558 - | 2557 - | 2556 - | 2554 + | 2553 + | 2552 + | 2551 + | 2550 | 2549 - | 2547 - | 2545 | 2544 | 2541 - | 2538 + | 2539 + | 2537 + | 2536 | 2535 - | 2533 | 2532 | 2531 - | 2530 | 2529 - | 2525 - | 2521 + | 2528 + | 2527 + | 2520 | 2519 - | 2518 | 2516 - | 2515 - | 2514 | 2513 - | 2511 + | 2512 | 2510 | 2509 - | 2506 - | 2493 + | 2508 + | 2507 + | 2505 + | 2504 + | 2503 + | 2502 + | 2500 + | 2499 + | 2489 + | 2488 + | 2485 | 2484 - | 2481 - | 2479 + | 2475 + | 2474 + | 2470 + | 2469 + | 2468 + | 2467 | 2464 + | 2463 + | 2462 | 2461 - | 2459 - | 2454 - | 2450 - | 2446 - | 2444 - | 2439 + | 2458 + | 2455 + | 2451 + | 2448 + | 2442 + | 2440 | 2438 - | 2436 - | 2435 - | 2433 - | 2432 - | 2424 - | 2420 - | 2417 - | 2413 - | 2409 - | 2407 - | 2390 - | 2384 + | 2434 + | 2431 + | 2422 + | 2418 + | 2414 + | 2412 + | 2408 + | 2406 + | 2404 + | 2402 + | 2399 + | 2398 + | 2395 + | 2388 + | 2387 | 2380 - | 2376 - | 2373 - | 2369 - | 2363 - | 2357 - | 2353 - | 2352 + | 2371 + | 2368 + | 2361 + | 2358 + | 2356 + | 2354 | 2351 | 2350 - | 2348 | 2347 - | 2346 | 2341 - | 2338 - | 2336 + | 2337 | 2334 - | 2329 - | 2326 + | 2332 + | 2330 + | 2328 + | 2325 + | 2322 + | 2320 | 2317 - | 2313 + | 2316 + | 2314 + | 2311 | 2309 - | 2307 + | 2308 | 2306 + | 2303 | 2302 - | 2301 | 2300 | 2298 - | 2297 + | 2296 + | 2294 | 2291 + | 2290 | 2288 - | 2283 - | 2279 + | 2286 + | 2284 + | 2282 + | 2280 | 2278 - | 2277 + | 2276 | 2274 - | 2273 | 2272 - | 2265 - | 2261 + | 2270 + | 2268 + | 2266 + | 2264 + | 2262 + | 2260 | 2258 - | 2252 - | 2250 - | 2248 - | 2244 - | 2241 - | 2232 - | 2228 - | 2224 - | 2222 - | 2218 - | 2216 - | 2214 - | 2212 - | 2209 - | 2208 - | 2205 + | 2256 + | 2254 + | 2253 + | 2251 + | 2249 + | 2246 + | 2223 + | 2220 + | 2210 + | 2204 + | 2201 | 2198 - | 2197 - | 2188 - | 2183 - | 2180 - | 2173 - | 2170 + | 2194 + | 2192 + | 2190 + | 2182 + | 2181 + | 2174 + | 2171 | 2168 - | 2166 - | 2163 - | 2162 - | 2159 - | 2153 - | 2149 - | 2146 + | 2161 + | 2158 + | 2157 + | 2155 + | 2148 | 2142 - | 2140 | 2137 - | 2134 | 2132 - | 2129 + | 2130 | 2128 - | 2126 | 2123 - | 2118 - | 2116 + | 2121 + | 2115 | 2114 - | 2111 - | 2109 + | 2113 | 2107 - | 2105 + | 2103 | 2102 - | 2101 - | 2099 - | 2097 - | 2095 - | 2093 - | 2091 - | 2089 + | 2100 + | 2096 + | 2092 | 2087 - | 2085 - | 2083 | 2081 - | 2079 - | 2077 - | 2075 - | 2073 - | 2071 - | 2069 + | 2074 | 2067 - | 2065 + | 2064 | 2062 - | 2060 + | 2058 + | 2056 + | 2054 + | 2046 | 2045 - | 2042 - | 2039 - | 2035 - | 2033 + | 2037 + | 2034 | 2031 - | 2023 - | 2022 + | 2024 + | 2021 + | 2020 + | 2018 + | 2016 | 2015 - | 2012 - | 2009 - | 2002 - | 1999 - | 1998 + | 2014 + | 2007 + | 2001 | 1996 - | 1988 - | 1986 + | 1991 + | 1989 + | 1987 + | 1982 | 1980 - | 1975 + | 1974 + | 1973 | 1972 - | 1966 + | 1970 + | 1968 + | 1967 | 1965 | 1964 + | 1962 + | 1960 + | 1959 | 1958 - | 1954 + | 1956 + | 1955 | 1953 | 1951 - | 1947 - | 1943 - | 1938 - | 1932 - | 1925 + | 1950 + | 1948 + | 1945 + | 1944 + | 1939 + | 1934 + | 1931 + | 1929 + | 1927 + | 1924 + | 1922 | 1921 | 1920 + | 1919 + | 1918 | 1917 - | 1916 + | 1913 | 1910 - | 1907 | 1905 - | 1901 - | 1899 | 1897 + | 1892 | 1889 - | 1888 - | 1880 - | 1877 - | 1874 - | 1867 - | 1864 - | 1863 - | 1861 + | 1885 + | 1883 + | 1868 + | 1860 | 1859 - | 1858 - | 1851 - | 1845 - | 1840 + | 1856 + | 1854 + | 1852 + | 1847 | 1837 - | 1831 - | 1830 - | 1829 + | 1835 + | 1833 | 1827 - | 1825 - | 1824 - | 1822 - | 1821 + | 1823 | 1819 - | 1817 - | 1816 + | 1818 | 1815 - | 1813 - | 1812 - | 1810 - | 1808 + | 1814 + | 1811 + | 1809 | 1807 - | 1805 | 1802 - | 1800 - | 1798 - | 1794 | 1792 - | 1791 | 1790 - | 1789 | 1788 - | 1784 - | 1781 + | 1780 | 1776 - | 1768 - | 1763 + | 1773 + | 1771 + | 1765 + | 1761 | 1760 - | 1757 + | 1755 | 1750 - | 1746 - | 1739 - | 1735 - | 1730 - | 1715 - | 1712 + | 1744 + | 1738 + | 1736 + | 1731 + | 1727 + | 1725 + | 1716 | 1711 - | 1708 - | 1707 - | 1704 - | 1702 - | 1700 - | 1695 - | 1685 - | 1683 - | 1681 - | 1675 - | 1671 - | 1668 + | 1699 + | 1689 + | 1687 + | 1685 + | 1683 + | 1676 + | 1673 + | 1670 | 1666 - | 1660 - | 1656 + | 1662 + | 1657 | 1655 - | 1650 + | 1653 + | 1648 + | 1644 + | 1642 | 1641 - | 1635 + | 1640 + | 1638 + | 1636 + | 1628 | 1625 + | 1623 + | 1620 + | 1619 + | 1617 | 1615 - | 1614 | 1612 - | 1610 - | 1608 - | 1601 + | 1609 + | 1606 + | 1603 + | 1600 + | 1599 | 1598 - | 1595 - | 1591 + | 1592 + | 1588 | 1587 - | 1582 + | 1583 + | 1581 | 1580 + | 1579 + | 1578 + | 1576 + | 1575 | 1573 - | 1569 + | 1572 + | 1570 + | 1568 | 1567 | 1566 - | 1565 + | 1564 | 1563 | 1561 - | 1554 + | 1559 + | 1558 + | 1556 | 1551 - | 1549 - | 1547 - | 1545 - | 1543 - | 1541 - | 1538 - | 1535 - | 1532 + | 1550 + | 1544 + | 1539 + | 1536 + | 1533 + | 1531 | 1529 - | 1528 - | 1527 + | 1526 + | 1524 + | 1523 + | 1522 | 1521 - | 1517 - | 1516 + | 1519 + | 1518 | 1512 - | 1510 | 1509 - | 1508 - | 1506 + | 1507 | 1505 | 1503 - | 1502 - | 1500 - | 1498 + | 1501 + | 1499 | 1497 - | 1496 | 1494 | 1493 | 1491 | 1489 - | 1488 - | 1486 + | 1487 + | 1485 + | 1483 | 1481 | 1479 | 1477 + | 1475 | 1473 | 1471 - | 1470 | 1469 | 1467 - | 1466 - | 1460 + | 1465 + | 1463 + | 1461 + | 1459 | 1457 - | 1455 - | 1453 + | 1456 + | 1454 | 1451 | 1449 - | 1447 - | 1445 - | 1442 - | 1441 - | 1439 + | 1440 | 1437 | 1435 | 1433 | 1431 | 1429 | 1427 - | 1425 + | 1424 | 1423 | 1421 | 1419 @@ -121565,424 +119175,391 @@ let transitions_on_uident = function | 1409 | 1407 | 1405 - | 1404 - | 1402 + | 1403 + | 1401 | 1399 | 1397 - | 1388 - | 1385 + | 1395 + | 1393 + | 1391 + | 1389 + | 1387 + | 1386 | 1383 | 1381 - | 1379 | 1377 - | 1375 + | 1374 + | 1373 | 1372 - | 1371 - | 1369 - | 1367 + | 1370 | 1365 | 1363 - | 1361 - | 1359 - | 1357 + | 1360 + | 1356 | 1355 | 1353 - | 1351 - | 1349 - | 1347 - | 1345 - | 1343 + | 1352 + | 1342 | 1341 - | 1339 + | 1338 | 1337 - | 1335 - | 1334 - | 1331 - | 1329 - | 1325 + | 1328 + | 1327 + | 1323 | 1322 - | 1321 - | 1320 - | 1318 - | 1313 - | 1311 - | 1308 | 1304 - | 1303 - | 1301 | 1300 - | 1294 + | 1298 + | 1297 | 1291 - | 1286 - | 1282 + | 1283 + | 1279 + | 1277 + | 1272 + | 1271 + | 1269 + | 1267 + | 1266 | 1264 - | 1260 | 1258 - | 1257 + | 1256 + | 1255 + | 1253 + | 1252 | 1251 + | 1250 + | 1249 + | 1247 + | 1244 | 1243 + | 1240 | 1239 + | 1238 | 1237 - | 1232 + | 1235 + | 1234 + | 1233 | 1231 - | 1229 - | 1227 - | 1226 + | 1230 + | 1225 | 1224 + | 1223 + | 1222 + | 1221 + | 1219 | 1218 - | 1216 + | 1217 | 1215 | 1213 - | 1212 - | 1211 - | 1210 | 1209 - | 1207 - | 1204 + | 1208 + | 1206 + | 1205 | 1203 - | 1200 - | 1199 - | 1198 - | 1197 - | 1195 - | 1194 - | 1193 + | 1192 | 1191 - | 1190 - | 1185 - | 1184 - | 1183 - | 1182 - | 1181 - | 1179 + | 1188 + | 1187 | 1178 | 1177 - | 1175 | 1173 - | 1169 - | 1168 - | 1166 - | 1165 - | 1163 + | 1172 + | 1157 | 1156 - | 1153 - | 1148 - | 1144 - | 1129 + | 1155 + | 1135 | 1128 - | 1127 + | 1126 | 1107 - | 1100 - | 1098 - | 1079 - | 1071 - | 1067 - | 1065 - | 1049 - | 1034 - | 1027 - | 1024 - | 1019 + | 1099 + | 1095 + | 1093 + | 1077 + | 1062 + | 1055 + | 1052 + | 1047 + | 1032 + | 1017 + | 1010 + | 1007 + | 1006 | 1004 - | 989 - | 982 + | 992 + | 990 + | 986 + | 984 + | 983 + | 981 + | 980 | 979 - | 976 + | 978 + | 977 | 975 + | 974 | 973 + | 972 + | 971 + | 970 + | 969 + | 968 + | 966 + | 965 | 963 - | 961 + | 959 | 957 | 955 - | 954 + | 953 + | 952 | 951 | 950 - | 949 - | 948 - | 946 | 945 | 944 - | 943 - | 942 - | 941 - | 940 | 939 | 938 | 937 - | 936 - | 935 - | 934 | 933 - | 932 | 931 | 930 - | 929 | 928 - | 927 - | 926 - | 925 | 924 - | 923 | 922 - | 921 | 920 - | 919 - | 918 | 917 - | 916 | 915 - | 914 | 913 - | 912 | 911 - | 910 - | 909 - | 908 | 907 | 906 - | 905 - | 904 | 903 - | 902 | 901 - | 900 - | 899 | 898 | 897 - | 896 - | 895 - | 894 - | 893 | 892 - | 891 - | 890 | 889 - | 888 | 887 - | 886 - | 885 | 884 - | 882 + | 883 | 881 + | 880 | 879 - | 875 + | 874 | 873 - | 871 + | 872 | 870 | 869 | 868 - | 863 - | 862 - | 861 - | 858 - | 856 - | 855 - | 854 - | 850 + | 866 + | 859 + | 857 + | 851 + | 849 | 842 - | 840 - | 838 - | 835 - | 834 - | 832 - | 831 - | 830 - | 827 - | 826 - | 821 + | 828 | 819 - | 817 | 815 - | 814 | 812 - | 811 - | 810 - | 805 - | 804 - | 803 - | 801 - | 800 - | 799 - | 797 + | 798 + | 794 | 790 - | 788 + | 787 + | 783 | 782 | 780 | 773 - | 761 - | 755 + | 770 + | 769 + | 768 + | 767 + | 762 + | 753 + | 752 + | 751 + | 750 + | 749 | 747 - | 743 - | 740 - | 732 - | 727 - | 717 + | 742 + | 738 + | 737 + | 733 + | 729 + | 728 + | 723 + | 716 + | 715 + | 714 | 713 - | 708 - | 707 - | 706 - | 704 - | 703 - | 702 - | 700 - | 697 - | 694 - | 688 - | 685 + | 712 + | 709 + | 696 + | 693 + | 692 + | 691 + | 690 + | 689 | 684 - | 681 - | 680 - | 675 - | 666 - | 665 - | 664 - | 663 - | 662 - | 660 - | 659 + | 683 + | 682 + | 673 + | 672 + | 671 + | 670 + | 669 + | 668 + | 667 + | 661 | 655 | 652 | 651 - | 646 + | 650 + | 647 + | 643 | 640 | 639 - | 638 - | 637 - | 636 - | 633 - | 620 - | 617 - | 616 - | 615 + | 631 + | 623 + | 621 | 614 - | 613 - | 608 - | 607 - | 606 - | 597 - | 596 - | 595 + | 611 + | 604 + | 602 | 594 | 593 - | 592 | 591 | 585 - | 579 - | 576 | 575 - | 574 + | 573 + | 572 | 571 - | 567 - | 564 - | 563 - | 555 - | 547 + | 565 + | 562 + | 561 + | 560 + | 558 + | 556 + | 554 + | 551 + | 550 | 545 - | 538 + | 539 | 535 + | 531 | 528 - | 526 - | 518 - | 517 - | 515 - | 509 - | 500 - | 498 - | 497 - | 496 - | 490 - | 488 - | 487 - | 486 - | 484 + | 525 + | 524 + | 519 + | 495 + | 491 + | 485 | 482 - | 480 - | 477 - | 476 - | 471 + | 481 + | 474 + | 470 + | 469 + | 467 + | 466 | 465 - | 461 - | 457 - | 454 - | 451 + | 459 | 450 - | 445 - | 421 - | 417 + | 444 + | 437 + | 425 + | 424 + | 419 + | 416 + | 413 + | 412 | 411 - | 408 | 407 - | 401 - | 393 - | 391 - | 390 - | 388 - | 387 + | 406 | 381 - | 380 - | 378 | 377 - | 376 | 373 + | 366 | 362 - | 356 - | 349 + | 360 + | 359 + | 357 + | 354 + | 353 + | 348 + | 347 + | 340 | 337 + | 335 | 334 - | 330 | 329 + | 328 + | 326 + | 325 + | 319 + | 307 + | 306 + | 305 | 304 + | 303 + | 302 + | 301 | 300 - | 296 + | 298 + | 295 + | 294 + | 293 + | 292 + | 291 + | 290 | 289 - | 285 + | 288 + | 287 + | 286 | 283 - | 282 + | 281 | 280 - | 277 - | 276 + | 279 + | 275 + | 273 + | 272 | 271 | 270 - | 263 + | 269 + | 268 + | 267 + | 266 + | 265 + | 264 + | 261 | 260 + | 259 | 258 | 257 + | 256 + | 255 + | 254 + | 253 | 252 - | 251 + | 250 | 249 - | 248 - | 242 - | 230 + | 247 + | 246 + | 240 + | 239 + | 237 + | 236 + | 234 + | 232 | 229 - | 228 - | 227 - | 226 - | 225 - | 224 - | 223 - | 221 | 218 - | 217 - | 216 - | 215 | 214 - | 213 - | 212 - | 211 | 210 - | 207 - | 205 - | 204 - | 200 - | 198 + | 209 + | 208 + | 202 + | 199 | 197 - | 196 | 195 - | 194 | 193 - | 192 - | 191 | 190 + | 188 | 187 | 186 | 185 @@ -121992,23 +119569,57 @@ let transitions_on_uident = function | 181 | 180 | 179 + | 178 + | 177 | 176 + | 175 | 174 | 173 + | 172 | 171 + | 170 | 169 + | 168 + | 167 | 166 + | 165 + | 164 + | 163 + | 162 + | 161 + | 160 + | 159 + | 158 | 157 + | 156 + | 155 + | 154 | 153 + | 152 + | 151 + | 150 | 149 | 148 | 147 + | 146 + | 145 + | 144 + | 143 + | 142 | 141 + | 140 + | 139 | 138 + | 137 | 136 + | 135 | 134 + | 133 | 132 + | 131 + | 130 | 129 + | 128 | 127 | 126 | 125 @@ -122016,12 +119627,8 @@ let transitions_on_uident = function | 123 | 122 | 121 - | 120 - | 119 | 118 | 117 - | 116 - | 115 | 114 | 113 | 112 @@ -122030,27 +119637,17 @@ let transitions_on_uident = function | 109 | 108 | 107 - | 106 - | 105 | 104 - | 103 | 102 | 101 | 100 | 99 - | 98 - | 97 - | 96 - | 95 - | 94 | 93 | 92 | 91 | 90 - | 89 | 88 | 87 - | 86 | 85 | 84 | 83 @@ -122059,26 +119656,20 @@ let transitions_on_uident = function | 80 | 79 | 78 - | 77 - | 76 | 75 | 74 - | 73 - | 72 | 71 | 70 | 69 - | 68 | 67 | 66 | 65 - | 64 - | 63 | 62 - | 61 - | 60 + | 59 | 57 | 56 + | 55 + | 54 | 53 | 52 | 51 @@ -122087,16 +119678,25 @@ let transitions_on_uident = function | 48 | 47 | 46 + | 45 + | 44 | 43 + | 42 | 41 | 40 | 39 | 38 + | 37 + | 36 + | 35 + | 34 | 33 | 32 | 31 + | 30 | 29 | 28 + | 27 | 26 | 25 | 24 @@ -122104,1196 +119704,1310 @@ let transitions_on_uident = function | 22 | 21 | 20 + | 19 + | 18 | 17 | 16 + | 15 + | 14 | 13 | 12 | 11 + | 10 | 9 | 8 | 7 + | 6 | 5 + | 4 | 3 | 1 | 0 -> true | _ -> false let transitions_on_semi = function - | 3779 + | 4074 + | 4071 + | 4066 + | 4065 + | 4064 + | 4062 + | 4061 + | 4059 + | 4058 + | 4057 + | 4054 + | 4051 + | 4050 + | 4049 + | 4047 + | 4041 + | 4038 + | 4037 + | 4033 + | 4028 + | 4027 + | 4026 + | 4025 + | 4024 + | 4023 + | 4022 + | 4018 + | 4015 + | 4012 + | 4009 + | 4007 + | 4006 + | 4004 + | 4001 + | 3999 + | 3995 + | 3993 + | 3990 + | 3989 + | 3988 + | 3986 + | 3985 + | 3982 + | 3980 + | 3979 + | 3977 + | 3975 + | 3973 + | 3971 + | 3970 + | 3967 + | 3965 + | 3963 + | 3961 + | 3959 + | 3957 + | 3955 + | 3953 + | 3951 + | 3949 + | 3947 + | 3945 + | 3943 + | 3941 + | 3939 + | 3935 + | 3933 + | 3931 + | 3930 + | 3928 + | 3926 + | 3925 + | 3924 + | 3923 + | 3920 + | 3918 + | 3917 + | 3916 + | 3912 + | 3911 + | 3907 + | 3903 + | 3900 + | 3894 + | 3890 + | 3887 + | 3886 + | 3885 + | 3883 + | 3881 + | 3873 + | 3869 + | 3865 + | 3859 + | 3849 + | 3848 + | 3847 + | 3844 + | 3842 + | 3838 + | 3836 + | 3833 + | 3831 + | 3830 + | 3822 + | 3821 + | 3817 + | 3816 + | 3815 + | 3814 + | 3813 + | 3812 + | 3811 + | 3810 + | 3808 + | 3801 + | 3797 + | 3792 + | 3791 + | 3790 + | 3789 + | 3788 + | 3787 + | 3786 + | 3785 + | 3784 + | 3780 + | 3777 | 3776 + | 3775 + | 3774 + | 3773 + | 3772 | 3771 | 3770 - | 3768 - | 3767 - | 3764 - | 3763 - | 3761 - | 3760 - | 3759 - | 3756 - | 3753 - | 3752 - | 3751 - | 3749 - | 3743 - | 3740 - | 3739 - | 3735 + | 3766 + | 3765 + | 3758 + | 3757 | 3730 - | 3729 - | 3728 - | 3727 - | 3726 - | 3725 - | 3724 + | 3722 | 3720 + | 3719 | 3717 + | 3716 | 3714 + | 3713 | 3711 - | 3709 + | 3710 | 3708 - | 3706 + | 3704 | 3703 - | 3701 - | 3697 - | 3695 + | 3699 | 3692 - | 3691 - | 3690 - | 3688 - | 3687 - | 3686 - | 3683 - | 3681 | 3680 + | 3679 | 3678 | 3676 + | 3675 | 3674 | 3672 - | 3671 + | 3670 | 3668 | 3666 | 3664 - | 3662 - | 3660 + | 3661 + | 3659 | 3658 | 3656 | 3654 | 3652 - | 3650 - | 3648 - | 3646 - | 3644 - | 3642 - | 3640 - | 3636 - | 3634 + | 3645 + | 3643 + | 3641 + | 3639 + | 3637 + | 3633 | 3632 | 3631 + | 3630 | 3629 - | 3627 - | 3626 | 3625 | 3624 | 3621 | 3619 - | 3618 - | 3616 - | 3615 - | 3614 | 3612 | 3610 - | 3600 + | 3609 + | 3608 + | 3607 + | 3606 + | 3605 + | 3604 + | 3603 + | 3602 + | 3601 + | 3599 + | 3598 + | 3597 | 3596 + | 3595 + | 3594 + | 3593 | 3592 + | 3591 + | 3589 + | 3588 | 3586 + | 3585 + | 3584 + | 3583 + | 3581 + | 3580 + | 3579 + | 3578 | 3577 | 3576 - | 3575 + | 3574 | 3573 | 3571 + | 3570 + | 3569 | 3568 | 3566 + | 3565 + | 3564 | 3563 + | 3562 | 3561 - | 3560 - | 3552 + | 3559 + | 3558 + | 3556 + | 3555 + | 3554 + | 3553 | 3551 + | 3550 + | 3549 + | 3548 | 3547 | 3546 - | 3545 | 3544 | 3543 - | 3542 | 3541 | 3540 + | 3539 | 3538 + | 3536 + | 3535 + | 3534 + | 3533 | 3532 + | 3531 + | 3529 | 3528 + | 3526 + | 3525 | 3524 | 3523 - | 3522 | 3521 | 3520 + | 3519 + | 3518 | 3517 - | 3515 + | 3516 | 3514 | 3513 - | 3512 + | 3510 | 3509 | 3508 - | 3502 - | 3501 - | 3475 - | 3465 - | 3463 - | 3462 - | 3460 - | 3459 - | 3457 - | 3456 - | 3454 - | 3453 - | 3451 + | 3507 + | 3506 + | 3497 + | 3494 + | 3492 + | 3490 + | 3486 + | 3483 + | 3481 + | 3479 + | 3477 + | 3473 + | 3472 + | 3470 + | 3469 + | 3468 + | 3466 + | 3449 | 3447 | 3446 | 3442 + | 3439 + | 3438 | 3435 - | 3423 - | 3422 - | 3421 - | 3419 - | 3418 - | 3417 - | 3415 - | 3413 - | 3411 - | 3409 - | 3407 - | 3404 - | 3402 - | 3401 - | 3399 - | 3397 + | 3433 + | 3432 + | 3430 + | 3429 | 3395 - | 3388 - | 3386 - | 3384 - | 3382 - | 3380 - | 3376 + | 3383 + | 3377 | 3375 | 3374 - | 3373 - | 3372 - | 3368 - | 3367 - | 3364 - | 3362 - | 3355 - | 3353 - | 3352 - | 3351 - | 3350 - | 3349 - | 3348 - | 3347 - | 3346 - | 3345 - | 3344 - | 3342 - | 3341 - | 3340 - | 3339 - | 3338 - | 3337 - | 3336 + | 3372 + | 3371 + | 3367 + | 3366 + | 3362 + | 3357 + | 3350 | 3335 - | 3334 | 3332 | 3331 | 3329 - | 3328 - | 3327 - | 3326 - | 3324 - | 3323 | 3322 | 3321 - | 3320 | 3319 + | 3318 | 3317 | 3316 | 3314 | 3313 - | 3312 | 3311 - | 3309 + | 3310 | 3308 | 3307 - | 3306 | 3305 | 3304 - | 3302 - | 3301 - | 3299 - | 3298 - | 3297 - | 3296 - | 3294 + | 3303 + | 3300 + | 3295 | 3293 | 3292 - | 3291 | 3290 | 3289 - | 3287 - | 3286 + | 3285 | 3284 | 3283 - | 3282 - | 3281 - | 3279 - | 3278 | 3277 - | 3276 - | 3275 - | 3274 | 3272 - | 3271 - | 3269 - | 3268 - | 3267 - | 3266 - | 3264 - | 3263 + | 3265 | 3262 - | 3261 - | 3260 - | 3259 - | 3257 - | 3256 - | 3253 - | 3252 - | 3251 - | 3250 - | 3249 + | 3247 + | 3246 + | 3245 | 3244 + | 3242 | 3241 | 3239 - | 3237 - | 3233 + | 3238 + | 3236 + | 3234 + | 3232 | 3230 | 3228 - | 3225 + | 3227 + | 3224 | 3221 - | 3220 - | 3218 - | 3217 - | 3216 | 3214 + | 3213 + | 3210 + | 3209 + | 3207 + | 3202 + | 3201 + | 3200 + | 3198 | 3197 | 3195 + | 3194 + | 3192 | 3191 + | 3190 + | 3189 | 3188 | 3187 - | 3184 + | 3185 + | 3183 | 3182 - | 3181 - | 3179 | 3178 + | 3175 + | 3174 + | 3171 + | 3170 + | 3168 + | 3166 + | 3160 + | 3159 + | 3158 + | 3157 + | 3154 + | 3153 + | 3149 + | 3148 + | 3145 | 3144 + | 3142 + | 3141 + | 3140 + | 3139 + | 3138 + | 3137 + | 3135 + | 3134 | 3132 + | 3130 + | 3129 + | 3127 | 3126 + | 3125 | 3124 - | 3123 - | 3117 - | 3116 - | 3112 - | 3107 - | 3100 + | 3119 + | 3114 + | 3110 + | 3109 + | 3108 + | 3103 + | 3101 + | 3096 + | 3094 + | 3091 | 3085 + | 3084 | 3083 | 3082 - | 3080 - | 3073 - | 3072 - | 3070 - | 3069 - | 3068 - | 3067 - | 3065 - | 3064 + | 3081 + | 3076 + | 3071 + | 3066 | 3062 | 3061 + | 3060 | 3059 - | 3058 - | 3056 - | 3055 | 3054 - | 3051 - | 3046 - | 3044 - | 3043 - | 3036 + | 3050 + | 3038 + | 3037 | 3035 - | 3034 - | 3028 + | 3031 + | 3030 + | 3024 | 3023 - | 3016 - | 3011 + | 3021 + | 3020 + | 3018 + | 3015 + | 3013 + | 3009 + | 3007 + | 3006 + | 3004 + | 3003 + | 3001 + | 3000 | 2998 - | 2997 - | 2996 | 2995 | 2993 - | 2992 - | 2990 | 2989 | 2987 | 2985 + | 2984 | 2983 | 2981 | 2979 | 2978 - | 2975 - | 2972 + | 2974 + | 2971 + | 2970 | 2967 | 2966 - | 2963 + | 2964 | 2962 - | 2958 - | 2956 + | 2959 + | 2957 | 2955 - | 2954 - | 2952 - | 2951 + | 2953 + | 2950 | 2949 - | 2948 - | 2946 + | 2947 | 2945 | 2944 - | 2943 - | 2942 - | 2941 - | 2939 + | 2940 | 2937 | 2936 + | 2933 | 2932 - | 2929 + | 2930 | 2928 - | 2925 + | 2926 | 2924 - | 2922 - | 2920 - | 2914 - | 2913 + | 2919 + | 2917 + | 2916 + | 2915 | 2912 | 2911 - | 2908 - | 2907 - | 2903 - | 2902 + | 2909 + | 2906 + | 2905 + | 2901 + | 2900 | 2899 | 2898 - | 2896 - | 2895 - | 2894 - | 2893 - | 2892 - | 2891 - | 2889 - | 2888 - | 2886 - | 2884 - | 2883 - | 2881 - | 2880 - | 2879 - | 2878 - | 2877 + | 2897 | 2876 - | 2870 - | 2868 - | 2863 - | 2861 + | 2875 + | 2859 + | 2857 | 2856 - | 2855 - | 2854 - | 2853 | 2852 - | 2847 | 2846 | 2845 - | 2837 - | 2832 - | 2828 - | 2827 - | 2826 + | 2840 + | 2839 + | 2836 + | 2835 + | 2833 + | 2825 | 2824 - | 2820 - | 2815 - | 2809 - | 2808 - | 2806 - | 2805 - | 2803 + | 2822 + | 2821 + | 2813 + | 2811 + | 2802 | 2800 | 2798 + | 2797 + | 2795 | 2794 + | 2793 | 2792 | 2791 - | 2789 - | 2788 + | 2790 + | 2787 | 2786 - | 2785 - | 2783 - | 2780 - | 2778 - | 2774 - | 2772 - | 2770 + | 2782 + | 2781 + | 2779 + | 2777 + | 2771 | 2769 - | 2768 - | 2766 + | 2765 | 2764 - | 2763 - | 2759 + | 2761 | 2756 | 2755 + | 2754 + | 2753 | 2752 | 2751 - | 2749 - | 2747 - | 2744 - | 2742 + | 2750 + | 2746 + | 2743 | 2740 + | 2739 | 2738 - | 2737 - | 2736 | 2735 | 2734 - | 2733 | 2730 | 2729 + | 2726 | 2725 | 2724 | 2723 | 2722 - | 2719 - | 2717 - | 2711 + | 2721 + | 2718 + | 2716 + | 2715 | 2709 - | 2705 - | 2704 - | 2703 + | 2707 | 2701 - | 2698 - | 2695 + | 2699 + | 2697 + | 2693 | 2691 + | 2690 | 2689 | 2688 | 2687 | 2686 - | 2685 - | 2684 | 2683 - | 2679 + | 2682 + | 2678 + | 2677 | 2676 - | 2673 + | 2675 | 2672 - | 2671 - | 2668 - | 2667 - | 2663 + | 2670 + | 2664 | 2662 - | 2659 | 2658 | 2657 | 2656 - | 2655 | 2654 | 2651 - | 2649 | 2648 - | 2643 + | 2644 | 2642 | 2641 | 2640 + | 2639 + | 2638 | 2637 - | 2635 - | 2634 - | 2633 + | 2636 | 2632 + | 2629 + | 2626 | 2625 - | 2623 - | 2622 + | 2624 | 2621 | 2620 - | 2614 + | 2616 + | 2615 | 2612 + | 2611 + | 2610 | 2609 | 2608 - | 2606 + | 2607 | 2604 - | 2603 - | 2599 + | 2602 + | 2601 | 2596 | 2595 - | 2592 - | 2591 - | 2589 + | 2594 + | 2593 + | 2590 + | 2588 | 2587 + | 2586 | 2585 - | 2583 | 2578 | 2576 | 2575 | 2574 - | 2571 - | 2570 - | 2568 - | 2565 + | 2573 + | 2567 | 2564 - | 2560 - | 2559 + | 2563 + | 2561 | 2558 - | 2557 | 2556 + | 2552 + | 2551 + | 2550 + | 2548 + | 2547 + | 2546 | 2545 - | 2544 - | 2532 - | 2530 - | 2529 + | 2542 + | 2540 + | 2539 + | 2538 + | 2536 + | 2535 + | 2534 + | 2531 + | 2528 + | 2527 + | 2526 | 2525 + | 2524 + | 2521 | 2519 - | 2518 - | 2514 | 2513 - | 2510 - | 2509 + | 2511 | 2507 - | 2499 + | 2506 + | 2505 + | 2501 | 2498 + | 2497 | 2496 | 2495 - | 2488 + | 2494 + | 2493 + | 2492 + | 2491 + | 2490 | 2486 + | 2483 + | 2482 + | 2481 + | 2480 + | 2479 | 2478 + | 2477 | 2476 - | 2474 - | 2473 + | 2472 | 2471 - | 2470 - | 2469 - | 2468 - | 2467 - | 2466 + | 2465 | 2463 | 2462 + | 2461 + | 2460 + | 2459 | 2458 | 2457 - | 2455 | 2453 - | 2447 + | 2450 + | 2446 | 2445 + | 2444 | 2441 - | 2440 - | 2437 + | 2439 + | 2435 + | 2433 | 2432 - | 2431 - | 2430 - | 2429 - | 2428 | 2427 - | 2426 - | 2422 - | 2419 + | 2425 + | 2424 + | 2423 + | 2420 + | 2417 | 2416 - | 2415 - | 2414 + | 2413 | 2411 | 2410 - | 2406 - | 2405 - | 2402 + | 2407 + | 2403 | 2401 | 2400 - | 2399 - | 2398 - | 2397 - | 2394 - | 2392 + | 2393 | 2391 - | 2385 - | 2383 + | 2390 + | 2389 + | 2384 + | 2378 | 2377 - | 2375 + | 2374 | 2373 - | 2368 - | 2367 - | 2365 + | 2372 + | 2370 + | 2369 + | 2366 + | 2364 + | 2363 | 2362 - | 2360 - | 2356 + | 2359 | 2355 - | 2354 - | 2351 - | 2350 - | 2349 - | 2345 + | 2353 + | 2352 | 2344 | 2343 | 2342 - | 2339 - | 2337 + | 2340 | 2336 | 2335 - | 2333 | 2332 - | 2331 - | 2328 - | 2325 + | 2329 + | 2327 + | 2326 | 2324 - | 2323 - | 2322 | 2321 - | 2318 - | 2316 + | 2319 + | 2315 + | 2313 | 2310 + | 2309 | 2308 | 2305 | 2304 - | 2303 + | 2302 + | 2301 | 2299 - | 2296 + | 2297 | 2295 - | 2294 | 2293 | 2292 | 2289 | 2287 - | 2286 | 2285 - | 2284 + | 2283 | 2281 - | 2280 + | 2279 + | 2277 | 2275 | 2273 - | 2272 | 2271 - | 2270 | 2269 - | 2268 | 2267 + | 2265 | 2263 - | 2260 - | 2256 + | 2261 + | 2257 | 2255 - | 2254 - | 2251 - | 2249 + | 2253 + | 2252 + | 2250 + | 2248 + | 2247 + | 2246 | 2245 - | 2243 | 2242 - | 2237 - | 2235 + | 2240 + | 2239 + | 2238 | 2234 | 2233 - | 2230 - | 2227 - | 2226 - | 2223 - | 2221 - | 2220 - | 2217 - | 2213 - | 2211 - | 2210 + | 2229 + | 2225 + | 2222 + | 2216 + | 2212 + | 2207 + | 2206 + | 2205 | 2203 | 2201 - | 2200 - | 2199 + | 2198 + | 2197 + | 2196 | 2194 - | 2193 + | 2192 | 2191 + | 2187 | 2186 - | 2185 | 2184 + | 2183 | 2182 | 2181 + | 2180 + | 2179 | 2178 | 2176 - | 2175 - | 2174 - | 2171 - | 2167 - | 2165 - | 2164 + | 2169 + | 2163 + | 2162 + | 2160 + | 2159 | 2156 - | 2155 | 2154 | 2152 - | 2148 + | 2149 | 2147 + | 2146 | 2144 - | 2141 - | 2139 + | 2143 | 2138 - | 2136 | 2133 - | 2131 + | 2129 | 2127 + | 2126 | 2125 - | 2122 - | 2121 - | 2120 + | 2124 + | 2119 + | 2118 | 2117 | 2116 - | 2115 - | 2113 | 2112 + | 2111 | 2110 - | 2108 + | 2109 | 2106 - | 2104 - | 2103 - | 2100 + | 2105 + | 2101 + | 2099 | 2098 | 2096 + | 2095 | 2094 - | 2092 + | 2091 | 2090 | 2088 - | 2086 + | 2085 | 2084 | 2082 | 2080 - | 2078 + | 2079 + | 2077 | 2076 | 2074 - | 2072 + | 2071 + | 2070 + | 2069 | 2068 - | 2066 - | 2064 + | 2065 | 2063 + | 2062 | 2061 - | 2059 + | 2060 | 2058 - | 2057 | 2056 - | 2053 + | 2055 | 2051 | 2050 | 2048 | 2047 | 2046 + | 2045 | 2044 + | 2043 | 2042 | 2039 - | 2038 - | 2037 - | 2035 - | 2033 | 2032 - | 2028 - | 2027 + | 2026 | 2025 - | 2024 | 2023 | 2022 - | 2021 - | 2020 | 2019 | 2017 - | 2010 - | 2004 + | 2013 + | 2011 + | 2008 + | 2006 + | 2005 | 2003 - | 2001 - | 2000 + | 2002 | 1997 - | 1995 - | 1993 - | 1990 - | 1989 + | 1992 + | 1988 + | 1986 | 1985 | 1984 - | 1982 - | 1981 - | 1979 + | 1983 | 1978 | 1977 | 1976 - | 1970 + | 1975 + | 1971 | 1969 | 1968 - | 1967 - | 1963 - | 1962 - | 1961 + | 1965 | 1960 - | 1957 + | 1959 | 1956 - | 1952 - | 1950 - | 1949 - | 1947 - | 1946 - | 1945 - | 1942 - | 1941 + | 1951 + | 1944 | 1939 - | 1936 - | 1935 - | 1933 - | 1931 + | 1934 | 1930 + | 1929 | 1928 - | 1927 - | 1925 - | 1922 - | 1918 + | 1919 | 1914 - | 1913 - | 1912 | 1911 - | 1908 + | 1907 | 1906 - | 1905 - | 1904 - | 1903 - | 1901 + | 1900 | 1899 | 1898 - | 1894 - | 1893 - | 1891 + | 1892 | 1890 - | 1889 - | 1888 - | 1887 | 1886 - | 1885 - | 1882 - | 1875 + | 1880 + | 1879 + | 1878 + | 1877 + | 1874 + | 1872 + | 1871 + | 1870 | 1869 - | 1868 + | 1867 | 1866 - | 1865 + | 1864 | 1862 + | 1861 | 1860 + | 1859 + | 1858 | 1857 | 1855 - | 1852 - | 1850 - | 1849 - | 1847 - | 1846 - | 1844 + | 1853 + | 1848 | 1843 - | 1842 | 1841 - | 1835 + | 1839 + | 1838 | 1834 - | 1833 | 1832 - | 1828 + | 1831 + | 1830 + | 1829 | 1826 | 1825 - | 1822 + | 1824 + | 1821 + | 1819 + | 1818 | 1817 | 1816 + | 1815 + | 1814 | 1813 + | 1812 + | 1810 | 1808 - | 1801 - | 1800 - | 1799 - | 1790 + | 1803 + | 1798 + | 1796 + | 1794 + | 1793 + | 1789 + | 1787 + | 1786 | 1785 - | 1782 + | 1784 + | 1779 | 1778 | 1777 - | 1771 - | 1770 - | 1769 + | 1774 + | 1772 + | 1767 + | 1766 | 1763 - | 1761 - | 1758 - | 1755 - | 1754 - | 1753 + | 1762 + | 1756 | 1752 + | 1750 | 1749 | 1748 - | 1747 - | 1744 + | 1746 + | 1745 | 1743 | 1741 | 1740 + | 1739 + | 1737 + | 1732 | 1727 | 1726 - | 1725 - | 1724 - | 1721 - | 1719 - | 1718 - | 1717 + | 1722 | 1716 - | 1714 + | 1715 + | 1713 | 1712 - | 1711 | 1710 | 1709 - | 1708 - | 1707 - | 1706 - | 1705 - | 1703 - | 1701 - | 1696 - | 1691 | 1689 - | 1687 - | 1686 - | 1682 + | 1688 + | 1684 | 1680 | 1679 | 1678 | 1677 + | 1675 | 1674 - | 1673 | 1672 + | 1671 | 1669 | 1667 - | 1662 + | 1665 + | 1663 | 1661 - | 1658 - | 1657 + | 1660 + | 1656 + | 1654 + | 1653 + | 1652 | 1651 - | 1647 - | 1641 - | 1640 - | 1639 - | 1637 - | 1636 - | 1634 - | 1615 - | 1613 - | 1609 - | 1605 + | 1645 + | 1633 + | 1632 + | 1631 + | 1630 + | 1629 + | 1618 + | 1616 + | 1611 + | 1607 | 1604 - | 1603 | 1602 - | 1600 - | 1599 | 1597 | 1596 + | 1595 | 1594 - | 1592 + | 1591 | 1590 - | 1588 | 1586 | 1585 - | 1581 - | 1579 - | 1578 + | 1582 | 1577 | 1576 - | 1570 + | 1573 + | 1568 + | 1567 + | 1564 | 1559 - | 1558 - | 1557 - | 1556 - | 1555 - | 1546 + | 1550 | 1544 - | 1540 | 1536 - | 1533 + | 1532 | 1531 - | 1526 - | 1525 - | 1524 - | 1523 + | 1530 | 1520 - | 1519 - | 1515 - | 1514 - | 1511 - | 1507 - | 1506 - | 1503 + | 1518 + | 1517 + | 1516 + | 1512 + | 1504 + | 1502 + | 1500 | 1498 - | 1497 - | 1494 - | 1489 + | 1496 + | 1495 + | 1492 + | 1490 + | 1488 + | 1486 + | 1484 + | 1482 | 1480 - | 1479 | 1478 + | 1476 + | 1474 + | 1472 + | 1470 | 1468 | 1466 - | 1465 - | 1464 + | 1462 | 1460 + | 1458 + | 1456 | 1452 | 1450 | 1448 + | 1447 | 1446 + | 1445 | 1444 | 1443 - | 1440 - | 1438 + | 1442 + | 1441 + | 1439 | 1436 | 1434 | 1432 | 1430 | 1428 | 1426 - | 1424 + | 1425 | 1422 | 1420 | 1418 | 1416 | 1414 + | 1412 | 1410 | 1408 | 1406 | 1404 + | 1402 | 1400 | 1398 - | 1396 - | 1395 | 1394 - | 1393 | 1392 - | 1391 | 1390 - | 1389 + | 1388 | 1387 + | 1386 + | 1385 | 1384 | 1382 - | 1380 + | 1379 | 1378 - | 1376 - | 1374 - | 1373 - | 1370 - | 1368 - | 1366 + | 1371 | 1364 | 1362 - | 1360 - | 1358 - | 1356 | 1354 - | 1352 + | 1351 | 1350 + | 1349 | 1348 + | 1347 | 1346 - | 1342 - | 1340 - | 1338 + | 1345 + | 1344 + | 1343 + | 1339 | 1336 | 1335 | 1334 | 1333 | 1332 + | 1331 | 1330 - | 1327 - | 1326 + | 1329 + | 1325 + | 1324 + | 1321 + | 1320 | 1319 - | 1312 + | 1318 + | 1317 + | 1316 + | 1314 + | 1313 + | 1311 | 1310 + | 1309 + | 1308 + | 1307 + | 1306 + | 1305 + | 1303 | 1302 | 1299 - | 1298 - | 1297 - | 1296 | 1295 + | 1294 + | 1293 | 1292 - | 1290 | 1289 | 1288 | 1287 + | 1286 + | 1285 | 1284 - | 1283 + | 1282 | 1281 | 1280 - | 1279 - | 1278 - | 1277 | 1276 - | 1274 + | 1275 | 1273 | 1271 - | 1270 - | 1269 - | 1268 - | 1267 - | 1266 - | 1265 - | 1263 | 1262 + | 1261 + | 1260 | 1259 - | 1255 - | 1254 - | 1253 - | 1252 + | 1258 + | 1256 + | 1250 | 1249 | 1248 | 1247 - | 1246 - | 1245 - | 1244 | 1242 - | 1241 - | 1240 - | 1236 - | 1235 + | 1238 | 1233 - | 1231 + | 1228 | 1222 - | 1221 - | 1220 - | 1219 - | 1218 | 1216 | 1210 - | 1209 - | 1208 | 1207 - | 1202 + | 1201 + | 1200 + | 1199 | 1198 + | 1197 + | 1196 + | 1195 + | 1194 | 1193 - | 1188 + | 1189 + | 1186 + | 1185 + | 1184 + | 1183 | 1182 - | 1176 + | 1181 + | 1180 + | 1179 + | 1175 + | 1174 + | 1171 | 1170 + | 1169 + | 1168 | 1167 + | 1166 + | 1164 + | 1163 | 1161 | 1160 | 1159 | 1158 - | 1157 - | 1154 - | 1152 - | 1151 + | 1153 | 1150 | 1149 + | 1148 + | 1147 | 1146 | 1145 - | 1143 - | 1142 - | 1141 + | 1144 | 1140 | 1139 - | 1138 | 1136 - | 1135 - | 1133 - | 1132 - | 1131 - | 1130 + | 1134 + | 1127 | 1125 + | 1124 + | 1123 | 1122 | 1121 | 1120 @@ -123301,84 +121015,90 @@ let transitions_on_semi = function | 1118 | 1117 | 1116 + | 1114 + | 1113 | 1112 | 1111 + | 1110 + | 1109 | 1108 - | 1106 - | 1099 + | 1105 + | 1104 + | 1103 + | 1102 + | 1100 + | 1098 | 1097 | 1096 - | 1095 - | 1094 - | 1093 | 1092 | 1091 | 1090 | 1089 | 1088 + | 1087 | 1086 - | 1085 | 1084 | 1083 - | 1082 | 1081 | 1080 - | 1077 + | 1079 + | 1078 | 1076 | 1075 | 1074 + | 1073 | 1072 - | 1070 + | 1071 | 1069 | 1068 + | 1066 + | 1065 | 1064 | 1063 - | 1062 | 1061 | 1060 | 1059 | 1058 + | 1057 | 1056 - | 1055 + | 1054 | 1053 - | 1052 | 1051 | 1050 + | 1049 | 1048 - | 1047 | 1046 | 1045 | 1044 | 1043 + | 1042 | 1041 - | 1040 + | 1039 | 1038 - | 1037 | 1036 | 1035 + | 1034 | 1033 - | 1032 | 1031 | 1030 | 1029 | 1028 + | 1027 | 1026 - | 1025 + | 1024 | 1023 - | 1022 | 1021 | 1020 + | 1019 | 1018 - | 1017 | 1016 | 1015 | 1014 | 1013 + | 1012 | 1011 - | 1010 + | 1009 | 1008 - | 1007 - | 1006 | 1005 | 1003 | 1002 @@ -123386,412 +121106,8237 @@ let transitions_on_semi = function | 1000 | 999 | 998 - | 996 - | 995 - | 993 - | 992 + | 997 | 991 - | 990 + | 989 | 988 - | 987 - | 986 | 985 - | 984 | 983 | 981 - | 978 - | 977 - | 974 - | 972 - | 971 - | 970 + | 976 | 969 - | 968 | 967 - | 965 - | 962 - | 960 - | 959 - | 956 - | 954 - | 952 - | 947 - | 885 + | 964 + | 948 + | 946 + | 943 + | 942 + | 940 + | 932 + | 899 + | 896 + | 895 + | 893 | 883 + | 882 + | 881 | 880 - | 867 - | 866 - | 864 - | 857 + | 878 + | 877 + | 876 + | 875 + | 874 + | 873 + | 872 + | 871 + | 862 + | 861 + | 854 + | 853 + | 846 + | 844 + | 842 + | 841 + | 840 + | 835 + | 834 + | 831 + | 829 + | 827 | 825 | 824 + | 823 | 822 + | 821 + | 818 + | 817 | 814 - | 813 - | 812 | 811 - | 809 | 808 | 807 - | 806 - | 805 | 804 | 803 | 802 + | 801 + | 800 + | 797 + | 796 | 793 - | 792 - | 785 - | 784 - | 777 - | 775 - | 773 + | 786 + | 783 + | 778 + | 776 + | 774 | 772 | 771 + | 769 + | 767 | 766 | 765 | 764 + | 763 | 762 + | 761 | 760 - | 759 + | 758 | 757 - | 753 + | 756 + | 755 + | 754 | 752 - | 751 - | 750 - | 749 - | 746 + | 747 | 745 - | 742 - | 739 - | 737 + | 743 + | 741 | 736 | 735 - | 733 - | 731 - | 730 | 726 - | 723 + | 725 | 722 - | 721 - | 720 | 719 - | 716 + | 717 | 715 - | 712 + | 714 + | 713 + | 711 + | 710 | 709 - | 707 - | 706 - | 705 - | 703 + | 699 + | 697 | 695 | 694 - | 691 + | 692 | 689 + | 688 | 687 | 686 + | 685 | 684 - | 683 + | 682 + | 681 | 680 - | 679 | 678 | 677 | 676 | 675 | 674 - | 673 - | 671 - | 670 - | 669 - | 668 - | 667 - | 665 + | 672 + | 659 | 658 - | 657 - | 649 - | 648 + | 656 + | 653 + | 651 + | 646 | 645 - | 643 - | 641 - | 639 + | 642 | 638 | 637 - | 635 | 634 | 633 - | 623 - | 621 - | 619 + | 632 | 618 - | 616 + | 617 + | 615 | 613 - | 612 - | 611 | 610 | 609 - | 608 - | 606 | 605 - | 604 - | 602 + | 603 | 601 | 600 - | 599 | 598 - | 596 - | 583 - | 582 - | 580 - | 577 - | 575 + | 597 + | 595 + | 592 + | 586 + | 574 | 570 | 569 + | 568 + | 567 | 566 - | 562 - | 561 - | 558 + | 560 + | 559 | 557 - | 556 - | 542 - | 541 - | 539 + | 555 + | 554 + | 553 + | 552 + | 547 + | 546 + | 540 + | 538 | 537 - | 534 + | 536 | 533 + | 532 + | 530 | 529 | 527 + | 526 | 525 - | 524 | 522 | 521 - | 519 + | 520 + | 518 + | 517 | 516 - | 510 + | 515 + | 514 + | 511 + | 509 + | 505 + | 503 | 499 - | 495 + | 497 | 494 - | 493 - | 492 - | 491 - | 486 - | 485 - | 483 + | 490 | 481 | 480 - | 479 - | 478 - | 473 + | 477 + | 476 + | 475 | 472 + | 468 + | 467 | 466 | 464 - | 463 | 462 - | 459 - | 458 - | 456 - | 455 - | 453 - | 452 - | 451 - | 448 | 447 - | 446 | 444 - | 443 - | 442 - | 441 - | 440 - | 437 - | 435 - | 431 - | 429 - | 425 - | 423 - | 420 - | 416 - | 407 - | 406 - | 404 - | 403 + | 428 + | 405 | 402 - | 391 + | 400 + | 395 | 388 - | 384 - | 382 - | 379 - | 378 - | 377 - | 375 - | 371 + | 369 + | 368 + | 367 + | 364 + | 363 + | 361 + | 360 | 359 + | 358 | 356 + | 355 + | 354 + | 351 + | 350 + | 349 + | 345 + | 343 + | 342 + | 341 + | 340 | 336 - | 328 - | 325 - | 323 - | 318 + | 331 + | 327 + | 319 + | 317 + | 316 | 311 + | 304 + | 302 + | 298 + | 294 + | 293 | 292 | 291 - | 290 - | 287 - | 286 - | 284 | 283 - | 282 - | 281 - | 279 | 278 - | 277 - | 274 - | 273 - | 272 - | 268 | 266 - | 265 - | 264 - | 263 - | 259 - | 254 + | 253 | 250 - | 242 - | 240 - | 239 - | 234 - | 227 - | 225 + | 247 + | 243 + | 241 + | 238 + | 235 + | 233 + | 231 + | 230 + | 228 | 221 - | 217 - | 216 - | 215 - | 214 + | 210 + | 209 | 207 - | 203 + | 205 + | 201 + | 198 + | 196 | 192 - | 180 - | 175 - | 172 - | 170 - | 168 - | 167 - | 165 - | 164 - | 149 - | 148 - | 146 - | 144 - | 140 - | 137 - | 135 - | 131 - | 128 - | 126 - | 125 + | 189 + | 187 + | 186 + | 129 + | 113 + | 109 + | 107 + | 103 + | 93 + | 88 + | 85 + | 82 + | 81 + | 77 + | 76 + | 75 + | 72 + | 71 | 68 - | 52 - | 48 - | 46 - | 42 - | 33 - | 29 - | 26 - | 23 - | 22 - | 19 - | 18 - | 17 - | 14 - | 13 - | 10 - | 9 - | 8 - | 5 + | 67 + | 66 + | 62 | 1 -> true | _ -> false -end -module Reason_parser_message -= struct -#1 "reason_parser_message.ml" +end +module Reason_parser_message += struct +#1 "reason_parser_message.ml" + +(* This file was auto-generated based on "reason_parser.messages". *) + +(* Please note that the function [message] can raise [Not_found]. *) + +let message = + fun s -> + match s with + | _ -> + raise Not_found + +end +module Reason_parser_explain += struct +#1 "reason_parser_explain.ml" +(* See the comments in menhir_error_processor.ml *) + +module Parser = Reason_parser +module Interp = Parser.MenhirInterpreter +module Raw = Reason_parser_explain_raw + +let identlike_keywords = + let reverse_table = lazy ( + let table = Hashtbl.create 7 in + Hashtbl.iter (fun k v -> Hashtbl.add table v k) Reason_lexer.keyword_table; + table + ) in + function + | Parser.SIG -> Some "sig" + | Parser.MODULE -> Some "module" + | Parser.BEGIN -> Some "begin" + | Parser.END -> Some "end" + | Parser.OBJECT -> Some "object" + | Parser.SWITCH -> Some "switch" + | Parser.TO -> Some "to" + | Parser.THEN -> Some "then" + | Parser.TYPE -> Some "type" + | token -> + match Hashtbl.find (Lazy.force reverse_table) token with + | name -> Some name + | exception Not_found -> None + +let keyword_confused_with_ident state token = + match identlike_keywords token with + | Some name when Raw.transitions_on_lident state + || Raw.transitions_on_uident state -> + (name ^ " is a reserved keyword, it cannot be used as an identifier. Try `" ^ name ^ "_' instead") + | _ -> raise Not_found + +let uppercased_instead_of_lowercased state token = + match token with + | Parser.UIDENT name when Raw.transitions_on_lident state -> + let name = String.uncapitalize name in + if Hashtbl.mem Reason_lexer.keyword_table name then + "variables and labels should be lowercased" + else + Printf.sprintf "variables and labels should be lowercased. Try `%s'" name + | _ -> raise Not_found + +let semicolon_might_be_missing state _token = + (*let state = Interp.current_state_number env in*) + if Raw.transitions_on_semi state then + "syntax error, consider adding a `;' before" + else + raise Not_found + +let message env (token, startp, endp) = + let state = Interp.current_state_number env in + (* Is there a message for this specific state ? *) + try Reason_parser_message.message state + with Not_found -> + (* Identify a keyword used as an identifier *) + try keyword_confused_with_ident state token + with Not_found -> + (* Identify an uppercased identifier in a lowercase place *) + try uppercased_instead_of_lowercased state token + with Not_found -> + try semicolon_might_be_missing state token + with Not_found -> + (* TODO: we don't know what to say *) + "" + +end +module Easy_format : sig +#1 "easy_format.mli" +(** + Easy_format: indentation made easy. +*) + +(** + This module provides a functional, simplified layer over + the Format module of the standard library. + + Input data must be first modelled as a tree using 3 kinds of nodes: + - atoms + - lists + - labelled nodes + + Atoms represent any text that is guaranteed to be printed as-is. + Lists can model any sequence of items such as arrays of data + or lists of definitions that are labelled with something + like "int main", "let x =" or "x:". +*) + +type wrap = + [ `Wrap_atoms + | `Always_wrap + | `Never_wrap + | `Force_breaks + | `Force_breaks_rec + | `No_breaks ] +(** List wrapping conditions: + - [`Wrap_atoms]: wrap if the list contains only atoms + - [`Always_wrap]: always wrap when needed + - [`Never_wrap]: never wrap, + i.e. the list is either horizontal or vertical + - [`Force_breaks]: align vertically, + i.e. always break line between list items and + align the left edge of each item. + - [`Force_breaks_rec]: same as [`Force_breaks] but turns + any wrappable ancestor node's wrap property ([`Wrap_atoms] + or [`Always_wrap]) into [`Force_breaks]. + - [`No_breaks]: align horizontally, + i.e. never break line between list items +*) + +type label_break = [ + | `Auto + | `Always + | `Always_rec + | `Never +] +(** When to break the line after a [Label]: + - [Auto]: break after the label if there's not enough room + - [Always]: always break after the label + - [Always_rec]: always break after the label and force breaks in all parent + lists and labels, similarly to [`Force_breaks_rec] for lists. + - [Never]: never break after the label +*) + +type style_name = string + +type style = { + tag_open : string; + tag_close : string +} + (** Pair of opening and closing tags that are inserted around + text after pretty-printing. *) + +type atom_param = { + atom_style : style_name option; (** Default: [None] *) +} + +val atom : atom_param + + +(** List-formatting parameters. + Always derive a new set of parameters from an existing record. + See {!Easy_format.list}. +*) +type list_param = { + space_after_opening : bool; (** Whether there must be some whitespace + after the opening string. + Default: [true] *) + space_after_separator : bool; (** Whether there must be some whitespace + after the item separators. + Default: [true] *) + space_before_separator : bool; (** Whether there must be some whitespace + before the item separators. + Default: [false] *) + separators_stick_left : bool; (** Whether the separators must + stick to the item on the left. + Default: [true] *) + space_before_closing : bool; (** Whether there must be some whitespace + before the closing string. + Default: [true] *) + stick_to_label : bool; (** Whether the opening string should be fused + with the preceding label. + Default: [true] *) + align_closing : bool; (** Whether the beginning of the + closing string must be aligned + with the beginning of the opening string + (stick_to_label = false) or + with the beginning of the label if any + (stick_to_label = true). + Default: [true] *) + wrap_body : wrap; (** Defines under which conditions the list body + may be wrapped, i.e. allow several lines + and several list items per line. + Default: [`Wrap_atoms] *) + indent_body : int; (** Extra indentation of the list body. + Default: [2] *) + + list_style : style_name option; (** Default: [None] *) + opening_style : style_name option; (** Default: [None] *) + body_style : style_name option; (** Default: [None] *) + separator_style : style_name option; (** Default: [None] *) + closing_style : style_name option; (** Default: [None] *) +} + +val list : list_param + (** Default list-formatting parameters, using the default values + described in the type definition above. + + In order to make code compatible with future versions of the library, + the record inheritance syntax should be used, e.g. + [ { list with align_closing = false } ]. + If new record fields are added, the program would still compile + and work as before. + *) + +(** Label-formatting parameters. + Always derive a new set of parameters from an existing record. + See {!Easy_format.label}. +*) +type label_param = { + label_break: label_break; + (** Whether to break the line after the label. + Introduced in version 1.2.0. + Default: [`Auto] *) + + space_after_label : bool; + (** Whether there must be some whitespace after the label. + Default: [true] *) + + indent_after_label : int; + (** Extra indentation before the item that comes after a label. + Default: [2] + *) + + label_style : style_name option; + (** Default: [None] *) +} + +val label : label_param + (** Default label-formatting parameters, using the default values + described in the type definition above. + + In order to make code compatible with future versions of the library, + the record inheritance syntax should be used, e.g. + [ { label with indent_after_label = 0 } ]. + If new record fields are added, the program would still compile + and work as before. + *) + + + +type t = + Atom of string * atom_param (** Plain string normally + without line breaks. *) + + | List of + ( + string (* opening *) + * string (* separator *) + * string (* closing *) + * list_param + ) + * t list + (** [List ((opening, separator, closing, param), nodes)] *) + + | Label of (t * label_param) * t + (** [Label ((label, param), node)]: labelled node. *) + + | Custom of (Format.formatter -> unit) + (** User-defined printing function that allows to use the + Format module directly if necessary. It is responsible + for leaving the formatter in a clean state. *) +(** The type of the tree to be pretty-printed. Each node contains + its own formatting parameters. + + Detail of a list node + [List ((opening, separator, closing, param), nodes)]: + + - [opening]: opening string such as ["\{"] ["\["] ["("] ["begin"] [""] etc. + - [separator]: node separator such as [";"] [","] [""] ["+"] ["|"] etc. + - [closing]: closing string such as ["\}"] ["\]"] [")"] ["end"] [""] etc. + - [nodes]: elements of the list. + +*) + +type escape = + [ `None + | `Escape of + ((string -> int -> int -> unit) -> string -> int -> int -> unit) + | `Escape_string of (string -> string) ] + +type styles = (style_name * style) list + +(** The regular pretty-printing functions *) +module Pretty : +sig + val define_styles : Format.formatter -> escape -> styles -> unit + val to_formatter : Format.formatter -> t -> unit + + val to_buffer : ?escape:escape -> ?styles:styles -> Buffer.t -> t -> unit + val to_string : ?escape:escape -> ?styles:styles -> t -> string + val to_channel : ?escape:escape -> ?styles:styles -> out_channel -> t -> unit + val to_stdout : ?escape:escape -> ?styles:styles -> t -> unit + val to_stderr : ?escape:escape -> ?styles:styles -> t -> unit +end + +(** No spacing or newlines other than those in the input data + or those produced by [Custom] printing. *) +module Compact : +sig + val to_buffer : Buffer.t -> t -> unit + val to_string : t -> string + val to_channel : out_channel -> t -> unit + val to_stdout : t -> unit + val to_stderr : t -> unit + val to_formatter : Format.formatter -> t -> unit + end + + +(**/**) + +(** Deprecated. Predefined sets of parameters *) +module Param : +sig + val list_true : list_param + (** Deprecated. All boolean fields set to true. indent_body = 2. *) + + val label_true : label_param + (** Deprecated. All boolean fields set to true. indent_after_label = 2. *) + + val list_false : list_param + (** Deprecated. All boolean fields set to false. indent_body = 2. *) + + val label_false : label_param + (** Deprecated. All boolean fields set to false. indent_after_label = 2. *) +end + + +end = struct +#1 "easy_format.ml" +open Format + +type wrap = [ + | `Wrap_atoms + | `Always_wrap + | `Never_wrap + | `Force_breaks + | `Force_breaks_rec + | `No_breaks +] + +type label_break = [ + | `Auto + | `Always + | `Always_rec + | `Never +] + +type style_name = string +type style = { + tag_open : string; + tag_close : string +} + +type atom_param = { + atom_style : style_name option; +} + +let atom = { + atom_style = None +} + +type list_param = { + space_after_opening : bool; + space_after_separator : bool; + space_before_separator : bool; + separators_stick_left : bool; + space_before_closing : bool; + stick_to_label : bool; + align_closing : bool; + wrap_body : wrap; + indent_body : int; + list_style : style_name option; + opening_style : style_name option; + body_style : style_name option; + separator_style : style_name option; + closing_style : style_name option; +} + +let list = { + space_after_opening = true; + space_after_separator = true; + space_before_separator = false; + separators_stick_left = true; + space_before_closing = true; + stick_to_label = true; + align_closing = true; + wrap_body = `Wrap_atoms; + indent_body = 2; + list_style = None; + opening_style = None; + body_style = None; + separator_style = None; + closing_style = None; +} + +type label_param = { + label_break: label_break; + space_after_label : bool; + indent_after_label : int; + label_style : style_name option; +} + +let label = { + label_break = `Auto; + space_after_label = true; + indent_after_label = 2; + label_style = None; +} + +type t = + Atom of string * atom_param + | List of (string * string * string * list_param) * t list + | Label of (t * label_param) * t + | Custom of (formatter -> unit) + +type escape = + [ `None + | `Escape of + ((string -> int -> int -> unit) -> string -> int -> int -> unit) + | `Escape_string of (string -> string) ] + +type styles = (style_name * style) list + +(* + Transform a tree starting from the leaves, propagating and merging + accumulators until reaching the root. +*) +let propagate_from_leaf_to_root + ~init_acc (* create initial accumulator for a leaf *) + ~merge_acc (* merge two accumulators coming from child nodes *) + ~map_node (* (node, acc) -> (node, acc) *) + x = + + let rec aux x = + match x with + | Atom _ -> + let acc = init_acc x in + map_node x acc + | List (param, children) -> + let new_children, accs = List.split (List.map aux children) in + let acc = List.fold_left merge_acc (init_acc x) accs in + map_node (List (param, new_children)) acc + | Label ((x1, param), x2) -> + let acc0 = init_acc x in + let new_x1, acc1 = aux x1 in + let new_x2, acc2 = aux x2 in + let acc = merge_acc (merge_acc acc0 acc1) acc2 in + map_node (Label ((new_x1, param), new_x2)) acc + | Custom _ -> + let acc = init_acc x in + map_node x acc + in + aux x + +(* + Convert wrappable lists into vertical lists if any of their descendants + has the attribute wrap_body = `Force_breaks_rec. +*) +let propagate_forced_breaks x = + (* acc = whether to force breaks in wrappable lists or labels *) + let init_acc = function + | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _) + | Label ((_, { label_break = `Always_rec }), _) -> true + | Atom _ + | Label _ + | Custom _ + | List _ -> false + in + let merge_acc force_breaks1 force_breaks2 = + force_breaks1 || force_breaks2 + in + let map_node x force_breaks = + match x with + | List ((_, _, _, { wrap_body = `Force_breaks_rec }), _) -> x, true + | List ((_, _, _, { wrap_body = `Force_breaks }), _) -> x, force_breaks + + | List ((op, sep, cl, ({ wrap_body = (`Wrap_atoms + | `Never_wrap + | `Always_wrap) } as p)), + children) -> + if force_breaks then + let p = { p with wrap_body = `Force_breaks } in + List ((op, sep, cl, p), children), true + else + x, false + + | Label ((a, ({ label_break = `Auto } as lp)), b) -> + if force_breaks then + let lp = { lp with label_break = `Always } in + Label ((a, lp), b), true + else + x, false + + | List ((_, _, _, { wrap_body = `No_breaks }), _) + | Label ((_, { label_break = (`Always | `Always_rec | `Never) }), _) + | Atom _ + | Custom _ -> x, force_breaks + in + let new_x, forced_breaks = + propagate_from_leaf_to_root + ~init_acc + ~merge_acc + ~map_node + x + in + new_x + +module Pretty = +struct + (* + Rewrite the tree to be printed. + Currently, this is used only to handle `Force_breaks_rec. + *) + let rewrite x = propagate_forced_breaks x + + (* + Relies on the fact that mark_open_tag and mark_close_tag + are called exactly once before calling pp_output_string once. + It's a reasonable assumption although not guaranteed by the + documentation of the Format module. + *) + let set_escape fmt escape = + let print0, flush0 = pp_get_formatter_output_functions fmt () in + let tagf0 = pp_get_formatter_tag_functions fmt () in + + let is_tag = ref false in + + let mot tag = + is_tag := true; + tagf0.mark_open_tag tag + in + + let mct tag = + is_tag := true; + tagf0.mark_close_tag tag + in + + let print s p n = + if !is_tag then + (print0 s p n; + is_tag := false) + else + escape print0 s p n + in + + let tagf = { + tagf0 with + mark_open_tag = mot; + mark_close_tag = mct + } + in + pp_set_formatter_output_functions fmt print flush0; + pp_set_formatter_tag_functions fmt tagf + + + let set_escape_string fmt esc = + let escape print s p n = + let s0 = String.sub s p n in + let s1 = esc s0 in + print s1 0 (String.length s1) + in + set_escape fmt escape + + + let define_styles fmt escape l = + if l <> [] then ( + pp_set_tags fmt true; + let tbl1 = Hashtbl.create (2 * List.length l) in + let tbl2 = Hashtbl.create (2 * List.length l) in + List.iter ( + fun (style_name, style) -> + Hashtbl.add tbl1 style_name style.tag_open; + Hashtbl.add tbl2 style_name style.tag_close + ) l; + let mark_open_tag style_name = + try Hashtbl.find tbl1 style_name + with Not_found -> "" + in + let mark_close_tag style_name = + try Hashtbl.find tbl2 style_name + with Not_found -> "" + in + + let tagf = { + (pp_get_formatter_tag_functions fmt ()) with + mark_open_tag = mark_open_tag; + mark_close_tag = mark_close_tag + } + in + pp_set_formatter_tag_functions fmt tagf + ); + + (match escape with + `None -> () + | `Escape esc -> set_escape fmt esc + | `Escape_string esc -> set_escape_string fmt esc) + + + let pp_open_xbox fmt p indent = + match p.wrap_body with + `Always_wrap + | `Never_wrap + | `Wrap_atoms -> pp_open_hvbox fmt indent + | `Force_breaks + | `Force_breaks_rec -> pp_open_vbox fmt indent + | `No_breaks -> pp_open_hbox fmt () + + let extra_box p l = + let wrap = + match p.wrap_body with + `Always_wrap -> true + | `Never_wrap + | `Force_breaks + | `Force_breaks_rec + | `No_breaks -> false + | `Wrap_atoms -> + List.for_all (function Atom _ -> true | _ -> false) l + in + if wrap then + ((fun fmt -> pp_open_hovbox fmt 0), + (fun fmt -> pp_close_box fmt ())) + else + ((fun fmt -> ()), + (fun fmt -> ())) + + + let pp_open_nonaligned_box fmt p indent l = + match p.wrap_body with + `Always_wrap -> pp_open_hovbox fmt indent + | `Never_wrap -> pp_open_hvbox fmt indent + | `Wrap_atoms -> + if List.for_all (function Atom _ -> true | _ -> false) l then + pp_open_hovbox fmt indent + else + pp_open_hvbox fmt indent + | `Force_breaks + | `Force_breaks_rec -> pp_open_vbox fmt indent + | `No_breaks -> pp_open_hbox fmt () + + + let open_tag fmt = function + None -> () + | Some s -> pp_open_tag fmt s + + let close_tag fmt = function + None -> () + | Some _ -> pp_close_tag fmt () + + let tag_string fmt o s = + match o with + None -> pp_print_string fmt s + | Some tag -> + pp_open_tag fmt tag; + pp_print_string fmt s; + pp_close_tag fmt () + + let rec fprint_t fmt = function + Atom (s, p) -> + tag_string fmt p.atom_style s; + + | List ((_, _, _, p) as param, l) -> + open_tag fmt p.list_style; + if p.align_closing then + fprint_list fmt None param l + else + fprint_list2 fmt param l; + close_tag fmt p.list_style + + | Label (label, x) -> fprint_pair fmt label x + | Custom f -> f fmt + + and fprint_list_body_stick_left fmt p sep hd tl = + open_tag fmt p.body_style; + fprint_t fmt hd; + List.iter ( + fun x -> + if p.space_before_separator then + pp_print_string fmt " "; + tag_string fmt p.separator_style sep; + if p.space_after_separator then + pp_print_space fmt () + else + pp_print_cut fmt (); + fprint_t fmt x + ) tl; + close_tag fmt p.body_style + + and fprint_list_body_stick_right fmt p sep hd tl = + open_tag fmt p.body_style; + fprint_t fmt hd; + List.iter ( + fun x -> + if p.space_before_separator then + pp_print_space fmt () + else + pp_print_cut fmt (); + tag_string fmt p.separator_style sep; + if p.space_after_separator then + pp_print_string fmt " "; + fprint_t fmt x + ) tl; + close_tag fmt p.body_style + + and fprint_opt_label fmt = function + None -> () + | Some (lab, lp) -> + open_tag fmt lp.label_style; + fprint_t fmt lab; + close_tag fmt lp.label_style; + if lp.space_after_label then + pp_print_string fmt " " + + (* Either horizontal or vertical list *) + and fprint_list fmt label ((op, sep, cl, p) as param) = function + [] -> + fprint_opt_label fmt label; + tag_string fmt p.opening_style op; + if p.space_after_opening || p.space_before_closing then + pp_print_string fmt " "; + tag_string fmt p.closing_style cl + + | hd :: tl as l -> + + if tl = [] || p.separators_stick_left then + fprint_list_stick_left fmt label param hd tl l + else + fprint_list_stick_right fmt label param hd tl l + + + and fprint_list_stick_left fmt label (op, sep, cl, p) hd tl l = + let indent = p.indent_body in + pp_open_xbox fmt p indent; + fprint_opt_label fmt label; + + tag_string fmt p.opening_style op; + + if p.space_after_opening then + pp_print_space fmt () + else + pp_print_cut fmt (); + + let open_extra, close_extra = extra_box p l in + open_extra fmt; + fprint_list_body_stick_left fmt p sep hd tl; + close_extra fmt; + + if p.space_before_closing then + pp_print_break fmt 1 (-indent) + else + pp_print_break fmt 0 (-indent); + tag_string fmt p.closing_style cl; + pp_close_box fmt () + + and fprint_list_stick_right fmt label (op, sep, cl, p) hd tl l = + let base_indent = p.indent_body in + let sep_indent = + String.length sep + (if p.space_after_separator then 1 else 0) + in + let indent = base_indent + sep_indent in + + pp_open_xbox fmt p indent; + fprint_opt_label fmt label; + + tag_string fmt p.opening_style op; + + if p.space_after_opening then + pp_print_space fmt () + else + pp_print_cut fmt (); + + let open_extra, close_extra = extra_box p l in + open_extra fmt; + + fprint_t fmt hd; + List.iter ( + fun x -> + if p.space_before_separator then + pp_print_break fmt 1 (-sep_indent) + else + pp_print_break fmt 0 (-sep_indent); + tag_string fmt p.separator_style sep; + if p.space_after_separator then + pp_print_string fmt " "; + fprint_t fmt x + ) tl; + + close_extra fmt; + + if p.space_before_closing then + pp_print_break fmt 1 (-indent) + else + pp_print_break fmt 0 (-indent); + tag_string fmt p.closing_style cl; + pp_close_box fmt () + + + + (* align_closing = false *) + and fprint_list2 fmt (op, sep, cl, p) = function + [] -> + tag_string fmt p.opening_style op; + if p.space_after_opening || p.space_before_closing then + pp_print_string fmt " "; + tag_string fmt p.closing_style cl + + | hd :: tl as l -> + tag_string fmt p.opening_style op; + if p.space_after_opening then + pp_print_string fmt " "; + + pp_open_nonaligned_box fmt p 0 l ; + if p.separators_stick_left then + fprint_list_body_stick_left fmt p sep hd tl + else + fprint_list_body_stick_right fmt p sep hd tl; + pp_close_box fmt (); + + if p.space_before_closing then + pp_print_string fmt " "; + tag_string fmt p.closing_style cl + + + (* Printing a label:value pair. + + The opening bracket stays on the same line as the key, no matter what, + and the closing bracket is either on the same line + or vertically aligned with the beginning of the key. + *) + and fprint_pair fmt ((lab, lp) as label) x = + match x with + List ((op, sep, cl, p), l) when p.stick_to_label && p.align_closing -> + fprint_list fmt (Some label) (op, sep, cl, p) l + + | _ -> + let indent = lp.indent_after_label in + pp_open_hvbox fmt 0; + + open_tag fmt lp.label_style; + fprint_t fmt lab; + close_tag fmt lp.label_style; + + (match lp.label_break with + | `Auto -> + if lp.space_after_label then + pp_print_break fmt 1 indent + else + pp_print_break fmt 0 indent + | `Always + | `Always_rec -> + pp_force_newline fmt (); + pp_print_string fmt (String.make indent ' ') + | `Never -> + if lp.space_after_label then + pp_print_char fmt ' ' + else + () + ); + fprint_t fmt x; + pp_close_box fmt () + + let to_formatter fmt x = + let x = rewrite x in + fprint_t fmt x; + pp_print_flush fmt () + + let to_buffer ?(escape = `None) ?(styles = []) buf x = + let fmt = Format.formatter_of_buffer buf in + define_styles fmt escape styles; + to_formatter fmt x + + let to_string ?escape ?styles x = + let buf = Buffer.create 500 in + to_buffer ?escape ?styles buf x; + Buffer.contents buf + + let to_channel ?(escape = `None) ?(styles = []) oc x = + let fmt = formatter_of_out_channel oc in + define_styles fmt escape styles; + to_formatter fmt x + + let to_stdout ?escape ?styles x = to_channel ?escape ?styles stdout x + let to_stderr ?escape ?styles x = to_channel ?escape ?styles stderr x + +end + + + + +module Compact = +struct + open Printf + + let rec fprint_t buf = function + Atom (s, _) -> Buffer.add_string buf s + | List (param, l) -> fprint_list buf param l + | Label (label, x) -> fprint_pair buf label x + | Custom f -> + (* Will most likely not be compact *) + let fmt = formatter_of_buffer buf in + f fmt; + pp_print_flush fmt () + + and fprint_list buf (op, sep, cl, _) = function + [] -> bprintf buf "%s%s" op cl + | x :: tl -> + Buffer.add_string buf op; + fprint_t buf x; + List.iter ( + fun x -> + Buffer.add_string buf sep; + fprint_t buf x + ) tl; + Buffer.add_string buf cl + + and fprint_pair buf (label, _) x = + fprint_t buf label; + fprint_t buf x + + + let to_buffer buf x = fprint_t buf x + + let to_string x = + let buf = Buffer.create 500 in + to_buffer buf x; + Buffer.contents buf + + let to_formatter fmt x = + let s = to_string x in + Format.fprintf fmt "%s" s; + pp_print_flush fmt () + + let to_channel oc x = + let buf = Buffer.create 500 in + to_buffer buf x; + Buffer.output_buffer oc buf + + let to_stdout x = to_channel stdout x + let to_stderr x = to_channel stderr x +end + + + + +(* Obsolete *) +module Param = +struct + let list_true = { + space_after_opening = true; + space_after_separator = true; + space_before_separator = true; + separators_stick_left = true; + space_before_closing = true; + stick_to_label = true; + align_closing = true; + wrap_body = `Wrap_atoms; + indent_body = 2; + list_style = None; + opening_style = None; + body_style = None; + separator_style = None; + closing_style = None; + } + + let list_false = { + space_after_opening = false; + space_after_separator = false; + space_before_separator = false; + separators_stick_left = false; + space_before_closing = false; + stick_to_label = false; + align_closing = false; + wrap_body = `Wrap_atoms; + indent_body = 2; + list_style = None; + opening_style = None; + body_style = None; + separator_style = None; + closing_style = None; + } + + let label_true = { + label_break = `Auto; + space_after_label = true; + indent_after_label = 2; + label_style = None; + } + + let label_false = { + label_break = `Auto; + space_after_label = false; + indent_after_label = 2; + label_style = None; + } +end + +end +module Reason_heuristics += struct +#1 "reason_heuristics.ml" +let is_punned_labelled_expression e lbl = + let open Ast_404.Parsetree in + match e.pexp_desc with + | Pexp_ident { txt; _ } + | Pexp_constraint ({pexp_desc = Pexp_ident { txt; _ }; _}, _) + | Pexp_coerce ({pexp_desc = Pexp_ident { txt; _ }; _}, _, _) + -> txt = Longident.parse lbl + | _ -> false + +(* We manually check the length of `Thing.map(foo, bar, baz`, + * in `Thing.map(foo, bar, baz, (a) => doStuff(a))` + * because Easyformat doesn't have a hook to change printing when a list breaks + * + * we check if all arguments aside from the final one are either strings or identifiers, + * where the sum of the string contents and identifier names are less than the print width + *) +let funAppCallbackExceedsWidth ~printWidth ~args ~funExpr () = + let open Ast_404.Parsetree in + let open Ast_404.Asttypes in + let funLen = begin match funExpr.pexp_desc with + | Pexp_ident ident -> + let identList = Longident.flatten ident.txt in + let lengthOfDots = List.length identList - 1 in + let len = List.fold_left (fun acc curr -> + acc + (String.length curr)) lengthOfDots identList in + len + | _ -> -1 + end in + (* eats an argument & substract its length from the printWidth + * as soon as the print width reaches a sub-zero value, + * we know the print width is exceeded & returns *) + let rec aux len = function + | _ when len < 0 -> true + | [] -> false + | arg::args -> + begin match arg with + | (label, ({ pexp_desc = Pexp_ident ident } as e)) -> + let identLen = List.fold_left (fun acc curr -> + acc + (String.length curr) + ) len (Longident.flatten ident.txt) in + begin match label with + | Nolabel -> aux (len - identLen) args + | Labelled s when is_punned_labelled_expression e s -> + aux (len - (identLen + 1)) args + | Labelled s -> + aux (len - (identLen + 2 + String.length s)) args + | Optional s -> + aux (len - (identLen + 3 + String.length s)) args + end + | (label, {pexp_desc = Pexp_constant (Pconst_string (str, _))}) -> + let strLen = String.length str in + begin match label with + | Nolabel -> aux (len - strLen) args + | Labelled s -> + aux (len - (strLen + 2 + String.length s)) args + | Optional s -> + aux (len - (strLen + 3 + String.length s)) args + end + | _ -> + (* if we encounter a non-string or non-identifier argument exit *) + true + end + in + aux (printWidth - funLen) args + +(* + * Whether or not an identiier is small enough to justify omitting the + * trailing comma for single identifier patterns. For single identifier + * patterns, usually the identifier is not "far right" in the document, and + * is one of the last things to require breaking. We can omit the trailing comma + * in these cases because it likely will never render anyways and therefore the + * space taken up by the trailing comma doesn't disrupt wrapping length calculations. + * + * For example, the `X` hardly ever benefits from a trailing comma. + * | X(y) => + *) +let singleTokenPatternOmmitTrail txt = String.length txt < 4 + +(* Indicates whether an expression can be printed with the uncurried + * dot notation. At the moment uncurried function application & definition + * only makes sense in the context of a Pexp_apply or Pexp_fun + * + * Examples: + * [@bs] add(2, 3); -> add(. 2, 3); (* Pexp_apply *) + * setTimeout([@bs] () => Js.log("hola"), 1000); (* Pexp_fun *) + * -> setTimeout((.) => Js.log("hola"), 1000); + *) +let bsExprCanBeUncurried expr = + match Ast_404.Parsetree.(expr.pexp_desc) with + | Pexp_fun _ + | Pexp_apply _ -> true + | _ -> false + +end +module Reason_layout += struct +#1 "reason_layout.ml" +module Comment = Reason_comment + +type break_criterion = + | Never + | IfNeed + | Always + (* Always_rec not only will break, it will break recursively up to the root *) + | Always_rec + +(* + Modeling separators: + Special ability to render the final separator distinctly. This is so we can + replace them when they do/don't occur next to newlines. + + If sepLeft:true + { + final item1 + sep item2 + sep item3 + } + + If sepLeft:false + { + item1 sep + item2 sep + item3 final + } +*) +(* You can't determine the final separator unless you specify a separator *) +type separator = + | NoSep + | Sep of string + | SepFinal of string * string + +(** + * These represent "intent to format" the AST, with some parts being annotated + * with original source location. The benefit of tracking this in an + * intermediate structure, is that we can then interleave comments throughout + * the tree before generating the final representation. That prevents the + * formatting code from having to thread comments everywhere. + * + * The final representation is rendered using Easy_format. + *) +type t = + | SourceMap of Location.t * t (* a layout with location info *) + | Sequence of config * (t list) + | Label of (Easy_format.t -> Easy_format.t -> Easy_format.t) * t * t + | Easy of Easy_format.t + +and config = { + (* Newlines above items that do not have any comments immediately above it. + Only really useful when used with break:Always/Always_rec *) + newlinesAboveItems: int; + (* Newlines above regular comments *) + newlinesAboveComments: int; + (* Newlines above doc comments *) + newlinesAboveDocComments: int; + break: break_criterion; + (* Break setting that becomes activated if a comment becomes interleaved into + * this list. Typically, if not specified, the behavior from [break] will be + * used. + *) + wrap: string * string; + inline: bool * bool; + sep: separator; + indent: int; + sepLeft: bool; + preSpace: bool; + (* Really means space_after_separator *) + postSpace: bool; + pad: bool * bool; + (* A function, because the system might rearrange your previous settings, and + * a function allows you to not be locked into some configuration that is made + * out of date by the formatting system (suppose it removes the separator + * token etc.) Having a function allows you to instruct our formatter how to + * extend the "freshest" notion of the list config when comments are + * interleaved. *) + listConfigIfCommentsInterleaved: (config -> config) option; + + (* Formatting to use if an item in a list had an end-of-line comment appended *) + listConfigIfEolCommentsInterleaved: (config -> config) option; +} + +let string_of_easy = function + | Easy_format.Atom (s,_) -> s + | Easy_format.List (_,_) -> "list" + | Easy_format.Label (_,_) -> "label" + | Easy_format.Custom _ -> "custom" + +let indent_more indent = " " ^ indent + +let dump_easy ppf easy = + let printf fmt = Format.fprintf ppf fmt in + let rec traverse indent = function + | Easy_format.Atom (s,_) -> + printf "%s Atom:'%s'\n" indent s + | Easy_format.List ((opening, sep, closing, config), items) -> + let break = (match config.wrap_body with + | `No_breaks -> "No_breaks" + | `Wrap_atoms -> "Wrap_atoms" + | `Never_wrap -> "Never_wrap" + | `Force_breaks -> "Force_breaks" + | `Force_breaks_rec -> "Force_breaks_rec" + | `Always_wrap -> "Always_wrap") in + printf "%s List: open %s close %s sep %s break %s \n" + indent opening closing sep break; + let _ = List.map (traverse (indent_more indent)) items in + () + | Easy_format.Label ((left, config), right) -> + let break = match config.label_break with + | `Never -> "Never" + | `Always_rec -> "Always_rec" + | `Auto -> "Auto" + | `Always -> "Always" in + printf "%s Label (break = %s): \n" indent break; + printf " %s left \n" indent; + let indent' = indent_more indent in + traverse indent' left; + printf " %s right \n" indent; + traverse indent' right; + | Easy_format.Custom _ -> + printf "custom \n" + in + traverse "" easy + +let dump ppf layout = + let printf fmt = Format.fprintf ppf fmt in + let rec traverse indent = function + | SourceMap (loc, layout) -> + printf "%s SourceMap [(%d:%d)-(%d:%d)]\n" indent + loc.loc_start.Lexing.pos_lnum + (loc.loc_start.Lexing.pos_cnum - loc.loc_start.Lexing.pos_bol) + loc.loc_end.Lexing.pos_lnum + (loc.loc_end.Lexing.pos_cnum - loc.loc_end.Lexing.pos_bol); + traverse (indent_more indent) layout + | Sequence (config, layout_list) -> + let break = match config.break with + | Never -> "Never" + | IfNeed -> "if need" + | Always -> "Always" + | Always_rec -> "Always_rec" in + let sep = match config.sep with + | NoSep -> "NoSep" + | Sep s -> "Sep '" ^ s ^ "'" + | SepFinal (s, finalSep) -> "SepFinal ('" ^ s ^ "', '" ^ finalSep ^ "')" in + printf "%s Sequence of %d, sep: %s, stick_to_left: %s break: %s\n" + indent (List.length layout_list) sep (string_of_bool config.sepLeft) break; + List.iter (traverse (indent_more indent)) layout_list + | Label (_, left, right) -> + printf "%s Label: \n" indent; + printf " %s left \n" indent; + let indent' = indent_more (indent_more indent) in + traverse indent' left; + printf " %s right \n" indent; + traverse indent' right; + | Easy e -> + printf "%s Easy: '%s' \n" indent (string_of_easy e) + in + traverse "" layout + +let source_map ?(loc=Location.none) layout = + if loc = Location.none then layout + else SourceMap (loc, layout) + +let default_list_settings = { + Easy_format.space_after_opening = false; + space_after_separator = false; + space_before_separator = false; + separators_stick_left = true; + space_before_closing = false; + stick_to_label = true; + align_closing = true; + wrap_body = `No_breaks; + indent_body = 0; + list_style = Some "list"; + opening_style = None; + body_style = None; + separator_style = None; + closing_style = None; +} + +let easy_settings_from_config + { break; wrap; inline; indent; sepLeft; preSpace; postSpace; pad; sep } = + (* TODO: Stop handling separators in Easy_format since we handle most of + them before Easy_format anyways. There's just some that we still rely on + Easy_format for. Easy_format's sep wasn't powerful enough. + *) + let (opn, cls) = wrap in + let (padOpn, padCls) = pad in + let (inlineStart, inlineEnd) = inline in + let sepStr = match sep with NoSep -> "" | Sep s | SepFinal(s, _) -> s in + (opn, sepStr, cls, + { default_list_settings with + Easy_format. + wrap_body = (match break with + | Never -> `No_breaks + (* Yes, `Never_wrap is a horrible name - really means "if needed". *) + | IfNeed -> `Never_wrap + | Always -> `Force_breaks + | Always_rec -> `Force_breaks_rec + ); + indent_body = indent; + space_after_separator = postSpace; + space_before_separator = preSpace; + space_after_opening = padOpn; + space_before_closing = padCls; + stick_to_label = inlineStart; + align_closing = not inlineEnd; + }) + +let to_easy_format layout = + let rec traverse = function + | Sequence (config, sublayouts) -> + let items = List.map traverse sublayouts in + Easy_format.List (easy_settings_from_config config, items) + | Label (labelFormatter, left, right) -> + labelFormatter (traverse left) (traverse right) + | SourceMap (_, subLayout) -> + traverse subLayout + | Easy e -> e + in + traverse layout + +(** [getLocFromLayout] recursively takes the unioned location of its children, + * and returns the max one *) +let get_location layout = + let union loc1 loc2 = + match (loc1, loc2) with + | None, _ -> loc2 + | _, None -> loc1 + | Some loc1, Some loc2 -> + Some {loc1 with Location.loc_end = loc2.Location.loc_end} + in + let rec traverse = function + | Sequence (listConfig, subLayouts) -> + let locs = List.map traverse subLayouts in + List.fold_left union None locs + | Label (formatter, left, right) -> + union (traverse left) (traverse right) + | SourceMap (loc, _) -> Some loc + | _ -> None + in + traverse layout + +let is_before ~location layout = + match get_location layout with + | None -> true + | Some loc -> Syntax_util.location_is_before loc location + +let contains_location layout ~location = + match get_location layout with + | None -> false + | Some layout_loc -> Syntax_util.location_contains layout_loc location + +end +module Reason_pprint_ast : sig +#1 "reason_pprint_ast.mli" +open Ast_404.Parsetree + +val configure : + width:int -> + assumeExplicitArity:bool -> constructorLists:string list -> unit + +val createFormatter : unit -> + < + case_list : Format.formatter -> case list -> unit; + core_type : Format.formatter -> core_type -> unit; + expression : Format.formatter -> expression -> unit; + pattern : Format.formatter -> pattern -> unit; + signature : Reason_comment.t list -> Format.formatter -> signature -> unit; + structure : Reason_comment.t list -> Format.formatter -> structure -> unit; + toplevel_phrase : Format.formatter -> toplevel_phrase -> unit; + > + +end = struct +#1 "reason_pprint_ast.ml" +(* + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * Forked from OCaml, which is provided under the license below: + * + * Xavier Leroy, projet Cristal, INRIA Rocquencourt + * + * Copyright © 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Inria + * + * Permission is hereby granted, free of charge, to the Licensee obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense + * under any license of the Licensee's choice, and/or sell copies of the + * Software, subject to the following conditions: + * + * 1. Redistributions of source code must retain the above copyright notice + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * 3. All advertising materials mentioning features or use of the Software + * must display the following acknowledgement: This product includes all or + * parts of the Caml system developed by Inria and its contributors. + * 4. Other than specified in clause 3, neither the name of Inria nor the + * names of its contributors may be used to endorse or promote products + * derived from the Software without specific prior written permission. + * + * Disclaimer + * + * This software is provided by Inria and contributors “as is” and any express + * or implied warranties, including, but not limited to, the implied + * warranties of merchantability and fitness for a particular purpose are + * disclaimed. in no event shall Inria or its contributors be liable for any + * direct, indirect, incidental, special, exemplary, or consequential damages + * (including, but not limited to, procurement of substitute goods or + * services; loss of use, data, or profits; or business interruption) however + * caused and on any theory of liability, whether in contract, strict + * liability, or tort (including negligence or otherwise) arising in any way + * out of the use of this software, even if advised of the possibility of such + * damage. + * + *) + +(* TODO more fine-grained precedence pretty-printing *) + +open Ast_404 +open Asttypes +open Location +open Longident +open Parsetree +open Easy_format +open Syntax_util + +module Comment = Reason_comment +module Layout = Reason_layout + +let source_map = Layout.source_map + +exception NotPossible of string + +let commaTrail = Layout.SepFinal (",", Syntax_util.TrailingCommaMarker.string) +let commaSep = Layout.Sep (",") + +type ruleInfoData = { + reducePrecedence: precedence; + shiftPrecedence: precedence; +} + +and ruleCategory = + (* Printing will be parsed with very high precedence, so not much need to + worry about ensuring it will reduce correctly. In short, you can put + `FunctionApplication` content anywhere around an infix identifier without + wrapping in parens. For example `myFunc x y z` or `if x {y} else {z}` + The layout is kept in list form only to allow for elegant wrapping rules + to take into consideration the *number* of high precedence parsed items. *) + | FunctionApplication of Layout.t list + (* Care should be taken to ensure the rule that caused it to be parsed will + reduce again on the printed output - context should carefully consider + wrapping in parens according to the ruleInfoData. *) + | SpecificInfixPrecedence of ruleInfoData * resolvedRule + (* Not safe to include anywhere between infix operators without wrapping in + parens. This describes expressions like `fun x => x` which doesn't fit into + our simplistic algorithm for printing function applications separated by infix. + + It might be possible to include these in between infix, but there are + tricky rules to determining when these must be guarded by parens (it + depends highly on context that is hard to reason about). It's so nuanced + that it's easier just to always wrap them in parens. *) + | PotentiallyLowPrecedence of Layout.t + (* Simple means it is clearly one token (such as (anything) or [anything] or identifier *) + | Simple of Layout.t + +(* Represents a ruleCategory where the precedence has been resolved. + * The precedence of a ruleCategory gets resolved in `ensureExpression` or + * `ensureContainingRule`. The result is either a plain Layout.t (where + * parens probably have been applied) or an InfixTree containing the operator and + * a left & right resolvedRule. The latter indicates that the precedence has been resolved, + * but the actual formatting is deferred to a later stadium. + * Think `let x = foo |> f |> z |>`, which requires a certain formatting style when + * things break over multiple lines. *) +and resolvedRule = + | LayoutNode of Layout.t + | InfixTree of string * resolvedRule * resolvedRule + +and associativity = + | Right + | Nonassoc + | Left + +and precedenceEntryType = + | TokenPrecedence + | CustomPrecedence + +and precedence = + | Token of string + | Custom of string + +(* Describes the "fixity" of a token, and stores its *printed* representation + should it be rendered as infix/prefix (This rendering may be different than + how it is stored in the AST). *) +and tokenFixity = + (* Such as !simple_expr and ~!simple_expr. These function applications are + considered *almost* "simple" because they may be allowed anywhere a simple + expression is accepted, except for when on the left hand side of a + dot/send. *) + | AlmostSimplePrefix of string + | UnaryPlusPrefix of string + | UnaryMinusPrefix of string + | UnaryNotPrefix of string + | UnaryPostfix of string + | Infix of string + | Normal + +(* Type which represents a resolvedRule's InfixTree flattened *) +type infixChain = + | InfixToken of string + | Layout of Layout.t + +(* Helpers for dealing with extension nodes (%expr) *) + +let expression_extension_sugar x = + if x.pexp_attributes <> [] then None + else match x.pexp_desc with + | Pexp_extension (name, PStr [{pstr_desc = Pstr_eval(expr, [])}]) + when name.txt <> "bs.obj" -> + Some (name, expr) + | _ -> None + +let expression_immediate_extension_sugar x = + match expression_extension_sugar x with + | None -> (None, x) + | Some (name, expr) -> + match expr.pexp_desc with + | Pexp_for _ | Pexp_while _ | Pexp_ifthenelse _ + | Pexp_fun _ | Pexp_function _ | Pexp_newtype _ + | Pexp_try _ | Pexp_match _ -> + (Some name, expr) + | _ -> (None, x) + +let expression_not_immediate_extension_sugar x = + match expression_immediate_extension_sugar x with + | (Some _, _) -> None + | (None, _) -> expression_extension_sugar x + +let add_extension_sugar keyword = function + | None -> keyword + | Some str -> keyword ^ "%" ^ str.txt + +let string_equal : string -> string -> bool = (=) + +let longident_same l1 l2 = + let rec equal l1 l2 = + match l1, l2 with + | Lident l1, Lident l2 -> string_equal l1 l2 + | Ldot (path1, l1), Ldot (path2, l2) -> + equal path1 path2 && string_equal l1 l2 + | Lapply (l11, l12), Lapply (l21, l22) -> + equal l11 l21 && equal l12 l22 + | _ -> false + in + equal l1.txt l2.txt + +(* A variant of List.for_all2 that returns false instead of failing on lists + of different size *) +let for_all2' pred l1 l2 = + List.length l1 = List.length l2 && + List.for_all2 pred l1 l2 + +(* + Checks to see if two types are the same modulo the process of varification + which turns abstract types into type variables of the same name. + For example, [same_ast_modulo_varification] would consider (a => b) and ('a + => 'b) to have the same ast. This is useful in recovering syntactic sugar + for explicit polymorphic types with locally abstract types. + + Does not compare attributes, or extensions intentionally. + + TODO: This has one more issue: We need to compare only accepting t1's type + variables, to be considered compatible with t2's type constructors - not the + other way around. + *) +let same_ast_modulo_varification_and_extensions t1 t2 = + let rec loop t1 t2 = match (t1.ptyp_desc, t2.ptyp_desc) with + (* Importantly, cover the case where type constructors (of the form [a]) + are converted to type vars of the form ['a]. + *) + | (Ptyp_constr({txt=Lident s1}, []), Ptyp_var s2) -> string_equal s1 s2 + (* Now cover the case where type variables (of the form ['a]) are + converted to type constructors of the form [a]. + *) + | (Ptyp_var s1, Ptyp_constr({txt=Lident s2}, [])) -> string_equal s1 s2 + (* Now cover the typical case *) + | (Ptyp_constr(longident1, lst1), Ptyp_constr(longident2, lst2)) -> + longident_same longident1 longident2 && + for_all2' loop lst1 lst2 + | (Ptyp_any, Ptyp_any) -> true + | (Ptyp_var x1, Ptyp_var x2) -> string_equal x1 x2 + | (Ptyp_arrow (label1, core_type1, core_type1'), Ptyp_arrow (label2, core_type2, core_type2')) -> + begin + match label1, label2 with + | Nolabel, Nolabel -> true + | Labelled s1, Labelled s2 -> string_equal s1 s2 + | Optional s1, Optional s2 -> string_equal s1 s2 + | _ -> false + end && + loop core_type1 core_type2 && + loop core_type1' core_type2' + | (Ptyp_tuple lst1, Ptyp_tuple lst2) -> for_all2' loop lst1 lst2 + | (Ptyp_object (lst1, o1), Ptyp_object (lst2, o2)) -> + let tester = fun (s1, attrs1, t1) (s2, attrs2, t2) -> + string_equal s1 s2 && + loop t1 t2 + in + for_all2' tester lst1 lst2 && o1 = o2 + | (Ptyp_class (longident1, lst1), Ptyp_class (longident2, lst2)) -> + longident_same longident1 longident2 && + for_all2' loop lst1 lst2 + | (Ptyp_alias(core_type1, string1), Ptyp_alias(core_type2, string2)) -> + loop core_type1 core_type2 && + string_equal string1 string2 + | (Ptyp_variant(row_field_list1, flag1, lbl_lst_option1), Ptyp_variant(row_field_list2, flag2, lbl_lst_option2)) -> + for_all2' rowFieldEqual row_field_list1 row_field_list2 && + flag1 = flag2 && + lbl_lst_option1 = lbl_lst_option2 + | (Ptyp_poly (string_lst1, core_type1), Ptyp_poly (string_lst2, core_type2))-> + for_all2' string_equal string_lst1 string_lst2 && + loop core_type1 core_type2 + | (Ptyp_package(longident1, lst1), Ptyp_package (longident2, lst2)) -> + longident_same longident1 longident2 && + for_all2' testPackageType lst1 lst2 + | (Ptyp_extension (s1, arg1), Ptyp_extension (s2, arg2)) -> + string_equal s1.txt s2.txt + | _ -> false + and testPackageType (lblLongIdent1, ct1) (lblLongIdent2, ct2) = + longident_same lblLongIdent1 lblLongIdent2 && + loop ct1 ct2 + and rowFieldEqual f1 f2 = match (f1, f2) with + | ((Rtag(label1, attrs1, flag1, lst1)), (Rtag (label2, attrs2, flag2, lst2))) -> + string_equal label1 label2 && + flag1 = flag2 && + for_all2' loop lst1 lst2 + | (Rinherit t1, Rinherit t2) -> loop t1 t2 + | _ -> false + in + loop t1 t2 + +let expandLocation pos ~expand:(startPos, endPos) = + { pos with + loc_start = { + pos.loc_start with + Lexing.pos_cnum = pos.loc_start.Lexing.pos_cnum + startPos + }; + loc_end = { + pos.loc_end with + Lexing.pos_cnum = pos.loc_end.Lexing.pos_cnum + endPos + } + } + +(** Kinds of attributes *) +type attributesPartition = { + arityAttrs : attributes; + docAttrs : attributes; + stdAttrs : attributes; + jsxAttrs : attributes; + uncurried : bool +} + +(** Partition attributes into kinds *) +let rec partitionAttributes ?(allowUncurry=true) attrs : attributesPartition = + match attrs with + | [] -> + {arityAttrs=[]; docAttrs=[]; stdAttrs=[]; jsxAttrs=[]; uncurried = false} + | (({txt = "bs"}, PStr []) as attr)::atTl -> + let partition = partitionAttributes ~allowUncurry atTl in + if allowUncurry then + {partition with uncurried = true} + else {partition with stdAttrs=attr::partition.stdAttrs} + | (({txt="JSX"; loc}, _) as jsx)::atTl -> + let partition = partitionAttributes ~allowUncurry atTl in + {partition with jsxAttrs=jsx::partition.jsxAttrs} + | (({txt="explicit_arity"; loc}, _) as arity_attr)::atTl + | (({txt="implicit_arity"; loc}, _) as arity_attr)::atTl -> + let partition = partitionAttributes ~allowUncurry atTl in + {partition with arityAttrs=arity_attr::partition.arityAttrs} + (*| (({txt="ocaml.text"; loc}, _) as doc)::atTl + | (({txt="ocaml.doc"; loc}, _) as doc)::atTl -> + let partition = partitionAttributes atTl in + {partition with docAttrs=doc::partition.docAttrs}*) + | atHd::atTl -> + let partition = partitionAttributes ~allowUncurry atTl in + {partition with stdAttrs=atHd::partition.stdAttrs} + +let extractStdAttrs attrs = + (partitionAttributes attrs).stdAttrs + +let rec sequentialIfBlocks x = + match x with + | Some ({pexp_desc=Pexp_ifthenelse (e1, e2, els)}) -> ( + let (nestedIfs, finalExpression) = (sequentialIfBlocks els) in + ((e1, e2)::nestedIfs, finalExpression) + ) + | Some e -> ([], Some e) + | None -> ([], None) + +(* + TODO: IDE integration beginning with Vim: + + - Create recovering version of parser that creates regions of "unknown" + content in between let sequence bindings (anything between semicolons, + really). + - Use Easy_format's "style" features to tag each known node. + - Turn those style annotations into editor highlight commands. + - Editors have a set of keys that retrigger the parsing/rehighlighting + process (typically newline/semi/close-brace). + - On every parsing/rehighlighting, this pretty printer can be used to + determine the highlighting of recovered regions, and the editor plugin can + relegate highlighting of malformed regions to the editor which mostly does + so based on token patterns. + +*) + +(* + @avoidSingleTokenWrapping + + +-----------------------------+ + |+------+ | Another label + || let ( \ | + || a | Label | + || o | | The thing to the right of any label must be a + || p _+ label RHS | list in order for it to wrap correctly. Lists + || ): / v | will wrap if they need to/can. NON-lists will + |+--+ sixteenTuple = echoTuple|( wrap (indented) even though they're no lists! + +---/ 0,\---------------------+ To prevent a single item from wrapping, make + 0, an unbreakable list via ensureSingleTokenSticksToLabel. + 0 + ); In general, the best approach for indenting + let bindings is to keep building up labels from + the "let", always ensuring things that you want + to wrap will either be lists or guarded in + [ensureSingleTokenSticksToLabel]. + If you must join several lists together (via =) + (or colon), ensure that joining is done via + [makeList] (which won't break), and that new + list is always appended to the left + hand side of the label. (So that the right hand + side may always be the untouched list that you want + to wrap with aligned closing). + Always make sure rhs of the label are the + + Creating nested labels will preserve the original + indent location ("let" in this + case) as long as that nesting is + done on the left hand side of the labels. + +*) + +(* + Table 2.1. Precedence and associativity. + Precedence from highest to lowest: From RWOC, modified to include != + --------------------------------------- + + Operator prefix Associativity + !..., ?..., ~... Prefix + ., .(, .[ - + function application, constructor, assert, lazy Left associative + -, -. Prefix + **..., lsl, lsr, asr Right associative + *..., /..., %..., mod, land, lor, lxor Left associative + +..., -... Left associative + :: Right associative + @..., ^... Right associative +--- + != Left associative (INFIXOP0 listed first in lexer) + =..., <..., >..., |..., &..., $... Left associative (INFIXOP0) + =, <, > Left associative (IN SAME row as INFIXOP0 listed after) +--- + &, && Right associative + or, || Right associative + , - + :=, = Right associative + if - + ; Right associative + + + Note: It would be much better if &... and |... were in separate precedence + groups just as & and | are. This way, we could encourage custom infix + operators to use one of the two precedences and no one would be confused as + to precedence (leading &, | are intuitive). Two precedence classes for the + majority of infix operators is totally sufficient. + + TODO: Free up the (&) operator from pervasives so it can be reused for + something very common such as string concatenation or list appending. + + let x = tail & head; + *) + +(* "Almost Simple Prefix" function applications parse with the rule: + + `PREFIXOP simple_expr %prec below_DOT_AND_SHARP`, which in turn is almost + considered a "simple expression" (it's acceptable anywhere a simple + expression is except in a couple of edge cases. + + "Unary Prefix" function applications parse with the rule: + + `MINUS epxr %prec prec_unary_minus`, which in turn is considered an + "expression" (not simple). All unary operators are mapped into an identifier + beginning with "~". + + TODO: Migrate all "almost simple prefix" to "unsary prefix". When `!` + becomes "not", then it will make more sense that !myFunc (arg) is parsed as + !(myFunc arg) instead of (!myFunc) arg. + + *) +let almost_simple_prefix_symbols = [ '!'; '?'; '~'] ;; +(* Subset of prefix symbols that have special "unary precedence" *) +let unary_minus_prefix_symbols = [ "~-"; "~-."] ;; +let unary_plus_prefix_symbols = ["~+"; "~+." ] ;; +let infix_symbols = [ '='; '<'; '>'; '@'; '^'; '|'; '&'; '+'; '-'; '*'; '/'; + '$'; '%'; '\\'; '#' ] + +let special_infix_strings = + ["asr"; "land"; "lor"; "lsl"; "lsr"; "lxor"; "mod"; "or"; ":="; "!="; "!=="] + +let updateToken = "=" +let requireIndentFor = [updateToken; ":="] + +let namedArgSym = "~" + +let getPrintableUnaryIdent s = + if List.mem s unary_minus_prefix_symbols || + List.mem s unary_plus_prefix_symbols + then String.sub s 1 (String.length s -1) + else s + +(* determines if the string is an infix string. + checks backwards, first allowing a renaming postfix ("_102") which + may have resulted from Pexp -> Texp -> Pexp translation, then checking + if all the characters in the beginning of the string are valid infix + characters. *) +let printedStringAndFixity = function + | s when List.mem s special_infix_strings -> Infix s + | "^" -> UnaryPostfix "^" + | s when List.mem s.[0] infix_symbols -> Infix s + (* Correctness under assumption that unary operators are stored in AST with + leading "~" *) + | s when List.mem s.[0] almost_simple_prefix_symbols && + not (List.mem s special_infix_strings) && + not (s = "?") -> ( + (* What *kind* of prefix fixity? *) + if List.mem s unary_plus_prefix_symbols then + UnaryPlusPrefix (getPrintableUnaryIdent s) + else if List.mem s unary_minus_prefix_symbols then + UnaryMinusPrefix (getPrintableUnaryIdent s) + else if s = "!" then + UnaryNotPrefix "!" + else + AlmostSimplePrefix s + ) + | _ -> Normal + + +(* Also, this doesn't account for != and !== being infixop!!! *) +let isSimplePrefixToken s = match printedStringAndFixity s with + | AlmostSimplePrefix _ | UnaryPostfix "^" -> true + | _ -> false + + +(* Convenient bank of information that represents the parser's precedence + rankings. Each instance describes a precedence table entry. The function + tests either a token string encountered by the parser, or (in the case of + `CustomPrecedence`) the string name of a custom rule precedence declared + using %prec *) +let rules = [ + [ + (TokenPrecedence, (fun s -> (Nonassoc, isSimplePrefixToken s))); + ]; + [ + (CustomPrecedence, (fun s -> (Nonassoc, s = "prec_unary"))); + ]; + (* Note the special case for "*\*", BARBAR, and LESSMINUS, AMPERSAND(s) *) + [ + (TokenPrecedence, (fun s -> (Right, s = "**"))); + (TokenPrecedence, (fun s -> (Right, String.length s > 1 && s.[0] == '*' && s.[1] == '\\' && s.[2] == '*'))); + (TokenPrecedence, (fun s -> (Right, s = "lsl"))); + (TokenPrecedence, (fun s -> (Right, s = "lsr"))); + (TokenPrecedence, (fun s -> (Right, s = "asr"))); + ]; + [ + (TokenPrecedence, (fun s -> (Left, s.[0] == '*' && (String.length s == 1 || s != "*\\*")))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '/'))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '%' ))); + (TokenPrecedence, (fun s -> (Left, s = "mod" ))); + (TokenPrecedence, (fun s -> (Left, s = "land" ))); + (TokenPrecedence, (fun s -> (Left, s = "lor" ))); + (TokenPrecedence, (fun s -> (Left, s = "lxor" ))); + ]; + [ + (* Even though these use the same *tokens* as unary plus/minus at parse + time, when unparsing infix -/+, the CustomPrecedence rule would be + incorrect to use, and instead we need a rule that models what infix + parsing would use - just the regular token precedence without a custom + precedence. *) + (TokenPrecedence, + (fun s -> ( + Left, + if String.length s > 1 && s.[0] == '+' && s.[1] == '+' then + (* + Explicitly call this out as false because the other ++ case below + should have higher *lexing* priority. ++operator_chars* is considered an + entirely different token than +(non_plus_operator_chars)* + *) + false + else + s.[0] == '+' + ))); + (TokenPrecedence ,(fun s -> (Left, s.[0] == '-' ))); + (TokenPrecedence ,(fun s -> (Left, s = "!" ))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s = "::"))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s.[0] == '@'))); + (TokenPrecedence, (fun s -> (Right, s.[0] == '^'))); + (TokenPrecedence, (fun s -> (Right, String.length s > 1 && s.[0] == '+' && s.[1] == '+'))); + ]; + [ + (TokenPrecedence, (fun s -> (Left, s.[0] == '=' && not (s = "=") && not (s = "=>")))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '<' && not (s = "<")))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '>' && not (s = ">")))); + (TokenPrecedence, (fun s -> (Left, s = "!="))); (* Not preset in the RWO table! *) + (TokenPrecedence, (fun s -> (Left, s = "!=="))); (* Not preset in the RWO table! *) + (TokenPrecedence, (fun s -> (Left, s = "=="))); + (TokenPrecedence, (fun s -> (Left, s = "==="))); + (TokenPrecedence, (fun s -> (Left, s = "<"))); + (TokenPrecedence, (fun s -> (Left, s = ">"))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '|' && not (s = "||")))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '&' && not (s = "&") && not (s = "&&")))); + (TokenPrecedence, (fun s -> (Left, s.[0] == '$'))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s = "&"))); + (TokenPrecedence, (fun s -> (Right, s = "&&"))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s = "or"))); + (TokenPrecedence, (fun s -> (Right, s = "||"))); + ]; + [ + (* The Left shouldn't ever matter in practice. Should never get in a + situation with two consecutive infix ? - the colon saves us. *) + (TokenPrecedence, (fun s -> (Left, s = "?"))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s = ":="))); + ]; + [ + (TokenPrecedence, (fun s -> (Right, s = updateToken))); + ]; + (* It's important to account for ternary ":" being lower precedence than "?" *) + [ + (TokenPrecedence, (fun s -> (Right, s = ":"))) + ]; + [ + (TokenPrecedence, (fun s -> (Nonassoc, s = "=>"))); + ]; +] + +(* remove all prefixing backslashes, e.g. \=== becomes === *) +let without_prefixed_backslashes str = + if str = "" then str + else if String.get str 0 = '\\' then String.sub str 1 (String.length str - 1) + else str + +let indexOfFirstMatch ~prec lst = + let rec aux n = function + | [] -> None + | [] :: tl -> aux (n + 1) tl + | ((kind, tester) :: hdTl) :: tl -> + match prec, kind with + | Token str, TokenPrecedence | Custom str, CustomPrecedence -> + let associativity, foundMatch = tester str in + if foundMatch + then Some (associativity, n) + else aux n (hdTl::tl) + | _ -> aux n (hdTl::tl) + in + aux 0 lst + +(* Assuming it's an infix function application. *) +let precedenceInfo ~prec = + (* Removes prefixed backslashes in order to do proper conversion *) + let prec = match prec with + | Token str -> Token (without_prefixed_backslashes str) + | Custom str -> prec + in + indexOfFirstMatch ~prec rules + +let isLeftAssociative ~prec = match precedenceInfo ~prec with + | None -> false + | Some (Left, _) -> true + | Some (Right, _) -> false + | Some (Nonassoc, _) -> false + +let isRightAssociative ~prec = match precedenceInfo ~prec with + | None -> false + | Some (Right, _) -> true + | Some (Left, _) -> false + | Some (Nonassoc, _) -> false + +let higherPrecedenceThan c1 c2 = match ((precedenceInfo c1), (precedenceInfo c2)) with + | (_, None) + | (None, _) -> + let (str1, str2) = match (c1, c2) with + | (Token s1, Token s2) -> ("Token " ^ s1, "Token " ^ s2) + | (Token s1, Custom s2) -> ("Token " ^ s1, "Custom " ^ s2) + | (Custom s1, Token s2) -> ("Custom " ^ s1, "Token " ^ s2) + | (Custom s1, Custom s2) -> ("Custom " ^ s1, "Custom " ^ s2) + in + raise (NotPossible ("Cannot determine precedence of two checks " ^ str1 ^ " vs. " ^ str2)) + | (Some (_, p1), Some (_, p2)) -> p1 < p2 + +let printedStringAndFixityExpr = function + | {pexp_desc = Pexp_ident {txt=Lident l}} -> printedStringAndFixity l + | _ -> Normal + +(* which identifiers are in fact operators needing parentheses *) +let needs_parens txt = + match printedStringAndFixity txt with + | Infix _ -> true + | UnaryPostfix _ -> true + | UnaryPlusPrefix _ -> true + | UnaryMinusPrefix _ -> true + | UnaryNotPrefix _ -> true + | AlmostSimplePrefix _ -> true + | Normal -> false + +(* some infixes need spaces around parens to avoid clashes with comment + syntax. This isn't needed for comment syntax /* */ *) +let needs_spaces txt = + txt.[0]='*' || txt.[String.length txt - 1] = '*' + +let rec orList = function (* only consider ((A|B)|C)*) + | {ppat_desc = Ppat_or (p1, p2)} -> (orList p1) @ (orList p2) + | x -> [x] + +let override = function + | Override -> "!" + | Fresh -> "" + +(* variance encoding: need to sync up with the [parser.mly] *) +let type_variance = function + | Invariant -> "" + | Covariant -> "+" + | Contravariant -> "-" + +type construct = + [ `cons of expression list + | `list of expression list + | `nil + | `normal + | `simple of Longident.t + | `tuple ] + +let view_expr x = + match x.pexp_desc with + | Pexp_construct ( {txt= Lident "()"; _},_) -> `tuple + | Pexp_construct ( {txt= Lident "[]"},_) -> `nil + | Pexp_construct ( {txt= Lident"::"},Some _) -> + let rec loop exp acc = match exp with + | {pexp_desc=Pexp_construct ({txt=Lident "[]"},_)} -> + (List.rev acc,true) + | {pexp_desc= + Pexp_construct ({txt=Lident "::"}, + Some ({pexp_desc= Pexp_tuple([e1;e2])}))} -> + loop e2 (e1::acc) + | e -> (List.rev (e::acc),false) in + let (ls,b) = loop x [] in + if b + then `list ls + else `cons ls + | Pexp_construct (x,None) -> `simple x.txt + | _ -> `normal + +let is_simple_list_expr x = + match view_expr x with + | `list _ | `cons _ -> true + | _ -> false + +let is_simple_construct : construct -> bool = function + | `nil | `tuple | `list _ | `simple _ | `cons _ -> true + | `normal -> false + +let uncurriedTable = Hashtbl.create 42 + +(* Determines if a list of expressions contains a single unit construct + * e.g. used to check: MyConstructor() -> exprList == [()] + * useful to determine if MyConstructor(()) should be printed as MyConstructor() + * *) +let is_single_unit_construct exprList = + match exprList with + | x::[] -> + let view = view_expr x in + (match view with + | `tuple -> true + | _ -> false) + | _ -> false + +let detectTernary l = match l with + | [{ + pc_lhs={ppat_desc=Ppat_construct ({txt=Lident "true"}, _)}; + pc_guard=None; + pc_rhs=ifTrue + }; + { + pc_lhs={ppat_desc=Ppat_construct ({txt=Lident "false"}, _)}; + pc_guard=None; + pc_rhs=ifFalse + }] -> Some (ifTrue, ifFalse) + | _ -> None +type funcApplicationLabelStyle = + (* No attaching to the label, but if the entire application fits on one line, + the entire application will appear next to the label as you 'd expect. *) + | NeverWrapFinalItem + (* Attach the first term if there are exactly two terms involved in the + application. + + let x = firstTerm (secondTerm_1 secondTerm_2) thirdTerm; + + Ideally, we'd be able to attach all but the last argument into the label any + time all but the last term will fit - and *not* when (attaching all but + the last term isn't enough to prevent a wrap) - But there's no way to tell + ahead of time if it would prevent a wrap. + + However, the number two is somewhat convenient. This models the + indentation that you'd prefer in non-curried syntax languages like + JavaScript, where application only ever has two terms. + *) + | WrapFinalListyItemIfFewerThan of int + +type formatSettings = { + (* Whether or not to expect that the original parser that generated the AST + would have annotated constructor argument tuples with explicit arity to + indicate that they are multiple arguments. (True if parsed in original + OCaml AST, false if using Reason parser). + *) + constructorTupleImplicitArity: bool; + space: int; + + (* For curried arguments in function *definitions* only: Number of [space]s + to offset beyond the [let] keyword. Default 1. + *) + listsRecordsIndent: int; + + indentWrappedPatternArgs: int; + + indentMatchCases: int; + + (* Amount to indent in label-like constructs such as wrapped function + applications, etc - or even record fields. This is not the same concept as an + indented curried argument list. *) + indentAfterLabels: int; + + (* Amount to indent after the opening brace of switch/try. + Here's an example of what it would look like w/ [trySwitchIndent = 2]: + Sticks the expression to the last item in a sequence in several [X | Y | Z + => expr], and forces X, Y, Z to be split onto several lines. (Otherwise, + sticking to Z would result in hanging expressions). TODO: In the first case, + it's clear that we want patterns to have an "extra" indentation with matching + in a "match". Create extra config param to pass to [self#pattern] for extra + indentation in this one case. + + switch x { + | TwoCombos + (HeresTwoConstructorArguments x y) + (HeresTwoConstructorArguments a b) => + ((a + b) + x) + y; + | Short + | AlsoHasARecord a b {x, y} => ( + retOne, + retTwo + ) + | AlsoHasARecord a b {x, y} => + callMyFunction + withArg + withArg + withArg + withArg; + } + *) + trySwitchIndent: int; + + + (* In the case of two term function application (when flattened), the first + term should become part of the label, and the second term should be able to wrap + This doesn't effect n != 2. + + [true] + let x = reallyShort allFitsOnOneLine; + let x = someFunction { + reallyLongObject: true, + thatWouldntFitOnThe: true, + firstLine: true + }; + + [false] + let x = reallyShort allFitsOnOneLine; + let x = + someFunction + { + reallyLongObject: true, + thatWouldntFitOnThe: true, + firstLine: true + }; + *) + funcApplicationLabelStyle: funcApplicationLabelStyle; + + funcCurriedPatternStyle: funcApplicationLabelStyle; + + width: int; + + assumeExplicitArity: bool; + + constructorLists: string list; +} + +let defaultSettings = { + constructorTupleImplicitArity = false; + space = 1; + listsRecordsIndent = 2; + indentWrappedPatternArgs = 2; + indentMatchCases = 2; + indentAfterLabels = 2; + trySwitchIndent = 0; + funcApplicationLabelStyle = WrapFinalListyItemIfFewerThan 3; + (* WrapFinalListyItemIfFewerThan is currently a bad idea for curried + arguments: It looks great in some cases: + + let myFun (a:int) :( + int, + string + ) => (a, "this is a"); + + But horrible in others: + + let myFun + { + myField, + yourField + } :someReturnType => myField + yourField; + + let myFun + { // Curried arg wraps + myField, + yourField + } : ( // But the last is "listy" so it docks + int, // To the [let]. + int, + int + ) => myField + yourField; + + We probably want some special listy label docking/wrapping mode for + curried function bindings. + + *) + funcCurriedPatternStyle = NeverWrapFinalItem; + width = 80; + assumeExplicitArity = false; + constructorLists = []; +} +let configuredSettings = ref defaultSettings + +let configure ~width ~assumeExplicitArity ~constructorLists = ( + configuredSettings := {defaultSettings with width; assumeExplicitArity; constructorLists} +) + +let createFormatter () = +let module Formatter = struct + +let settings = !configuredSettings + + +(* How do we make + this a label? + + /---------------------\ + let myVal = (oneThing, { + field: [], + anotherField: blah + }); + + But in this case, this wider region a label? + /------------------------------------------------------\ + let myVal = callSomeFunc (oneThing, {field: [], anotherField: blah}, { + boo: 'hi' + }); + + This is difficult. You must form a label from the preorder traversal of every + node - except the last encountered in the traversal. An easier heuristic is: + + - The last argument to a functor application is expanded. + + React.CreateClass SomeThing { + let render {props} => { + }; + } + + - The last argument to a function application is expanded on the same line. + - Only if it's not curried with another invocation. + -- Optionally: "only if everything else is an atom" + -- Optionally: "only if there are no other args" + + React.createClass someThing { + render: fn x => y, + } + + !!! NOT THIS + React.createClass someThing { + render: fn x => y, + } + somethingElse +*) + +let isArityClear attrs = + (!configuredSettings).assumeExplicitArity || + List.exists + (function + | ({txt="explicit_arity"; loc}, _) -> true + | _ -> false + ) + attrs + +let default_indent_body = + settings.listsRecordsIndent * settings.space + +let makeList + (* Allows a fallback in the event that comments were interleaved with the + * list *) + ?(newlinesAboveItems=0) + ?(newlinesAboveComments=0) + ?(newlinesAboveDocComments=0) + ?listConfigIfCommentsInterleaved + ?listConfigIfEolCommentsInterleaved + ?(break=Layout.Never) + ?(wrap=("", "")) + ?(inline=(true, false)) + ?(sep=Layout.NoSep) + ?(indent=default_indent_body) + ?(sepLeft=true) + ?(preSpace=false) + ?(postSpace=false) + ?(pad=(false,false)) + lst = + let config = + { Layout. + newlinesAboveItems; newlinesAboveComments; newlinesAboveDocComments; + listConfigIfCommentsInterleaved; listConfigIfEolCommentsInterleaved; + break; wrap; inline; sep; indent; sepLeft; preSpace; postSpace; pad; + } + in + Layout.Sequence (config, lst) + +let makeAppList = function + | [hd] -> hd + | l -> makeList ~inline:(true, true) ~postSpace:true ~break:IfNeed l + +let makeTup ?(trailComma=true) ?(uncurried = false) l = + let lparen = if uncurried then "(. " else "(" in + makeList + ~wrap:(lparen,")") + ~sep:(if trailComma then commaTrail else commaSep) + ~postSpace:true + ~break:IfNeed l + +let ensureSingleTokenSticksToLabel x = + let listConfigIfCommentsInterleaved cfg = + let inline = (true, true) and postSpace = true and indent = 0 in + {cfg with Layout.break=Always_rec; postSpace; indent; inline} + in + makeList ~listConfigIfCommentsInterleaved [x] + +let unbreakLabelFormatter formatter = + let newFormatter labelTerm term = + match formatter labelTerm term with + | Easy_format.Label ((labelTerm, settings), term) -> + Easy_format.Label ((labelTerm, + {settings with label_break = `Never}), + term) + | _ -> failwith "not a label" + in newFormatter + +let inlineLabel labelTerm term = + let settings = { + label_break = `Never; + space_after_label = true; + indent_after_label = 0; + label_style = Some "inlineLabel"; + } in + Easy_format.Label ((labelTerm, settings), term) + +(* Just for debugging: Set debugWithHtml = true *) +let debugWithHtml = ref false + +let html_escape_string s = + let buf = Buffer.create (2 * String.length s) in + for i = 0 to String.length s - 1 do + match s.[i] with + '&' -> Buffer.add_string buf "&" + | '<' -> Buffer.add_string buf "<" + | '>' -> Buffer.add_string buf ">" + | c -> Buffer.add_char buf c + done; + Buffer.contents buf + +let html_escape = `Escape_string html_escape_string + +let html_style = [ + "atom", { Easy_format.tag_open = ""; tag_close = "" }; + "body", { tag_open = ""; tag_close = "" }; + "list", { tag_open = ""; tag_close = "" }; + "op", { tag_open = ""; tag_close = "" }; + "cl", { tag_open = ""; tag_close = "" }; + "sep", { tag_open = ""; tag_close = "" }; + "label", { tag_open = ""; tag_close = "" }; +] + +let easyLabel + ?(break=`Auto) ?(space=false) ?(indent=settings.indentAfterLabels) + labelTerm term = + let settings = { + label_break = break; + space_after_label = space; + indent_after_label = indent; + label_style = Some "label"; + } in + Easy_format.Label ((labelTerm, settings), term) + +let label ?break ?space ?indent (labelTerm:Layout.t) (term:Layout.t) = + Layout.Label (easyLabel ?break ?indent ?space, labelTerm, term) + +let atom ?loc str = + let style = { Easy_format.atom_style = Some "atomClss" } in + source_map ?loc (Layout.Easy (Easy_format.Atom(str, style))) + +(** Take x,y,z and n and generate [x, y, z, ...n] *) +let makeES6List ?wrap:((lwrap,rwrap)=("", "")) lst last = + makeList + ~wrap:(lwrap ^ "[", "]" ^ rwrap) + ~break:IfNeed ~postSpace:true ~sep:commaTrail + (lst @ [makeList [atom "..."; last]]) + +let makeNonIndentedBreakingList lst = + (* No align closing: So that semis stick to the ends of every break *) + makeList ~break:Always_rec ~indent:0 ~inline:(true, true) lst + +(* Like a could place with other breakableInline lists without upsetting final semicolons *) +let makeSpacedBreakableInlineList lst = + makeList ~break:IfNeed ~inline:(true, true) ~postSpace:true lst + +let makeCommaBreakableList lst = makeList ~break:IfNeed ~postSpace:true lst + +let makeCommaBreakableListSurround opn cls lst = + makeList ~break:IfNeed ~postSpace:true ~sep:(Sep ",") ~wrap:(opn, cls) lst + +(* TODO: Allow configuration of spacing around colon symbol *) + +let formatPrecedence ?loc formattedTerm = + source_map ?loc (makeList ~wrap:("(", ")") ~break:IfNeed [formattedTerm]) + +let wrap fn term = + ignore (Format.flush_str_formatter ()); + fn Format.str_formatter term; + atom (Format.flush_str_formatter ()) + +(* Don't use `trim` since it kills line return too? *) +let rec beginsWithStar_ line length idx = + if idx = length then false else + match String.get line idx with + | '*' -> true + | '\t' | ' ' -> beginsWithStar_ line length (idx + 1) + | _ -> false + +let beginsWithStar line = beginsWithStar_ line (String.length line) 0 + +let rec numLeadingSpace_ line length idx accum = + if idx = length then accum else + match String.get line idx with + | '\t' | ' ' -> numLeadingSpace_ line length (idx + 1) (accum + 1) + | _ -> accum + +let numLeadingSpace line = numLeadingSpace_ line (String.length line) 0 0 + +(* Computes the smallest leading spaces for non-empty lines *) +let smallestLeadingSpaces strs = + let rec smallestLeadingSpaces curMin strs = match strs with + | [] -> curMin + | ""::tl -> smallestLeadingSpaces curMin tl + | hd::tl -> + let leadingSpace = numLeadingSpace hd in + let nextMin = min curMin leadingSpace in + smallestLeadingSpaces nextMin tl + in + smallestLeadingSpaces 99999 strs + +let rec isSequencey = function + | Layout.SourceMap (_, sub) -> isSequencey sub + | Layout.Sequence _ -> true + | Layout.Label (_, _, _) -> false + | Layout.Easy (Easy_format.List _) -> true + | Layout.Easy _ -> false + +let inline ?(preSpace=false) ?(postSpace=false) labelTerm term = + makeList [labelTerm; term] + ~inline:(true, true) ~postSpace ~preSpace ~indent:0 ~break:Layout.Never + +let breakline labelTerm term = + makeList [labelTerm; term] + ~inline:(true, true) ~indent:0 ~break:Always_rec + +let insertBlankLines n term = + if n = 0 + then term + else makeList ~inline:(true, true) ~indent:0 ~break:Always_rec + (Array.to_list (Array.make n (atom "")) @ [term]) + +let string_after s n = String.sub s n (String.length s - n) + +(* This is a special-purpose functions only used by `formatComment_`. Notice we +skip a char below during usage because we know the comment starts with `/*` *) +let rec lineZeroMeaningfulContent_ line length idx accum = + if idx = length then None + else + let ch = String.get line idx in + if ch = '\t' || ch = ' ' || ch = '*' then + lineZeroMeaningfulContent_ line length (idx + 1) (accum + 1) + else Some accum + +let lineZeroMeaningfulContent line = + lineZeroMeaningfulContent_ line (String.length line) 1 0 + +let formatComment_ txt = + let commLines = + Syntax_util.split_by ~keep_empty:true (fun x -> x = '\n') + (Comment.wrap txt) + in + match commLines with + | [] -> atom "" + | [hd] -> + atom hd + | zero::one::tl -> + let attemptRemoveCount = (smallestLeadingSpaces (one::tl)) in + let leftPad = + if beginsWithStar one then 1 + else match lineZeroMeaningfulContent zero with + | None -> 1 + | Some num -> num + 1 + in + let padNonOpeningLine s = + let numLeadingSpaceForThisLine = numLeadingSpace s in + if String.length s == 0 then "" + else (String.make leftPad ' ') ^ + (string_after s (min attemptRemoveCount numLeadingSpaceForThisLine)) in + let lines = zero :: List.map padNonOpeningLine (one::tl) in + makeList ~inline:(true, true) ~indent:0 ~break:Always_rec (List.map atom lines) + +let formatComment comment = + source_map ~loc:(Comment.location comment) (formatComment_ comment) + +let rec append ?(space=false) txt = function + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, append ~space txt sub) + | Sequence (config, l) when snd config.wrap <> "" -> + let sep = if space then " " else "" in + Sequence ({config with wrap=(fst config.wrap, snd config.wrap ^ sep ^ txt)}, l) + (* TODO (perf) match on [] don't use List.length *) + | Sequence (config, l) when List.length l = 0 -> + Sequence (config, [atom txt]) + | Sequence ({sep=NoSep} as config, l) + | Sequence ({sep=Sep("")} as config, l) -> + (* TODO (perf) compute list length once *) + let sub = List.mapi (fun i layout -> + (* append to the end of the list *) + if i + 1 = List.length l then + append ~space txt layout + else + layout + ) l in + Sequence (config, sub) + | Label (formatter, left, right) -> + Label (formatter, left, append ~space txt right) + | layout -> + inline ~postSpace:space layout (atom txt) + +let appendSep spaceBeforeSep sep layout = + append (if spaceBeforeSep then " " ^ sep else sep) layout + +let rec flattenCommentAndSep ?spaceBeforeSep:(spaceBeforeSep=false) ?sepStr = function + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, flattenCommentAndSep ~spaceBeforeSep ?sepStr sub) + | layout -> + begin + match sepStr with + | None -> layout + | Some sep -> appendSep spaceBeforeSep sep layout + end + +let rec preOrderWalk f layout = + match f layout with + | Layout.Sequence (listConfig, sublayouts) -> + let newSublayouts = List.map (preOrderWalk f) sublayouts in + Layout.Sequence (listConfig, newSublayouts) + | Layout.Label (formatter, left, right) -> + let newLeftLayout = preOrderWalk f left in + let newRightLayout = preOrderWalk f right in + Layout.Label (formatter, newLeftLayout, newRightLayout) + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, preOrderWalk f sub) + | Layout.Easy _ as layout -> layout + +(** Recursively unbreaks a layout to make sure they stay within the same line *) +let unbreaklayout = preOrderWalk (function + | Layout.Sequence (listConfig, sublayouts) -> + Layout.Sequence ({listConfig with break=Layout.Never}, sublayouts) + | Layout.Label (formatter, left, right) -> + Layout.Label (unbreakLabelFormatter formatter, left, right) + | layout -> layout +) + +(** [consolidateSeparator layout] walks the [layout], extract separators out of each + * list and insert them into PrintTree as separated items + *) +let consolidateSeparator = preOrderWalk (function + | Sequence (listConfig, sublayouts) when listConfig.sep != NoSep && listConfig.sepLeft -> + (* TODO: Support !sepLeft, and this should apply to the *first* separator if !sepLeft. *) + let sublayoutsLen = List.length sublayouts in + let mapSublayout i layout = + match (listConfig.sep, (i + 1 = sublayoutsLen)) with + | (NoSep, _) -> raise (NotPossible "We already covered this case. This shouldn't happen.") + | (Sep sepStr, true) -> layout + | (SepFinal (sepStr, _), false) + | (Sep sepStr, false) -> + flattenCommentAndSep ~spaceBeforeSep:listConfig.preSpace ~sepStr:sepStr layout + | (SepFinal (_, finalSepStr), true) -> + flattenCommentAndSep ~spaceBeforeSep:listConfig.preSpace ~sepStr:finalSepStr layout + in + let layoutsWithSepAndComment = List.mapi mapSublayout sublayouts in + let sep = Layout.NoSep in + let preSpace = false in + Sequence ({listConfig with sep; preSpace}, layoutsWithSepAndComment) + | layout -> layout +) + + +(** [insertLinesAboveItems layout] walkts the [layout] and insert empty lines + * based on the configuration of newlinesAboveItems + *) +let insertLinesAboveItems = preOrderWalk (function + | Sequence (listConfig, sublayouts) + when listConfig.newlinesAboveItems <> 0 + -> + let layoutsWithLinesInjected = + List.map (insertBlankLines listConfig.newlinesAboveItems) sublayouts in + Sequence ({listConfig with newlinesAboveItems=0}, layoutsWithLinesInjected) + | layout -> layout +) + +(** + * prependSingleLineComment inserts a single line comment right above layout + *) +let rec prependSingleLineComment ?newlinesAboveDocComments:(newlinesAboveDocComments=0) comment layout = + match layout with + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, prependSingleLineComment ~newlinesAboveDocComments comment sub) + | Sequence (config, hd::tl) when config.break = Always_rec-> + Sequence(config, (prependSingleLineComment ~newlinesAboveDocComments comment hd)::tl) + | layout -> + let withComment = breakline (formatComment comment) layout in + if Comment.is_doc comment then + insertBlankLines newlinesAboveDocComments withComment + else + withComment + +(* breakAncestors break ancestors above node, but not comment attachment itself.*) +let appendComment ~breakAncestors layout comment = + let text = Comment.wrap comment in + let layout = makeList ~break:Layout.Never ~postSpace:true [layout; atom text] in + if breakAncestors then + makeList ~inline:(true, true) ~postSpace:false ~preSpace:true ~indent:0 + ~break:Always_rec [layout] + else + layout + +(** + * [looselyAttachComment layout comment] preorderly walks the layout and + * find a place where the comment can be loosely attached to + *) +let rec looselyAttachComment ~breakAncestors layout comment = + let location = Comment.location comment in + match layout with + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, looselyAttachComment ~breakAncestors sub comment) + | Easy e -> + inline ~postSpace:true layout (formatComment comment) + | Sequence (listConfig, subLayouts) + when List.exists (Layout.contains_location ~location) subLayouts -> + (* If any of the subLayout strictly contains this comment, recurse into to it *) + let recurse_sublayout layout = + if Layout.contains_location layout ~location + then looselyAttachComment ~breakAncestors layout comment + else layout + in + Sequence (listConfig, List.map recurse_sublayout subLayouts) + | Sequence (listConfig, subLayouts) when subLayouts == [] -> + (* If there are no subLayouts (empty body), create a Sequence of just the comment *) + Sequence (listConfig, [formatComment comment]) + | Sequence (listConfig, subLayouts) -> + let (beforeComment, afterComment) = + Syntax_util.pick_while (Layout.is_before ~location) subLayouts in + let newSubLayout = match List.rev beforeComment with + | [] -> + Syntax_util.map_first (prependSingleLineComment comment) afterComment + | hd :: tl -> + List.rev_append + (appendComment ~breakAncestors hd comment :: tl) afterComment + in + Sequence (listConfig, newSubLayout) + | Label (formatter, left, right) -> + let newLeft, newRight = + match (Layout.get_location left, Layout.get_location right) with + | (None, None) -> + (left, looselyAttachComment ~breakAncestors right comment) + | (_, Some loc2) when location_contains loc2 location -> + (left, looselyAttachComment ~breakAncestors right comment) + | (Some loc1, _) when location_contains loc1 location -> + (looselyAttachComment ~breakAncestors left comment, right) + | (Some loc1, Some loc2) when location_is_before location loc1 -> + (prependSingleLineComment comment left, right) + | (Some loc1, Some loc2) when location_is_before location loc2 -> + (left, prependSingleLineComment comment right) + | _ -> (left, appendComment ~breakAncestors right comment) + in + Label (formatter, newLeft, newRight) + +(** + * [insertSingleLineComment layout comment] preorderly walks the layout and + * find a place where the SingleLineComment can be fit into + *) +let rec insertSingleLineComment layout comment = + let location = Comment.location comment in + match layout with + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, insertSingleLineComment sub comment) + | Easy e -> + prependSingleLineComment comment layout + | Sequence (listConfig, subLayouts) when subLayouts = [] -> + (* If there are no subLayouts (empty body), create a Sequence of just the comment *) + Sequence (listConfig, [formatComment comment]) + | Sequence (listConfig, subLayouts) -> + let newlinesAboveDocComments = listConfig.newlinesAboveDocComments in + let (beforeComment, afterComment) = + Syntax_util.pick_while (Layout.is_before ~location) subLayouts in + begin match afterComment with + (* Nothing in the list is after comment, attach comment to the statement before the comment *) + | [] -> + let break sublayout = breakline sublayout (formatComment comment) in + Sequence (listConfig, Syntax_util.map_last break beforeComment) + | hd::tl -> + let afterComment = + match Layout.get_location hd with + | Some loc when location_contains loc location -> + insertSingleLineComment hd comment :: tl + | Some loc -> + Layout.SourceMap (loc, (prependSingleLineComment ~newlinesAboveDocComments comment hd)) :: tl + | _ -> + prependSingleLineComment ~newlinesAboveDocComments comment hd :: tl + in + Sequence (listConfig, beforeComment @ afterComment) + end + | Label (formatter, left, right) -> + let leftLoc = Layout.get_location left in + let rightLoc = Layout.get_location right in + let newLeft, newRight = match (leftLoc, rightLoc) with + | (None, None) -> + (left, insertSingleLineComment right comment) + | (_, Some loc2) when location_contains loc2 location -> + (left, insertSingleLineComment right comment) + | (Some loc1, _) when location_contains loc1 location -> + (insertSingleLineComment left comment, right) + | (Some loc1, Some loc2) when location_is_before location loc1 -> + (prependSingleLineComment comment left, right) + | (Some loc1, Some loc2) when location_is_before location loc2 -> + (left, prependSingleLineComment comment right) + | _ -> + (left, breakline right (formatComment comment)) + in + Label (formatter, newLeft, newRight) + +let rec attachCommentToNodeRight layout comment = + match layout with + | Layout.Sequence (config, sub) when snd config.wrap <> "" -> + (* jwalke: This is quite the abuse of the "wrap" config *) + let lwrap, rwrap = config.wrap in + let rwrap = rwrap ^ " " ^ Comment.wrap comment in + Layout.Sequence ({config with wrap=(lwrap, rwrap)}, sub) + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, attachCommentToNodeRight sub comment) + | layout -> inline ~postSpace:true layout (formatComment comment) + +let rec attachCommentToNodeLeft comment layout = + match layout with + | Layout.Sequence (config, sub) when snd config.wrap <> "" -> + let lwrap, rwrap = config.wrap in + let lwrap = Comment.wrap comment ^ " " ^ lwrap in + Layout.Sequence ({config with wrap = (lwrap, rwrap)}, sub) + | Layout.SourceMap (loc, sub) -> + Layout.SourceMap (loc, attachCommentToNodeLeft comment sub ) + | layout -> + Layout.Label (inlineLabel, formatComment comment, layout) + +(** [tryPerfectlyAttachComment layout comment] postorderly walk the [layout] and tries + * to perfectly attach a comment with a layout node. + * + * Perfectly attach here means a comment's start location is equal to the node's end location + * and vice versa. + * + * If the comment can be perfectly attached to any layout node, returns (newLayout, None), + * meaning the comment is consumed. Otherwise returns the (unchangedLayout, Some comment), + * meaning the comment is not consumed. + * + * "perfect attachment" doesn't make sense for end of line comments: + * + * { + * x: 0, + * y: 0 + * } + * + * One of these will be "perfectly attached" to the zero and the other won't. + * Why should the comma have such an influence? Trailing commas and semicolons + * may be inserted or removed, an we need end-of-line comments to never be + * impacted by that. Therefore, never try to "perfectly" attach EOL comments. + *) +let rec tryPerfectlyAttachComment layout = function + | None -> (layout, None) + | Some comment -> perfectlyAttachComment comment layout + +and perfectlyAttachComment comment = function + | Layout.Sequence (listConfig, subLayouts) -> + let distributeCommentIntoSubLayouts (i, processed, newComment) layout = + let (layout, newComment) = + tryPerfectlyAttachComment layout newComment in + (i + 1, layout::processed, newComment) + in + let (_, processed, consumed) = + List.fold_left + distributeCommentIntoSubLayouts + (0, [], Some comment) (List.rev subLayouts) + in + Layout.Sequence (listConfig, processed), consumed + | Layout.Label (labelFormatter, left, right) -> + let (newRight, comment) = perfectlyAttachComment comment right in + let (newLeft, comment) = tryPerfectlyAttachComment left comment in + Layout.Label (labelFormatter, newLeft, newRight), comment + | Layout.SourceMap (loc, subLayout) -> + let commloc = Comment.location comment in + if loc.loc_end.Lexing.pos_lnum = loc.loc_start.Lexing.pos_lnum && + commloc.loc_start.Lexing.pos_cnum = loc.loc_end.Lexing.pos_cnum + then + (Layout.SourceMap (loc, makeList ~inline:(true, true) ~break:Always + [unbreaklayout (attachCommentToNodeRight subLayout comment)]), + None) + else + let (layout, comment) = perfectlyAttachComment comment subLayout in + begin match comment with + | None -> (Layout.SourceMap (loc, layout), None) + | Some comment -> + if commloc.loc_end.Lexing.pos_cnum = + loc.loc_start.Lexing.pos_cnum then + (Layout.SourceMap (loc, attachCommentToNodeLeft comment layout), None) + else if commloc.loc_start.Lexing.pos_cnum = loc.loc_end.Lexing.pos_cnum then + (Layout.SourceMap (loc, attachCommentToNodeRight layout comment), None) + else + (Layout.SourceMap (loc, layout), Some comment) + end + | layout -> (layout, Some comment) + +let insertRegularComment layout comment = + match perfectlyAttachComment comment layout with + | (layout, None) -> layout + | (layout, Some _) -> looselyAttachComment ~breakAncestors:false layout comment + +let insertEndOfLineComment layout comment = + looselyAttachComment ~breakAncestors:true layout comment + +let rec partitionComments_ ((singleLines, endOfLines, regulars) as soFar) = function + | [] -> soFar + | com :: tl -> + match Comment.category com with + | Comment.EndOfLine -> + partitionComments_ (singleLines, (com :: endOfLines), regulars) tl + | Comment.SingleLine -> + partitionComments_ ((com :: singleLines), endOfLines, regulars) tl + | Comment.Regular -> + partitionComments_ (singleLines, endOfLines, (com :: regulars)) tl + +let partitionComments comments = + let (singleLines, endOfLines, regulars) = + partitionComments_ ([], [], []) comments in + (singleLines, List.rev endOfLines, regulars) + +let format_layout ?comments ppf layout = + let easy = match comments with + | None -> Layout.to_easy_format layout + | Some comments -> + let (singleLines, endOfLines, regulars) = partitionComments comments in + (* TODO: Stop generating multiple versions of the tree, and instead generate one new tree. *) + (* Layout.dump Format.std_formatter layout; *) + let layout = List.fold_left insertRegularComment layout regulars in + let layout = consolidateSeparator layout in + let layout = List.fold_left insertEndOfLineComment layout endOfLines in + (* Layout.dump Format.std_formatter layout; *) + let layout = List.fold_left insertSingleLineComment layout singleLines in + let layout = insertLinesAboveItems layout in + let layout = Layout.to_easy_format layout in + (* Layout.dump_easy Format.std_formatter easyFormat; *) + layout + in + let buf = Buffer.create 1000 in + let fauxmatter = Format.formatter_of_buffer buf in + let _ = Format.pp_set_margin fauxmatter settings.width in + if debugWithHtml.contents then + Easy_format.Pretty.define_styles fauxmatter html_escape html_style; + let _ = Easy_format.Pretty.to_formatter fauxmatter easy in + let trimmed = Syntax_util.processLineEndingsAndStarts (Buffer.contents buf) in + Format.fprintf ppf "%s\n" trimmed; + Format.pp_print_flush ppf () + +let partitionFinalWrapping listTester wrapFinalItemSetting x = + let rev = List.rev x in + match (rev, wrapFinalItemSetting) with + | ([], _) -> raise (NotPossible "shouldnt be partitioning 0 label attachments") + | (_, NeverWrapFinalItem) -> None + | (last::revEverythingButLast, WrapFinalListyItemIfFewerThan max) -> + if not (listTester last) || (List.length x) >= max then + None + else + Some (List.rev revEverythingButLast, last) + +let semiTerminated term = makeList [term; atom ";"] + + +(* postSpace is so that when comments are interleaved, we still use spacing rules. *) +let makeLetSequence letItems = + makeList + ~break:Always_rec + ~inline:(true, false) + ~wrap:("{", "}") + ~newlinesAboveComments:0 + ~newlinesAboveItems:0 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~sep:(SepFinal (";", ";")) + letItems + +let makeLetSequenceSingleLine letItems = + makeList + ~break:IfNeed + ~inline:(true, false) + ~wrap:("{", "}") + ~newlinesAboveComments:0 + ~newlinesAboveItems:0 + ~newlinesAboveDocComments:1 + ~preSpace:true + ~postSpace:true + ~sep:(Sep ";") + letItems + +(* postSpace is so that when comments are interleaved, we still use spacing rules. *) +let makeUnguardedLetSequence letItems = + makeList + ~break:Always_rec + ~inline:(true, true) + ~wrap:("", "") + ~newlinesAboveComments:0 + ~indent:0 + ~newlinesAboveItems:0 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~sep:(SepFinal (";", ";")) + letItems + +let formatSimpleAttributed x y = + makeList + ~wrap:("(", ")") + ~break:IfNeed + ~indent:0 + ~postSpace:true + (List.concat [y; [x]]) + +let formatAttributed ?(labelBreak=`Auto) x y = + label + ~break:labelBreak + ~indent:0 + ~space:true + (makeList ~inline:(true, true) ~postSpace:true y) + x + +(* For when the type constraint should be treated as a separate breakable line item itself + not docked to some value/pattern label. + fun x + y + : retType => blah; + *) +let formatJustTheTypeConstraint typ = + makeList ~postSpace:false ~sep:(Sep " ") [atom ":"; typ] + +let formatTypeConstraint one two = + label ~space:true (makeList ~postSpace:false [one; atom ":"]) two + +let formatCoerce expr optType coerced = + match optType with + | None -> + label ~space:true (makeList ~postSpace:true [expr; atom ":>"]) coerced + | Some typ -> + label ~space:true (makeList ~postSpace:true [formatTypeConstraint expr typ; atom ":>"]) coerced + + +(* Standard function application style indentation - no special wrapping + * behavior. + * + * Formats like this: + * + * let result = + * someFunc + * (10, 20); + * + * + * Instead of this: + * + * let result = + * someFunc ( + * 10, + * 20 + * ); + * + * The outer list wrapping fixes #566: format should break the whole + * application before breaking arguments. + *) +let formatIndentedApplication headApplicationItem argApplicationItems = + makeList ~inline:(true, true) ~postSpace:true ~break:IfNeed [ + label + ~space:true + headApplicationItem + (makeAppList argApplicationItems) + ] + + +(* The loc, is an optional location or the returned app terms *) +let formatAttachmentApplication finalWrapping (attachTo: (bool * Layout.t) option) (appTermItems, loc) = + let partitioning = finalWrapping appTermItems in + match partitioning with + | None -> ( + match (appTermItems, attachTo) with + | ([], _) -> raise (NotPossible "No app terms") + | ([hd], None) -> source_map ?loc hd + | ([hd], (Some (useSpace, toThis))) -> label ~space:useSpace toThis (source_map ?loc hd) + | (hd::tl, None) -> + source_map ?loc (formatIndentedApplication hd tl) + | (hd::tl, (Some (useSpace, toThis))) -> + label + ~space:useSpace + toThis + (source_map ?loc (formatIndentedApplication hd tl)) + ) + | Some (attachedList, wrappedListy) -> ( + match (attachedList, attachTo) with + | ([], Some (useSpace, toThis)) -> + label ~space:useSpace toThis (source_map ?loc wrappedListy) + | ([], None) -> + (* Not Sure when this would happen *) + source_map ?loc wrappedListy + | (hd::tl, Some (useSpace, toThis)) -> + (* TODO: Can't attach location to this - maybe rewrite anyways *) + let attachedArgs = makeAppList attachedList in + label ~space:useSpace toThis + (label ~space:true attachedArgs wrappedListy) + | (hd::tl, None) -> + (* Args that are "attached to nothing" *) + let appList = makeAppList attachedList in + source_map ?loc (label ~space:true appList wrappedListy) + ) + +(* + Preprocesses an expression term for the sake of label attachments ([letx = + expr]or record [field: expr]). Function application should have special + treatment when placed next to a label. (The invoked function term should + "stick" to the label in some cases). In others, the invoked function term + should become a new label for the remaining items to be indented under. + *) +let applicationFinalWrapping x = + partitionFinalWrapping isSequencey settings.funcApplicationLabelStyle x + +let curriedFunctionFinalWrapping x = + partitionFinalWrapping isSequencey settings.funcCurriedPatternStyle x + +let typeApplicationFinalWrapping typeApplicationItems = + partitionFinalWrapping isSequencey settings.funcApplicationLabelStyle typeApplicationItems + + +(* add parentheses to binders when they are in fact infix or prefix operators *) +let protectIdentifier txt = + if not (needs_parens txt) then atom txt + else if needs_spaces txt then makeList ~wrap:("(", ")") ~pad:(true, true) [atom txt] + else atom ("(" ^ txt ^ ")") + +let protectLongIdentifier longPrefix txt = + makeList [longPrefix; atom "."; protectIdentifier txt] + +let paren b fu ppf x = + if b + then Format.fprintf ppf "(%a)" fu x + else fu ppf x + +let constant_string ppf s = + Format.fprintf ppf "%S" s + +let tyvar ppf str = + Format.fprintf ppf "'%s" str + +(* In some places parens shouldn't be printed for readability: + * e.g. Some((-1)) should be printed as Some(-1) + * In `1 + (-1)` -1 should be wrapped in parens for readability + *) +let constant ?(parens=true) ppf = function + | Pconst_char i -> + Format.fprintf ppf "%C" i + | Pconst_string (i, None) -> + Format.fprintf ppf "%S" i + | Pconst_string (i, Some delim) -> + Format.fprintf ppf "{%s|%s|%s}" delim i delim + | Pconst_integer (i, None) -> + paren (parens && i.[0] = '-') + (fun ppf -> Format.fprintf ppf "%s") ppf i + | Pconst_integer (i, Some m) -> + paren (parens && i.[0] = '-') + (fun ppf (i, m) -> Format.fprintf ppf "%s%c" i m) ppf (i,m) + | Pconst_float (i, None) -> + paren (parens && i.[0] = '-') + (fun ppf -> Format.fprintf ppf "%s") ppf i + | Pconst_float (i, Some m) -> + paren (parens && i.[0] = '-') + (fun ppf (i,m) -> Format.fprintf ppf "%s%c" i m) ppf (i,m) + +let is_punned_labelled_expression e lbl = match e.pexp_desc with + | Pexp_ident { txt; _ } + | Pexp_constraint ({pexp_desc = Pexp_ident { txt; _ }; _}, _) + | Pexp_coerce ({pexp_desc = Pexp_ident { txt; _ }; _}, _, _) + -> txt = Longident.parse lbl + | _ -> false + +let is_punned_labelled_pattern p lbl = match p.ppat_desc with + | Ppat_var { txt; _ } + | Ppat_constraint ({ ppat_desc = Ppat_var { txt; _ }; _ }, _) + -> txt = lbl + | _ -> false + +let isLongIdentWithDot = function + | Ldot _ -> true + | _ -> false + +(* Js.t -> useful for bucklescript sugar `Js.t({. foo: bar})` -> `{. "foo": bar}` *) +let isJsDotTLongIdent ident = match ident with + | Ldot (Lident "Js", "t") -> true + | _ -> false + +let recordRowIsPunned pld = + let name = pld.pld_name.txt in + (match pld.pld_type with + | { ptyp_desc = (Ptyp_constr ({ txt; _ }, args)); _} + when + (Longident.last txt = name + (* Don't pun types from other modules, e.g. type bar = {foo: Baz.foo}; *) + && isLongIdentWithDot txt == false + (* don't pun parameterized types, e.g. {tag: tag 'props} *) + && List.length args == 0) -> true + | _ -> false) + +let isPunnedJsxArg lbl ident = + not (isLongIdentWithDot ident.txt) && (Longident.last ident.txt) = lbl + +let is_unit_pattern x = match x.ppat_desc with + | Ppat_construct ( {txt= Lident"()"}, None) -> true + | _ -> false + +let is_ident_pattern x = match x.ppat_desc with + | Ppat_var _ -> true + | _ -> false + +let is_direct_pattern x = x.ppat_attributes = [] && match x.ppat_desc with + | Ppat_construct ( {txt= Lident"()"}, None) -> true + | _ -> false + +let isJSXComponent loc args = + let hasLabelledChildrenLiteral = List.exists (function + | (Labelled "children", _) -> true + | _ -> false + ) args in + let rec hasSingleNonLabelledUnitAndIsAtTheEnd l = match l with + | [] -> false + | (Nolabel, {pexp_desc = Pexp_construct ({txt = Lident "()"}, _)}) :: [] -> true + | (Nolabel, _) :: rest -> false + | _ :: rest -> hasSingleNonLabelledUnitAndIsAtTheEnd rest + in + if hasLabelledChildrenLiteral && hasSingleNonLabelledUnitAndIsAtTheEnd args then + let moduleNameList = List.rev (List.tl (List.rev (Longident.flatten loc.txt))) in + if List.length moduleNameList > 0 && Longident.last loc.txt = "createElement" then + true + else false + else + false + + +(* Some cases require special formatting when there's a function application + * with a single argument containing some kind of structure with braces/parens/brackets. + * Example: `foo({a: 1, b: 2})` needs to be formatted as + * foo({ + * a: 1, + * b: 2 + * }) + * when the line length dictates breaking. Notice how `({` and `})` 'hug'. + * Also applies to (poly)variants because they can be seen as a form of "function application". + * This function says if a list of expressions fulfills the need to be formatted like + * the example above. *) +let isSingleArgParenApplication = function + | [{pexp_attributes = []; pexp_desc = Pexp_record _}] + | [{pexp_attributes = []; pexp_desc = Pexp_tuple _}] + | [{pexp_attributes = []; pexp_desc = Pexp_array _}] + | [{pexp_attributes = []; pexp_desc = Pexp_object _}] -> true + | [{pexp_attributes = []; pexp_desc = Pexp_extension (s, _)}] when s.txt = "bs.obj" -> true + | [({pexp_attributes = []; pexp_desc} as exp)] when (is_simple_list_expr exp) -> true + | _ -> false + +(* + * Determines if the arguments of a constructor pattern match need + * special printing. If there's one argument & they have some kind of wrapping, + * they're wrapping need to 'hug' the surrounding parens. + * Example: + * switch x { + * | Some({ + * a, + * b, + * }) => () + * } + * + * Notice how ({ and }) hug. + * This applies for records, arrays, tuples & lists. + * See `singleArgParenPattern` for the acutal formatting + *) +let isSingleArgParenPattern = function + | [{ppat_attributes = []; ppat_desc = Ppat_record _}] + | [{ppat_attributes = []; ppat_desc = Ppat_array _}] + | [{ppat_attributes = []; ppat_desc = Ppat_tuple _}] -> true + | [{ppat_attributes = []; ppat_desc = Ppat_construct (({txt=Lident "::"}), _)}] -> true + | _ -> false + +(* Flattens a resolvedRule into a list of infixChain nodes. + * When foo |> f |> z gets parsed, we get the following tree: + * |> + * / \ + * foo |> + * / \ + * f z + * To format this recursive tree in a way that allows nice breaking + * & respects the print-width, we need some kind of flattened + * version of the above tree. `computeInfixChain` transforms the tree + * in a flattened version which allows flexible formatting. + * E.g. we get + * [LayoutNode foo; InfixToken |>; LayoutNode f; InfixToken |>; LayoutNode z] + *) +let rec computeInfixChain = function + | LayoutNode layoutNode -> [Layout layoutNode] + | InfixTree (op, leftResolvedRule, rightResolvedRule) -> + (computeInfixChain leftResolvedRule) @ [InfixToken op] @ (computeInfixChain rightResolvedRule) + +let equalityOperators = ["!="; "!=="; "==="; "=="; ">="; "<="; "<"; ">"] + +(* Formats a flattened list of infixChain nodes into a list of layoutNodes + * which allow smooth line-breaking + * e.g. [LayoutNode foo; InfixToken |>; LayoutNode f; InfixToken |>; LayoutNode z] + * becomes + * [ + * foo + * ; |> f --> label + * ; |> z --> label + * ] + * If you make a list out of this items, we get smooth line breaking + * foo |> f |> z + * becomes + * foo + * |> f + * |> z + * when the print-width forces line breaks. + *) +let formatComputedInfixChain infixChainList = + let layout_of_group group currentToken = + (* Represents the `foo` in + * foo + * |> f + * |> z *) + if List.length group < 2 then + makeList ~inline:(true, true) ~sep:(Sep " ") ~break:Layout.Never group + (* Basic equality operators require special formatting, we can't give it + * 'classic' infix operator formatting, otherwise we would get + * let example = + * true + * != false + * && "a" + * == "b" + * *) + else if List.mem currentToken equalityOperators then + let hd = List.hd group in + let tl = makeList ~inline:(true, true) ~sep:(Sep " ") ~break:Layout.Never (List.tl group) in + makeList ~inline:(true, true) ~sep:(Sep " ") ~break:IfNeed [hd; tl] + else + (* Represents `|> f` in foo |> f + * We need a label here to indent possible closing parens + * on the same height as the infix operator + * e.g. + * >|= ( + * fun body => + * Printf.sprintf + * "okokok" uri meth headers body + * ) <-- notice how this closing paren is on the same height as >|= *) + label ~break:`Never ~space:true (atom currentToken) (List.nth group 1) + in + let rec print acc group currentToken l = + match l with + | x::xs -> (match x with + | InfixToken t -> + if List.mem t requireIndentFor then + let groupNode = + makeList ~inline:(true, true) ~sep:(Sep " ") ~break:Layout.Never + (group @ [atom t]) + in + let children = + makeList ~inline:(true, true) ~preSpace:true ~break:IfNeed + (print [] [] t xs) + in + print (acc @ [label ~space:true groupNode children]) [] t [] + (* Represents: + * List.map @@ + * List.length + * + * Notice how we want the `@@` on the first line. + * Extra indent puts pressure on the subsequent line lengths + * *) + else if t = "@@" then + let groupNode = + makeList ~inline:(true, true) ~sep:(Sep " ") ~break:Layout.Never + (group @ [atom t]) + in + print (acc @ [groupNode]) [] t xs + else if List.mem t equalityOperators then + print acc (group @ [atom t]) t xs + else + print (acc @ [layout_of_group group currentToken]) [(atom t)] t xs + | Layout layoutNode -> print acc (group @ [layoutNode]) currentToken xs + ) + | [] -> + if List.mem currentToken requireIndentFor then + acc @ group + else + acc @ [layout_of_group group currentToken] + in + print [] [] "" infixChainList + + +let printer = object(self:'self) + val pipe = false + val semi = false + (* The test and first branch of ternaries must be guarded *) + method under_pipe = {} + method under_semi = {} + method reset_semi = {} + method reset_pipe = {} + method reset = {} + + + method longident = function + | Lident s -> (protectIdentifier s) + | Ldot(longPrefix, s) -> + (protectLongIdentifier (self#longident longPrefix) s) + | Lapply (y,s) -> makeList [self#longident y; atom "("; self#longident s; atom ")";] + + (* This form allows applicative functors. *) + method longident_class_or_type_loc x = self#longident x.txt + (* TODO: Fail if observing applicative functors for this form. *) + method longident_loc (x:Longident.t Location.loc) = + source_map ~loc:x.loc (self#longident x.txt) + method constant ?(parens=true) = wrap (constant ~parens) + + method constant_string = wrap constant_string + method tyvar = wrap tyvar + + (* c ['a,'b] *) + method class_params_def = function + | [] -> atom "" + | l -> makeTup (List.map self#type_param l) + + (* This will fall through to the simple version. *) + method non_arrowed_core_type x = self#non_arrowed_non_simple_core_type x + + method core_type2 x = + let {stdAttrs; uncurried} = partitionAttributes x.ptyp_attributes in + let uncurried = uncurried || try Hashtbl.find uncurriedTable x.ptyp_loc with | Not_found -> false in + if stdAttrs <> [] then + formatAttributed + (self#non_arrowed_simple_core_type {x with ptyp_attributes = []}) + (self#attributes stdAttrs) + else + let x = if uncurried then { x with ptyp_attributes = [] } else x in + match x.ptyp_desc with + | (Ptyp_arrow (l, ct1, ct2)) -> + let rec allArrowSegments ?(uncurried=false) acc = function + | { ptyp_desc = Ptyp_arrow (l, ct1, ct2); ptyp_attributes = [] } -> + allArrowSegments ~uncurried:false + ((l,ct1, false || uncurried) :: acc) ct2 + | rhs -> + let rhs = self#core_type2 rhs in + let is_tuple typ = match typ.ptyp_desc with + | Ptyp_tuple _ -> true + | _ -> false + in + match acc with + | [(Nolabel, lhs, uncurried )] when not (is_tuple lhs) -> + let t = self#non_arrowed_simple_core_type lhs in + let lhs = if uncurried then + makeList ~wrap:("(. ", ")") ~postSpace:true [t] + else t in + (lhs, rhs) + | acc -> + let params = List.rev_map self#type_with_label acc in + (makeCommaBreakableListSurround "(" ")" params, rhs) + in + let (lhs, rhs) = allArrowSegments ~uncurried [] x in + let normalized = makeList + ~preSpace:true ~postSpace:true ~inline:(true, true) + ~break:IfNeed ~sep:(Sep "=>") [lhs; rhs] + in source_map ~loc:x.ptyp_loc normalized + | Ptyp_poly (sl, ct) -> + let poly = + makeList ~break:IfNeed [ + makeList ~postSpace:true [ + makeList ~postSpace:true (List.map (fun x -> self#tyvar x) sl); + atom "."; + ]; + self#core_type ct; + ] + in source_map ~loc:x.ptyp_loc poly + | _ -> self#non_arrowed_core_type x + + (* Same as core_type2 but can be aliased *) + method core_type x = + let {stdAttrs; uncurried} = partitionAttributes x.ptyp_attributes in + let () = if uncurried then Hashtbl.add uncurriedTable x.ptyp_loc true in + if stdAttrs <> [] then + formatAttributed + (self#non_arrowed_simple_core_type {x with ptyp_attributes = []}) + (self#attributes stdAttrs) + else match x.ptyp_desc with + | (Ptyp_alias (ct, s)) -> + source_map ~loc:x.ptyp_loc + (label + ~space:true + (self#core_type ct) + (makeList ~postSpace:true [atom "as"; atom ("'" ^ s)])) + | _ -> self#core_type2 x + + method type_with_label (lbl, c, uncurried) = + let typ = self#core_type c in + let t = match lbl with + | Nolabel -> typ + | Labelled lbl -> + makeList ~sep:(Sep " ") [atom (namedArgSym ^ lbl ^ ":"); typ] + | Optional lbl -> + makeList ~sep:(Sep " ") [atom (namedArgSym ^ lbl ^ ":"); label typ (atom "=?")] + in + if uncurried then + makeList ~postSpace:true [atom "."; t] + else t + + method type_param (ct, a) = + makeList [atom (type_variance a); self#core_type ct] + + (* According to the parse rule [type_declaration], the "type declaration"'s + * physical location (as indicated by [td.ptype_loc]) begins with the + * identifier and includes the constraints. *) + method formatOneTypeDef prepend name assignToken ({ptype_params; ptype_kind; ptype_manifest; ptype_loc} as td) = + let (equalInitiatedSegments, constraints) = (self#type_declaration_binding_segments td) in + let formattedTypeParams = List.map self#type_param ptype_params in + let binding = makeList ~postSpace:true [prepend;name] in + (* + /-----------everythingButConstraints-------------- | -constraints--\ + /-innerL---| ------innerR--------------------------\ + /binding\ /typeparams\ /--equalInitiatedSegments-\ + type name 'v1 'v1 = foo = private bar constraint a = b + *) + + let labelWithParams = match formattedTypeParams with + | [] -> binding + | l -> label binding (makeTup l) + in + let everythingButConstraints = + let nameParamsEquals = makeList ~postSpace:true [labelWithParams; assignToken] in + match equalInitiatedSegments with + | [] -> labelWithParams + | hd::hd2::hd3::tl -> raise (NotPossible "More than two type segments.") + | hd::[] -> + formatAttachmentApplication + typeApplicationFinalWrapping + (Some (true, nameParamsEquals)) + (hd, None) + | hd::hd2::[] -> + let first = makeList ~postSpace:true ~break:IfNeed ~inline:(true, true) (hd @ [atom "="]) in + (* + * Because we want a record as a label with the opening brace on the same line + * and the closing brace indented at the beginning, we can't wrap it in a list here + * Example: + * type doubleEqualsRecord = + * myRecordWithReallyLongName = { <- opening brace on the same line + * xx: int, + * yy: int + * }; <- closing brace indentation + *) + let second = match ptype_kind with + | Ptype_record _ -> List.hd hd2 + | _ -> makeList ~postSpace:true ~break:IfNeed ~inline:(true, true) hd2 + in + label ~space:true nameParamsEquals ( + label ~space:true first second + ) + in + let everything = + match constraints with + | [] -> everythingButConstraints + | hd::tl -> makeList ~break:IfNeed ~postSpace:true ~indent:0 ~inline:(true, true) (everythingButConstraints::hd::tl) + in + source_map ~loc:ptype_loc everything + + method formatOneTypeExt prepend name assignToken te = + let privateAtom = (atom "pri") in + let privatize scope lst = match scope with + | Public -> lst + | Private -> privateAtom::lst in + let equalInitiatedSegments = + let segments = List.map self#type_extension_binding_segments te.ptyext_constructors in + let privatized_segments = privatize te.ptyext_private segments in + [makeList ~break:Always_rec ~postSpace:true ~inline:(true, true) privatized_segments] in + let formattedTypeParams = List.map self#type_param te.ptyext_params in + let binding = makeList ~postSpace:true (prepend::name::[]) in + let labelWithParams = match formattedTypeParams with + | [] -> binding + | l -> label binding (makeTup l) + in + let everything = + let nameParamsEquals = makeList ~postSpace:true [labelWithParams; assignToken] in + formatAttachmentApplication + typeApplicationFinalWrapping + (Some (true, nameParamsEquals)) + (equalInitiatedSegments, None) + in + source_map ~loc:te.ptyext_path.loc everything + + method type_extension_binding_segments {pext_kind; pext_loc; pext_attributes; pext_name} = + let normalize lst = match lst with + | [] -> raise (NotPossible "should not be called") + | [hd] -> hd + | _::_ -> makeList lst + in + let add_bar name attrs args = + let lbl = begin match args with + | None -> name + | Some args -> label name args + end in + if attrs <> [] then + label ~space:true + (makeList + ~postSpace:true + [ + atom "|"; + makeList + ~postSpace:true + ~break:Layout.IfNeed + ~inline:(true, true) + (self#attributes attrs) + ] + ) + lbl + else + makeList ~postSpace:true [atom "|"; lbl] + in + let sourceMappedName = atom ~loc:pext_name.loc pext_name.txt in + let resolved = match pext_kind with + | Pext_decl (ctor_args, gadt) -> + let formattedArgs = match ctor_args with + | Pcstr_tuple [] -> [] + | Pcstr_tuple args -> [makeTup (List.map self#non_arrowed_non_simple_core_type args)] + | Pcstr_record r -> [self#record_declaration r] + in + let formattedGadt = match gadt with + | None -> None + | Some x -> Some ( + makeList [ + formatJustTheTypeConstraint (self#core_type x) + ] + ) + in + (formattedArgs, formattedGadt) + (* type bar += Foo = Attr.Foo *) + | Pext_rebind rebind -> + let r = self#longident_loc rebind in + (* we put an empty space before the '=': we don't have access to the fact + * that we need a space because of the Pext_rebind later *) + let prepend = (atom " =") in + ([makeList ~postSpace:true [prepend; r]], None) + in + (** + The first element of the tuple represents constructor arguments, + the second an optional formatted gadt. + + Case 1: No constructor arguments, neither a gadt + type attr = ..; + type attr += | Str + + Case 2: No constructor arguments, is a gadt + type attr = ..; + type attr += | Str :attr + + Case 3: Has Constructor args, not a gadt + type attr = ..; + type attr += | Str(string); + type attr += | Point(int, int); + + Case 4: Has Constructor args & is a gadt + type attr = ..; + type attr += | Point(int, int) :attr; + *) + let everything = match resolved with + | ([], None) -> add_bar sourceMappedName pext_attributes None + | ([], Some gadt) -> add_bar sourceMappedName pext_attributes (Some gadt) + | (ctorArgs, None) -> add_bar sourceMappedName pext_attributes (Some (normalize ctorArgs)) + | (ctorArgs, Some gadt) -> add_bar sourceMappedName pext_attributes (Some (normalize (ctorArgs@[gadt]))) + in + source_map ~loc:pext_loc everything + + (* shared by [Pstr_type,Psig_type]*) + method type_def_list (rf, l) = + (* As oposed to used in type substitution. *) + let formatOneTypeDefStandard prepend td = + let itm = + self#formatOneTypeDef + prepend + (atom ~loc:td.ptype_name.loc td.ptype_name.txt) + (atom "=") + td + in + self#attach_std_item_attrs td.ptype_attributes itm + in + + match l with + | [] -> raise (NotPossible "asking for type list of nothing") + | hd::tl -> + let first = + match rf with + | Recursive -> formatOneTypeDefStandard (atom "type") hd + | Nonrecursive -> + formatOneTypeDefStandard (atom "type nonrec") hd + in + match tl with + (* Exactly one type *) + | [] -> first + | tlhd::tltl -> makeList ~indent:0 ~inline:(true, true) ~break:Always_rec ( + first::(List.map (formatOneTypeDefStandard (atom "and")) (tlhd::tltl)) + ) + + method type_variant_leaf ?opt_ampersand:(a=false) ?polymorphic:(p=false) = self#type_variant_leaf1 a p true + method type_variant_leaf_nobar ?opt_ampersand:(a=false) ?polymorphic:(p=false) = self#type_variant_leaf1 a p false + + (* TODOATTRIBUTES: Attributes on the entire variant leaf are likely + * not parsed or printed correctly. *) + method type_variant_leaf1 opt_ampersand polymorphic print_bar x = + let {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes} = x in + let {stdAttrs} = partitionAttributes pcd_attributes in + let ampersand_helper i arg = + let ct = self#core_type arg in + let ct = match arg.ptyp_desc with + | Ptyp_tuple _ -> ct + | _ -> makeTup [ct] + in + if i == 0 && not opt_ampersand then + ct + else + label (atom "&") ct + in + let args = match pcd_args with + | Pcstr_record r -> [self#record_declaration r] + | Pcstr_tuple [] -> [] + | Pcstr_tuple l when polymorphic -> List.mapi ampersand_helper l + (* Here's why this works. With the new syntax, all the args, are already inside of + a safely guarded place like Constructor(here, andHere). Compare that to the + previous syntax Constructor here andHere. In the previous syntax, we needed to + require that we print "non-arrowed" types for here, and andHere to avoid + something like Constructor a=>b c=>d. In the new syntax, we don't care if here + and andHere have unguarded arrow types like a=>b because they're safely + separated by commas. + *) + | Pcstr_tuple l -> [makeTup (List.map self#core_type l)] + in + let gadtRes = match pcd_res with + | None -> None + | Some x -> Some (makeList ~inline:(true, true) ~break:IfNeed [ + formatJustTheTypeConstraint (self#core_type x) + ]) + in + let normalize lst = match lst with + | [] -> raise (NotPossible "should not be called") + | [hd] -> hd + | _::_ -> makeList ~inline:(true, true) ~break:IfNeed ~postSpace:true lst + in + let add_bar constructor = + makeList ~postSpace:true (if print_bar then [atom "|"; constructor] else [constructor]) + in + (* In some cases (e.g. inline records) we want the label with bar & the gadt resolution + * as a list. + * | If { + * pred: expr bool, + * true_branch: expr 'a, + * false_branch: expr 'a + * } ==> end of label + * :expr 'a; ==> gadt res + * The label & the gadt res form two separate units combined into a list. + * This is necessary to properly align the closing '}' on the same height as the 'If'. + *) + let add_bar_2 ?gadt name args = + let lbl = label name args in + let fullLbl = match gadt with + | Some g -> makeList ~inline:(true, true) ~break:IfNeed ~postSpace:true [lbl; g] + | None -> lbl + in + add_bar fullLbl + in + + let prefix = if polymorphic then "`" else "" in + let sourceMappedName = atom ~loc:pcd_name.loc (prefix ^ pcd_name.txt) in + let sourceMappedNameWithAttributes = + if stdAttrs = [] then + sourceMappedName + else + formatAttributed sourceMappedName (self#attributes stdAttrs) + in + let constructorName = makeList ~postSpace:true [sourceMappedNameWithAttributes] in + let everything = match (args, gadtRes) with + | ([], None) -> add_bar sourceMappedNameWithAttributes + | ([], Some gadt) -> add_bar_2 sourceMappedNameWithAttributes gadt + | (_::_, None) -> add_bar_2 constructorName (normalize args) + | (_::_, Some gadt) -> + (match pcd_args with + | Pcstr_record _ -> add_bar_2 ~gadt constructorName (normalize args) + | _ -> add_bar_2 constructorName (makeList [normalize args; gadt])) + in + source_map ~loc:pcd_loc everything + + method record_declaration ?assumeRecordLoc lbls = + let recordRow i pld = + let hasPunning = recordRowIsPunned pld in + let name = + if hasPunning + then [atom pld.pld_name.txt] + else [atom pld.pld_name.txt; atom ":"] + in + let name = source_map ~loc:pld.pld_name.loc (makeList name) in + let withMutable = + match pld.pld_mutable with + | Immutable -> name + | Mutable -> makeList ~postSpace:true [atom "mutable"; name] + in + let recordRow = if hasPunning then + label withMutable (atom "") + else + label ~space:true withMutable (self#core_type pld.pld_type) + in + let recordRow = match pld.pld_attributes with + | [] -> recordRow + | _::_ as attrs -> + formatAttributed ~labelBreak:`Always_rec recordRow (self#attributes attrs) in + source_map ~loc:pld.pld_loc recordRow + in + let rows = List.mapi recordRow lbls in + (* if a record has more than 2 rows, always break *) + let break = + if List.length rows >= 2 + then Layout.Always_rec + else Layout.IfNeed + in + source_map ?loc:assumeRecordLoc + (makeList ~wrap:("{", "}") ~sep:commaTrail ~postSpace:true ~break rows) + + (* Returns the type declaration partitioned into three segments - one + suitable for appending to a label, the actual type manifest + and the list of constraints. *) + method type_declaration_binding_segments x = + (* Segments of the type binding (occuring after the type keyword) that + should begin with "=". Zero to two total sections. + This is just a straightforward reverse mapping from the original parser: + type_kind: + /*empty*/ + { (Ptype_abstract, Public, None) } + | EQUAL core_type + { (Ptype_abstract, Public, Some $2) } + | EQUAL PRIVATE core_type + { (Ptype_abstract, Private, Some $3) } + | EQUAL constructor_declarations + { (Ptype_variant(List.rev $2), Public, None) } + | EQUAL PRIVATE constructor_declarations + { (Ptype_variant(List.rev $3), Private, None) } + | EQUAL private_flag BAR constructor_declarations + { (Ptype_variant(List.rev $4), $2, None) } + | EQUAL DOTDOT + { (Ptype_open, Public, None) } + | EQUAL private_flag LBRACE label_declarations opt_comma RBRACE + { (Ptype_record(List.rev $4), $2, None) } + | EQUAL core_type EQUAL private_flag opt_bar constructor_declarations + { (Ptype_variant(List.rev $6), $4, Some $2) } + | EQUAL core_type EQUAL DOTDOT + { (Ptype_open, Public, Some $2) } + | EQUAL core_type EQUAL private_flag LBRACE label_declarations opt_comma RBRACE + { (Ptype_record(List.rev $6), $4, Some $2) } + *) + let privateAtom = (atom "pri") in + let privatize scope lst = match scope with + | Public -> lst + | Private -> privateAtom::lst in + + let estimateRecordOpenBracePoint () = + match x.ptype_params with + | [] -> x.ptype_name.loc.loc_end + | hd::tl -> + (fst (List.nth x.ptype_params (List.length x.ptype_params - 1))).ptyp_loc.loc_end + in + + let equalInitiatedSegments = match (x.ptype_kind, x.ptype_private, x.ptype_manifest) with + (* /*empty*/ {(Ptype_abstract, Public, None)} *) + | (Ptype_abstract, Public, None) -> [ + + ] + (* EQUAL core_type {(Ptype_abstract, Public, Some _)} *) + | (Ptype_abstract, Public, Some y) -> [ + [self#core_type y] + ] + (* EQUAL PRIVATE core_type {(Ptype_abstract, Private, Some $3)} *) + | (Ptype_abstract, Private, Some y) -> [ + [privateAtom; self#core_type y] + ] + (* EQUAL constructor_declarations {(Ptype_variant _., Public, None)} *) + (* This case is redundant *) + (* | (Ptype_variant lst, Public, None) -> [ *) + (* [makeSpacedBreakableInlineList (List.map type_variant_leaf lst)] *) + (* ] *) + (* EQUAL PRIVATE constructor_declarations {(Ptype_variant _, Private, None)} *) + | (Ptype_variant lst, Private, None) -> [ + [privateAtom; makeList ~break:IfNeed ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst)] + ] + (* EQUAL private_flag BAR constructor_declarations {(Ptype_variant _, $2, None)} *) + | (Ptype_variant lst, scope, None) -> [ + privatize scope [makeList ~break:Always_rec ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst)] + ] + (* EQUAL DOTDOT {(Ptype_open, Public, None)} *) + | (Ptype_open, Public, None) -> [ + [atom ".."] + ] + (* Super confusing how record/variants' manifest is not actually the + description of the structure. What's in the manifest in that case is + the *second* EQUALS asignment. *) + + (* EQUAL private_flag LBRACE label_declarations opt_comma RBRACE {(Ptype_record _, $2, None)} *) + | (Ptype_record lst, scope, None) -> + let assumeRecordLoc = {loc_start = estimateRecordOpenBracePoint(); loc_end = x.ptype_loc.loc_end; loc_ghost = false} in + [privatize scope [self#record_declaration ~assumeRecordLoc lst]] + (* And now all of the forms involving *TWO* equals *) + (* Again, super confusing how manifests of variants/records represent the + structure after the second equals. *) + (* ================================================*) + + + (* EQUAL core_type EQUAL private_flag opt_bar constructor_declarations { + (Ptype_variant _, _, Some _)} *) + | (Ptype_variant lst, scope, Some mani) -> [ + [self#core_type mani]; + let variant = makeList ~break:IfNeed ~postSpace:true ~inline:(true, true) (List.map self#type_variant_leaf lst) in + privatize scope [variant]; + ] + + (* EQUAL core_type EQUAL DOTDOT {(Ptype_open, Public, Some $2)} *) + | (Ptype_open, Public, Some mani) -> [ + [self#core_type mani]; + [atom ".."]; + ] + (* EQUAL core_type EQUAL private_flag LBRACE label_declarations opt_comma RBRACE + {(Ptype_record _, $4, Some $2)} *) + | (Ptype_record lst, scope, Some mani) -> + let declaration = self#record_declaration lst in + let record = match scope with + | Public -> [declaration] + | Private -> [label ~space:true privateAtom declaration] + in + [ [self#core_type mani]; record ] + + (* Everything else is impossible *) + (* ================================================*) + + | (_, _, _ ) -> raise (NotPossible "Encountered impossible type specification") + in + + let makeConstraint (ct1, ct2, _) = + let constraintEq = makeList ~postSpace:true [ + atom "constraint"; + self#core_type ct1; + atom "="; + ] in + label ~space:true constraintEq (self#core_type ct2) in + let constraints = List.map makeConstraint x.ptype_cstrs in + (equalInitiatedSegments, constraints) + + (* "non-arrowed" means "a type where all arrows are inside at least one level of parens" + + z => z: not a "non-arrowed" type. + (a, b): a "non-arrowed" type. + (z=>z): a "non-arrowed" type because the arrows are guarded by parens. + + A "non arrowed, non simple" type would be one that is not-arrowed, and also + not "simple". Simple means it is "clearly one unit" like (a, b), identifier, + "hello", None. + *) + method non_arrowed_non_simple_core_type x = + let {stdAttrs} = partitionAttributes x.ptyp_attributes in + if stdAttrs <> [] then + formatAttributed + (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) + (self#attributes stdAttrs) + else + match x.ptyp_desc with + (* This significantly differs from the standard OCaml printer/parser: + Type constructors are no longer simple *) + | _ -> self#non_arrowed_simple_core_type x + + method non_arrowed_simple_core_type x = + let {stdAttrs} = partitionAttributes x.ptyp_attributes in + if stdAttrs <> [] then + formatSimpleAttributed + (self#non_arrowed_simple_core_type {x with ptyp_attributes=[]}) + (self#attributes stdAttrs) + else + let result = + match x.ptyp_desc with + (* LPAREN core_type_comma_list RPAREN %prec below_NEWDOT *) + (* { match $2 with *) + (* | [] -> raise Parse_error *) + (* | one::[] -> one *) + (* | moreThanOne -> mktyp(Ptyp_tuple(List.rev moreThanOne)) } *) + | Ptyp_tuple l -> makeTup (List.map self#core_type l) + | Ptyp_object (l, o) -> self#unparseObject l o + | Ptyp_package (lid, cstrs) -> + let typeConstraint (s, ct) = + label ~space:true + (makeList ~break:IfNeed ~postSpace:true [atom "type"; self#longident_loc s; atom "="]) + (self#core_type ct) + in + ( + match cstrs with + | [] -> + makeList ~wrap:("(", ")") [ + (makeList ~postSpace:true [atom "module"; self#longident_loc lid]) + ] + | _ -> + makeList ~wrap:("(", ")") [ + label ~space:true + (makeList ~postSpace:true [atom "module"; self#longident_loc lid]) + (makeList + ~break:IfNeed + ~sep:(Sep " and ") + ~wrap:("with", "") + ~pad:(true, false) + (List.map typeConstraint cstrs)) + ] + ) + (* | QUOTE ident *) + (* { mktyp(Ptyp_var $2) } *) + | Ptyp_var s -> ensureSingleTokenSticksToLabel (self#tyvar s) + (* | UNDERSCORE *) + (* { mktyp(Ptyp_any) } *) + | Ptyp_any -> ensureSingleTokenSticksToLabel (atom "_") + (* | type_longident *) + (* { mktyp(Ptyp_constr(mkrhs $1 1, [])) } *) + | Ptyp_constr (li, []) -> + (* [ensureSingleTokenSticksToLabel] loses location information which is important + when you are embedded inside a list and comments are to be interleaved around you. + Therefore, we wrap the result in the correct [SourceMap]. *) + source_map ~loc:li.loc + (ensureSingleTokenSticksToLabel (self#longident_loc li)) + | Ptyp_constr (li, l) -> + (match l with + | [{ptyp_desc = Ptyp_object (l, o) }] when isJsDotTLongIdent li.txt && List.length l > 0 -> + (* should have one or more rows, Js.t({..}) should print as Js.t({..}) + * {..} has a totally different meaning than Js.t({..}) *) + self#unparseObject ~withStringKeys:true l o + | [{ptyp_desc = Ptyp_object (l, o) }] when not (isJsDotTLongIdent li.txt) -> + label (self#longident_loc li) + (self#unparseObject ~wrap:("(",")") l o) + | _ -> + (* small guidance: in `type foo = bar`, we're now at the `bar` part *) + + (* The single identifier has to be wrapped in a [ensureSingleTokenSticksToLabel] to + avoid (@see @avoidSingleTokenWrapping): *) + label (self#longident_loc li) + (makeTup (List.map self#core_type l))) + | Ptyp_variant (l, closed, low) -> + let pcd_loc = x.ptyp_loc in + let pcd_attributes = x.ptyp_attributes in + let pcd_res = None in + let variant_helper i rf = + match rf with + | Rtag (label, attrs, opt_ampersand, ctl) -> + let pcd_name = { + txt = label; + loc = pcd_loc; + } in + let pcd_args = Pcstr_tuple ctl in + let all_attrs = List.concat [pcd_attributes; attrs] in + self#type_variant_leaf ~opt_ampersand ~polymorphic:true {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes = all_attrs} + | Rinherit ct -> + (* '| type' is required if the Rinherit is not the first + row_field in the list + *) + if i = 0 then + self#core_type ct + else + makeList ~postSpace:true [atom "|"; self#core_type ct] in + let (designator, tl) = + match (closed,low) with + | (Closed,None) -> ("", []) + | (Closed,Some tl) -> ("<", tl) + | (Open,_) -> (">", []) in + let node_list = List.mapi variant_helper l in + let ll = (List.map (fun t -> atom ("`" ^ t)) tl) in + let tag_list = makeList ~postSpace:true ~break:IfNeed ((atom ">")::ll) in + let type_list = if List.length tl != 0 then node_list@[tag_list] else node_list in + makeList ~wrap:("[" ^ designator,"]") ~pad:(true, false) ~postSpace:true ~break:IfNeed type_list + | Ptyp_class (li, []) -> makeList [atom "#"; self#longident_loc li] + | Ptyp_class (li, l) -> + label + (makeList [atom "#"; self#longident_loc li]) + (makeTup (List.map self#core_type l)) + | Ptyp_extension e -> self#extension e + | Ptyp_arrow (_, _, _) + | Ptyp_alias (_, _) + | Ptyp_poly (_, _) -> + makeList ~wrap:("(",")") ~break:IfNeed [self#core_type x] + in + source_map ~loc:x.ptyp_loc result + (* TODO: ensure that we have a form of desugaring that protects *) + (* when final argument of curried pattern is a type constraint: *) + (* | COLON non_arrowed_core_type EQUALGREATER expr + { mkexp_constraint $4 (Some $2, None) } *) + (* \----/ \--/ + constraint coerce + + Creates a ghost expression: + mkexp_constraint | Some t, None -> ghexp(Pexp_constraint(e, t)) + *) + + method pattern_list_split_cons acc = function + | { + ppat_desc = Ppat_construct ( + { txt = Lident("::"); loc=consLoc }, + Some {ppat_desc = Ppat_tuple ([pat1; pat2])} + ) + } -> + self#pattern_list_split_cons (pat1::acc) pat2 + | p -> (List.rev acc), p + + (* + * Adds parens to the right sub-tree when it is not a single node: + * + * A | B is formatted as A | B + * A | (B | C) is formatted as A | (B | C) + * + * Also, adds parens to both sub-trees when both of them + * are not a single node: + * (A | B) | (C | D) is formatted as A | B | (C | D) + * A | B | (C | D) is formatted as A | B | (C | D) + * (A | B) | C is formatted as A | B | C + * A | B | C is formatted as A | B | C + * + *) + method or_pattern p1 p2 = + let (p1_raw, p2_raw) = (self#pattern p1, self#pattern p2) in + let (left, right) = + match p2.ppat_desc with + | Ppat_or _ -> (p1_raw, formatPrecedence p2_raw) + | _ -> (p1_raw, p2_raw) + in + makeList + ~break:IfNeed + ~inline:(true, true) + ~sep:(Sep "|") + ~postSpace:true + ~preSpace:true + [left; right] + + method pattern_without_or x = + (* TODOATTRIBUTES: Handle the stdAttrs here *) + let {arityAttrs} = partitionAttributes x.ppat_attributes in + match x.ppat_desc with + | Ppat_alias (p, s) -> + let raw_pattern = (self#pattern p) in + let pattern_with_precedence = match p.ppat_desc with + | Ppat_or (p1, p2) -> formatPrecedence (self#or_pattern p1 p2) + | _ -> raw_pattern + in + label ~space:true + (source_map ~loc:p.ppat_loc pattern_with_precedence) + (makeList ~postSpace:true [ + atom "as"; + (source_map ~loc:s.loc (protectIdentifier s.txt)) + ]) (* RA*) + | Ppat_variant (l, Some p) -> + if arityAttrs != [] then + raise (NotPossible "Should never see embedded attributes on poly variant") + else + source_map ~loc:x.ppat_loc + (self#constructor_pattern (atom ("`" ^ l)) p + ~polyVariant:true ~arityIsClear:true) + | Ppat_lazy p -> label ~space:true (atom "lazy") (self#simple_pattern p) + | Ppat_construct (({txt} as li), po) when not (txt = Lident "::")-> (* FIXME The third field always false *) + let formattedConstruction = match po with + (* TODO: Check the explicit_arity field on the pattern/constructor + attributes to determine if should desugar to an *actual* tuple. *) + (* | Some ({ *) + (* ppat_desc=Ppat_tuple l; *) + (* ppat_attributes=[{txt="explicit_arity"; loc}] *) + (* }) -> *) + (* label ~space:true (self#longident_loc li) (makeSpacedBreakableInlineList (List.map self#simple_pattern l)) *) + | Some pattern -> + let arityIsClear = isArityClear arityAttrs in + self#constructor_pattern ~arityIsClear (self#longident_loc li) pattern + | None -> + self#longident_loc li + in + source_map ~loc:x.ppat_loc formattedConstruction + | _ -> self#simple_pattern x + + method pattern x = + let {arityAttrs; stdAttrs} = partitionAttributes x.ppat_attributes in + if stdAttrs <> [] then + formatAttributed + (* Doesn't need to be simple_pattern because attributes are parse as + * appyling to the entire "function application style" syntax preceeding them *) + (self#pattern {x with ppat_attributes=arityAttrs}) + (self#attributes stdAttrs) + else match x.ppat_desc with + | Ppat_or (p1, p2) -> + self#or_pattern p1 p2 + | _ -> self#pattern_without_or x + + method patternList ?(wrap=("","")) pat = + let pat_list, pat_last = self#pattern_list_split_cons [] pat in + let pat_list = List.map self#pattern pat_list in + match pat_last with + | {ppat_desc = Ppat_construct ({txt=Lident "[]"},_)} -> (* [x,y,z] *) + let (lwrap, rwrap) = wrap in + makeList pat_list + ~break:Layout.IfNeed ~sep:commaTrail ~postSpace:true + ~wrap:(lwrap ^ "[", "]" ^ rwrap) + | _ -> (* x::y *) + makeES6List pat_list (self#pattern pat_last) ~wrap + + method constrained_pattern x = match x.ppat_desc with + | Ppat_constraint (p, ct) -> + formatTypeConstraint (self#pattern p) (self#core_type ct) + | _ -> self#pattern x + + method simple_pattern x = + let {arityAttrs; stdAttrs} = partitionAttributes x.ppat_attributes in + if stdAttrs <> [] then + formatSimpleAttributed + (self#simple_pattern {x with ppat_attributes=arityAttrs}) + (self#attributes stdAttrs) + else + let itm = + match x.ppat_desc with + | Ppat_construct (({loc; txt=Lident ("()"|"[]" as x)}), _) -> + (* Patterns' locations might include a leading bar depending on the + * context it was parsed in. Therefore, we need to include further + * information about the contents of the pattern such as tokens etc, + * in order to get comments to be distributed correctly.*) + atom ~loc x + | Ppat_construct (({txt=Lident "::"}), po) -> + self#patternList x (* LIST PATTERN *) + | Ppat_construct (({txt} as li), None) -> + source_map ~loc:x.ppat_loc (self#longident_loc li) + | Ppat_any -> atom "_" + | Ppat_var ({loc; txt = txt}) -> + (* + To prevent this: + + let oneArgShouldWrapToAlignWith + theFunctionNameBinding => theFunctionNameBinding; + + And instead do: + + let oneArgShouldWrapToAlignWith + theFunctionNameBinding => theFunctionNameBinding; + + We have to do something to the non "listy" patterns. Non listy + patterns don't indent the same amount as listy patterns when docked + to a label. + + If wrapping the non-listy pattern in [ensureSingleTokenSticksToLabel] + you'll get the following (even though it should wrap) + + let oneArgShouldWrapToAlignWith theFunctionNameBinding => theFunctionNameBinding; + + *) + source_map ~loc (protectIdentifier txt) + | Ppat_array l -> + self#patternArray l + | Ppat_unpack s -> + makeList ~wrap:("(", ")") ~break:IfNeed ~postSpace:true [atom "module"; atom s.txt] + | Ppat_type li -> + makeList [atom "#"; self#longident_loc li] + | Ppat_record (l, closed) -> + self#patternRecord l closed + | Ppat_tuple l -> + self#patternTuple l + | Ppat_constant c -> (self#constant c) + | Ppat_interval (c1, c2) -> makeList [self#constant c1; atom ".."; self#constant c2] + | Ppat_variant (l, None) -> makeList[atom "`"; atom l] + | Ppat_constraint (p, ct) -> + formatPrecedence (formatTypeConstraint (self#pattern p) (self#core_type ct)) + | Ppat_lazy p ->formatPrecedence (label ~space:true (atom "lazy") (self#simple_pattern p)) + | Ppat_extension e -> self#extension e + | Ppat_exception p -> + (* + An exception pattern with an alias should be wrapped in (...) + The rules for what goes to the right of the exception are a little (too) nuanced. + It accepts "non simple" parameters, except in the case of `as`. + Here we consistently apply "simplification" to the exception argument. + Example: + | exception (Sys_error _ as exc) => raise exc + parses correctly while + | Sys_error _ as exc => raise exc + results in incorrect parsing with type error otherwise. + *) + makeList ~postSpace:true [atom "exception"; self#simple_pattern p] + | _ -> formatPrecedence (self#pattern x) (* May have a redundant sourcemap *) + in + source_map ~loc:x.ppat_loc itm + + method label_exp lbl opt pat = + let term = self#constrained_pattern pat in + let param = match lbl with + | Nolabel -> term + | Labelled lbl | Optional lbl when is_punned_labelled_pattern pat lbl -> + makeList [atom namedArgSym; term] + | Labelled lbl | Optional lbl -> + let lblLayout= + makeList ~sep:(Sep " ") ~break:Layout.Never + [atom (namedArgSym ^ lbl); atom "as"] + in + label lblLayout ~space:true term + in + match opt, lbl with + | None, Optional _ -> makeList [param; atom "=?"] + | None, _ -> param + | Some o, _ -> makeList [param; atom "="; (self#unparseConstraintExpr ~ensureExpr:true o)] + + method access op cls e1 e2 = makeList [ + (* Important that this be not breaking - at least to preserve same + behavior as stock desugarer. It might even be required (double check + in parser.mly) *) + e1; + atom op; + e2; + atom cls; + ] + + + method simple_get_application x = + let {stdAttrs; jsxAttrs} = partitionAttributes x.pexp_attributes in + match (x.pexp_desc, stdAttrs, jsxAttrs) with + | (_, attrHd::attrTl, []) -> None (* Has some printed attributes - not simple *) + | (Pexp_apply ({pexp_desc=Pexp_ident loc}, l), [], _jsx::_) -> ( + (* TODO: Soon, we will allow the final argument to be an identifier which + represents the entire list. This would be written as + `...list`. If you imagine there being an implicit [] inside + the tag, then it would be consistent with array spread: + [...list] evaluates to the thing as list. + *) + let hasLabelledChildrenLiteral = List.exists (function + | (Labelled "children", _) -> true + | _ -> false + ) l in + let rec hasSingleNonLabelledUnitAndIsAtTheEnd l = match l with + | [] -> false + | (Nolabel, {pexp_desc = Pexp_construct ({txt = Lident "()"}, _)}) :: [] -> true + | (Nolabel, _) :: rest -> false + | _ :: rest -> hasSingleNonLabelledUnitAndIsAtTheEnd rest + in + if hasLabelledChildrenLiteral && hasSingleNonLabelledUnitAndIsAtTheEnd l then + let moduleNameList = List.rev (List.tl (List.rev (Longident.flatten loc.txt))) in + if List.length moduleNameList > 0 then + if Longident.last loc.txt = "createElement" then + Some (self#formatJSXComponent (String.concat "." moduleNameList) l) + else None + else Some (self#formatJSXComponent (Longident.last loc.txt) l) + else None + ) + | (Pexp_apply (eFun, ls), [], []) -> ( + match (printedStringAndFixityExpr eFun, ls) with + (* We must take care not to print two subsequent prefix operators without + spaces between them (`! !` could become `!!` which is totally + different). *) + | (AlmostSimplePrefix prefixStr, [(Nolabel, rightExpr)]) -> + let forceSpace = match rightExpr.pexp_desc with + | Pexp_apply (ee, lsls) -> + (match printedStringAndFixityExpr ee with | AlmostSimplePrefix _ -> true | _ -> false) + | _ -> false + in + let rightItm = self#simplifyUnparseExpr rightExpr in + Some (label ~space:forceSpace (atom prefixStr) rightItm) + | (UnaryPostfix postfixStr, [(Nolabel, leftExpr)]) -> + let forceSpace = match leftExpr.pexp_desc with + | Pexp_apply (ee, lsls) -> + (match printedStringAndFixityExpr ee with + | UnaryPostfix "^" | AlmostSimplePrefix _ -> true + | _ -> false) + | _ -> false + in + let leftItm = self#simplifyUnparseExpr leftExpr in + Some (label ~space:forceSpace leftItm (atom postfixStr)) + | (Infix infixStr, [(_, leftExpr); (_, rightExpr)]) when infixStr.[0] = '#' -> + (* Little hack. We check the right expression to see if it's also a SHARPOP, if it is + we call `formatPrecedence` on the result of `simplifyUnparseExpr` to add the appropriate + parens. This is done because `unparseExpr` doesn't seem to be able to handle + high enough precedence things. Using the normal precedence handling, something like + + ret #= (Some 10) + + gets pretty printed to + + ret #= Some 10 + + Which seems to indicate that the pretty printer doesn't think `#=` is of + high enough precedence for the parens to be worth adding back. *) + let rightItm = ( + match rightExpr.pexp_desc with + | Pexp_apply (eFun, ls) -> ( + match (printedStringAndFixityExpr eFun, ls) with + | (Infix infixStr, [(_, _); (_, _)]) when infixStr.[0] = '#' -> formatPrecedence (self#simplifyUnparseExpr rightExpr) + | _ -> self#simplifyUnparseExpr rightExpr + ) + | _ -> self#simplifyUnparseExpr rightExpr + ) in + Some (makeList [self#simple_enough_to_be_lhs_dot_send leftExpr; atom infixStr; rightItm]) + | (_, _) -> ( + match (eFun, ls) with + | ({pexp_desc = Pexp_ident {txt = Ldot (Lident ("Array"),"get")}}, [(_,e1);(_,e2)]) -> + Some (self#access "[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)) + | ({pexp_desc = Pexp_ident {txt = Ldot (Lident ("String"),"get")}}, [(_,e1);(_,e2)]) -> + Some (self#access ".[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)) + | ( + {pexp_desc= Pexp_ident {txt=Ldot (Ldot (Lident "Bigarray", "Genarray" ), "get")}}, + [(_,a); (_,{pexp_desc=Pexp_array ls})] + ) -> + let formattedList = List.map self#simplifyUnparseExpr ls in + Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList)) + | ({pexp_desc= Pexp_ident {txt=Ldot (Ldot (Lident "Bigarray", ("Array1"|"Array2"|"Array3")), "get")}}, (_,a)::rest) -> + let formattedList = List.map self#simplifyUnparseExpr (List.map snd rest) in + Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList)) + | _ -> None + ) + ) + | _ -> None + + (** Detects "sugar expressions" (sugar for array/string setters) and returns their separate + parts. *) + method sugar_set_expr_parts e = + if e.pexp_attributes <> [] then None + (* should also check attributes underneath *) + else match e.pexp_desc with + | Pexp_apply ({pexp_desc=Pexp_ident{txt=Ldot (Lident ("Array"), "set")}}, [(_,e1);(_,e2);(_,e3)]) -> + Some (self#access "[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2), e3) + | Pexp_apply ({pexp_desc=Pexp_ident {txt=Ldot (Lident "String", "set")}}, [(_,e1);(_,e2);(_,e3)]) -> + Some ((self#access ".[" "]" (self#simple_enough_to_be_lhs_dot_send e1) (self#unparseExpr e2)), e3) + | Pexp_apply ( + {pexp_desc=Pexp_ident {txt = Ldot (Ldot (Lident "Bigarray", array), "set")}}, + label_exprs + ) -> ( + match array with + | "Genarray" -> ( + match label_exprs with + | [(_,a);(_,{pexp_desc=Pexp_array ls});(_,c)] -> + let formattedList = List.map self#simplifyUnparseExpr ls in + Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList), c) + | _ -> None + ) + | ("Array1"|"Array2"|"Array3") -> ( + match label_exprs with + | (_,a)::rest -> ( + match List.rev rest with + | (_,v)::rest -> + let args = List.map snd (List.rev rest) in + let formattedList = List.map self#simplifyUnparseExpr args in + Some (self#access ".{" "}" (self#simple_enough_to_be_lhs_dot_send a) (makeCommaBreakableList formattedList), v) + | _ -> assert false + ) + | _ -> assert false + ) + | _ -> None + ) + | _ -> None + + (* + + How would we know not to print the sequence without { }; protecting the let a? + + let a + | + sequence + / \ + let a print a + alert a + let res = { + let a = something(); + { \ + alert(a); | portion to be parsed as a sequence() + let a = 20; | The final ; print(a) causes the entire + alert(a); | portion to be parsed as a sequence() + }; | + print (a); / + } + + ****************************************************************** + Any time the First expression of a sequence is another sequence, or (as in + this case) a let, wrapping the first sequence expression in { } is + required. + ****************************************************************** + *) + + (** + TODO: Configure the optional ability to print the *minimum* number of + parens. It's simply a matter of changing [higherPrecedenceThan] to + [higherOrEqualPrecedenceThan]. + *) + + (* The point of the function is to ensure that ~reducesAfterRight:rightExpr will reduce + at the proper time when it is reparsed, possibly wrapping it + in parenthesis if needed. It ensures a rule doesn't reduce + until *after* `reducesAfterRight` gets a chance to reduce. + Example: The addtion rule which has precedence of rightmost + token "+", in `x + a * b` should not reduce until after the a * b gets + a chance to reduce. This function would determine the minimum parens to + ensure that. *) + method ensureContainingRule ~withPrecedence ~reducesAfterRight () = + match self#unparseExprRecurse reducesAfterRight with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, rightRecurse)-> + if higherPrecedenceThan shiftPrecedence withPrecedence then begin + rightRecurse + end + else if (higherPrecedenceThan withPrecedence shiftPrecedence) then + LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc (self#unparseResolvedRule rightRecurse)) + else ( + if isRightAssociative withPrecedence then + rightRecurse + else + LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc (self#unparseResolvedRule rightRecurse)) + ) + | FunctionApplication itms -> + LayoutNode (formatAttachmentApplication applicationFinalWrapping None (itms, Some reducesAfterRight.pexp_loc)) + | PotentiallyLowPrecedence itm -> LayoutNode (formatPrecedence ~loc:reducesAfterRight.pexp_loc itm) + | Simple itm -> LayoutNode itm + + method ensureExpression ~reducesOnToken expr = + match self#unparseExprRecurse expr with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, leftRecurse) -> + if higherPrecedenceThan reducePrecedence reducesOnToken then leftRecurse + else if higherPrecedenceThan reducesOnToken reducePrecedence then + LayoutNode (formatPrecedence ~loc:expr.pexp_loc (self#unparseResolvedRule leftRecurse)) + else ( + if isLeftAssociative reducesOnToken then + leftRecurse + else + LayoutNode (formatPrecedence ~loc:expr.pexp_loc (self#unparseResolvedRule leftRecurse)) + ) + | FunctionApplication itms -> LayoutNode (formatAttachmentApplication applicationFinalWrapping None (itms, Some expr.pexp_loc)) + | PotentiallyLowPrecedence itm -> LayoutNode (formatPrecedence ~loc:expr.pexp_loc itm) + | Simple itm -> LayoutNode itm + + (** Attempts to unparse: The beginning of a more general printing algorithm, + that determines how to print based on precedence of tokens and rules. + The end goal is that this should be completely auto-generated from the + Menhir parsing tables. We could move more and more into this function. + + You could always just call self#expression, but `unparseExpr` will render + infix/prefix/unary/terary fixities in their beautiful forms while + minimizing parenthesis. + *) + method unparseExpr x = + match self#unparseExprRecurse x with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, resolvedRule) -> + self#unparseResolvedRule resolvedRule + | FunctionApplication itms -> + formatAttachmentApplication applicationFinalWrapping None (itms, Some x.pexp_loc) + | PotentiallyLowPrecedence itm -> itm + | Simple itm -> itm + + (* This method may not even be needed *) + method unparseUnattributedExpr x = + match partitionAttributes x.pexp_attributes with + | {docAttrs = []; stdAttrs = []; _} -> self#unparseExpr x + | _ -> makeList ~wrap:("(",")") [self#unparseExpr x] + + (* ensureExpr ensures that the expression is wrapped in parens + * e.g. is necessary in cases like: + * let display = (:message=("hello": string)) => 1; + * but not in cases like: + * let f = (a: bool) => 1; + * TODO: in the future we should probably use the type ruleCategory + * to 'automatically' ensure the validity of a constraint expr with parens... + *) + method unparseConstraintExpr ?(ensureExpr=false) e = + let itm = + match e with + | { pexp_attributes = []; pexp_desc = Pexp_constraint (x, ct)} -> + let x = self#unparseExpr x in + let children = [x; label ~space:true (atom ":") (self#core_type ct)] in + if ensureExpr then + makeList ~wrap:("(", ")") children + else makeList children + | { pexp_attributes; pexp_desc = Pexp_constant c } -> + (* When we have Some(-1) or someFunction(-1, -2), the arguments -1 and -2 + * pass through this case. In this context they don't need to be wrapped in extra parens + * Some((-1)) should be printed as Some(-1). This is in contrast with + * 1 + (-1) where we print the parens for readability. *) + let constant = self#constant ~parens:ensureExpr c in + begin match pexp_attributes with + | [] -> constant + | attrs -> + let formattedAttrs = makeSpacedBreakableInlineList (List.map self#item_attribute attrs) in + makeSpacedBreakableInlineList [formattedAttrs; constant] + end + | x -> self#unparseExpr x + in + source_map ~loc:e.pexp_loc itm + + method simplifyUnparseExpr x = + match self#unparseExprRecurse x with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, itm) -> + formatPrecedence ~loc:x.pexp_loc (self#unparseResolvedRule itm) + | FunctionApplication itms -> + formatPrecedence ~loc:x.pexp_loc (formatAttachmentApplication applicationFinalWrapping None (itms, Some x.pexp_loc)) + | PotentiallyLowPrecedence itm -> formatPrecedence ~loc:x.pexp_loc itm + | Simple itm -> itm + + + method unparseResolvedRule = function + | LayoutNode layoutNode -> layoutNode + | InfixTree _ as infixTree -> + let infixChainList = computeInfixChain infixTree in + let l = formatComputedInfixChain infixChainList in + makeList ~inline:(true, true) ~sep:(Sep " ") ~break:IfNeed l + + + method unparseExprApplicationItems x = + match self#unparseExprRecurse x with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, wrappedRule) -> + let itm = self#unparseResolvedRule wrappedRule in + ([itm], Some x.pexp_loc) + | FunctionApplication itms -> (itms, Some x.pexp_loc) + | PotentiallyLowPrecedence itm -> ([itm], Some x.pexp_loc) + | Simple itm -> ([itm], Some x.pexp_loc) + + + (* + * Replace (__x) => foo(__x) with foo(_) + *) + method process_underscore_application x = + let process_application expr = + let process_arg (l,e) = match e.pexp_desc with + | Pexp_ident ({ txt = Lident "__x"} as id) -> + let pexp_desc = Pexp_ident {id with txt = Lident "_"} in + (l, {e with pexp_desc}) + | _ -> + (l,e) in + match expr.pexp_desc with + | Pexp_apply (e_fun, args) -> + let pexp_desc = Pexp_apply (e_fun, List.map process_arg args) in + {expr with pexp_desc} + | _ -> + expr in + match x.pexp_desc with + | Pexp_fun (Nolabel, None, {ppat_desc = Ppat_var {txt="__x"}}, + ({pexp_desc = Pexp_apply _} as e)) -> + process_application e + | Pexp_fun (l, eo, p, e) -> + let e_processed = self#process_underscore_application e in + if e == e_processed then + x + else + {x with pexp_desc = Pexp_fun (l, eo, p, e_processed)} + | _ -> + x + + method unparseExprRecurse x = + let x = self#process_underscore_application x in + (* If there are any attributes, render unary like `(~-) x [@ppx]`, and infix like `(+) x y [@attr]` *) + + let {arityAttrs; stdAttrs; jsxAttrs; uncurried} = + partitionAttributes ~allowUncurry:(Reason_heuristics.bsExprCanBeUncurried x) x.pexp_attributes + in + let () = if uncurried then Hashtbl.add uncurriedTable x.pexp_loc true in + let x = {x with pexp_attributes = (arityAttrs @ stdAttrs @ jsxAttrs) } in + (* If there's any attributes, recurse without them, then apply them to + the ends of functions, or simplify infix printings then append. *) + if stdAttrs <> [] then + let withoutVisibleAttrs = {x with pexp_attributes=(arityAttrs @ jsxAttrs)} in + let attributesAsList = (List.map self#attribute stdAttrs) in + let itms = match self#unparseExprRecurse withoutVisibleAttrs with + | SpecificInfixPrecedence ({reducePrecedence; shiftPrecedence}, wrappedRule) -> + let itm = self#unparseResolvedRule wrappedRule in + [formatPrecedence ~loc:x.pexp_loc itm] + | FunctionApplication itms -> itms + | PotentiallyLowPrecedence itm -> [formatPrecedence ~loc:x.pexp_loc itm] + | Simple itm -> [itm] + in + FunctionApplication [ + makeList + ~break:IfNeed + ~inline:(true, true) + ~indent:0 + ~postSpace:true + (List.concat [attributesAsList; itms]) + ] + else + match self#simplest_expression x with + | Some se -> Simple se + | None -> + match x.pexp_desc with + | Pexp_apply (e, ls) -> ( + let ls = List.map (fun (l,expr) -> (l, self#process_underscore_application expr)) ls in + match (self#sugar_set_expr_parts x) with + (* Returns None if there's attributes - would render as regular function *) + (* Format as if it were an infix function application with identifier "=" *) + | Some (simplyFormatedLeftItm, rightExpr) -> ( + let tokenPrec = Token updateToken in + let rightItm = self#ensureContainingRule ~withPrecedence:tokenPrec ~reducesAfterRight:rightExpr () in + let leftWithOp = makeList ~postSpace:true [simplyFormatedLeftItm; atom updateToken] in + let expr = label ~space:true leftWithOp (self#unparseResolvedRule rightItm) in + SpecificInfixPrecedence ({reducePrecedence=tokenPrec; shiftPrecedence=tokenPrec}, LayoutNode expr) + ) + | None -> ( + match (printedStringAndFixityExpr e, ls) with + | (Infix printedIdent, [(Nolabel, leftExpr); (Nolabel, rightExpr)]) -> + let infixToken = Token printedIdent in + let rightItm = self#ensureContainingRule ~withPrecedence:infixToken ~reducesAfterRight:rightExpr () in + let leftItm = self#ensureExpression ~reducesOnToken:infixToken leftExpr in + let infixTree = InfixTree (printedIdent, leftItm, rightItm) in + SpecificInfixPrecedence ({reducePrecedence=infixToken; shiftPrecedence=infixToken}, infixTree) + (* Will be rendered as `(+) a b c` which is parsed with higher precedence than all + the other forms unparsed here.*) + | (UnaryPlusPrefix printedIdent, [(Nolabel, rightExpr)]) -> + let prec = Custom "prec_unary" in + let rightItm = self#unparseResolvedRule ( + self#ensureContainingRule ~withPrecedence:prec ~reducesAfterRight:rightExpr () + ) in + let expr = label ~space:true (atom printedIdent) rightItm in + SpecificInfixPrecedence ({reducePrecedence=prec; shiftPrecedence=Token printedIdent}, LayoutNode expr) + | (UnaryMinusPrefix printedIdent, [(Nolabel, rightExpr)]) + | (UnaryNotPrefix printedIdent, [(Nolabel, rightExpr)]) -> + let prec = Custom "prec_unary" in + let rightItm = self#unparseResolvedRule ( + self#ensureContainingRule ~withPrecedence:prec ~reducesAfterRight:rightExpr () + ) in + let expr = label ~space:true (atom printedIdent) rightItm in + SpecificInfixPrecedence ({reducePrecedence=prec; shiftPrecedence=Token printedIdent}, LayoutNode expr) + (* Will need to be rendered in self#expression as (~-) x y z. *) + | (_, _) -> + (* This case will happen when there is something like + + Bar.createElement a::1 b::2 [] [@bla] [@JSX] + + At this point the bla will be stripped (because it's a visible + attribute) but the JSX will still be there. + *) + + (* this case also happens when we have something like: + * List.map((a) => a + 1, numbers); + * We got two "List.map" as Pexp_ident & a list of arguments: + * [`(a) => a + 1`; `numbers`] + * + * Another possible case is: + * describe("App", () => + * test("math", () => + * Expect.expect(1 + 2) |> toBe(3))); + *) + let uncurried = try Hashtbl.find uncurriedTable x.pexp_loc with | Not_found -> false in + FunctionApplication (self#formatFunAppl ~uncurried ~jsxAttrs ~args:ls ~applicationExpr:x ~funExpr:e ()) + ) + ) + | Pexp_construct (li, Some eo) when not (is_simple_construct (view_expr x)) -> ( + match view_expr x with + (* TODO: Explicit arity *) + | `normal -> + let arityIsClear = isArityClear arityAttrs in + FunctionApplication [self#constructor_expression ~arityIsClear stdAttrs (self#longident_loc li) eo] + | _ -> assert false + ) + | Pexp_variant (l, Some eo) -> + if arityAttrs != [] then + raise (NotPossible "Should never see embedded attributes on poly variant") + else + FunctionApplication [self#constructor_expression ~polyVariant:true ~arityIsClear:true stdAttrs (atom ("`" ^ l)) eo] + (* TODO: Should protect this identifier *) + | Pexp_setinstvar (s, rightExpr) -> + let rightItm = self#unparseResolvedRule ( + self#ensureContainingRule ~withPrecedence:(Token updateToken) ~reducesAfterRight:rightExpr () + ) in + let expr = label ~space:true (makeList ~postSpace:true [(protectIdentifier s.txt); atom updateToken]) rightItm in + SpecificInfixPrecedence ({reducePrecedence=(Token updateToken); shiftPrecedence=(Token updateToken)}, LayoutNode expr) + | Pexp_setfield (leftExpr, li, rightExpr) -> + let rightItm = self#unparseResolvedRule ( + self#ensureContainingRule ~withPrecedence:(Token updateToken) ~reducesAfterRight:rightExpr () + ) in + let leftItm = + label + (makeList [self#simple_enough_to_be_lhs_dot_send leftExpr; atom "."]) + (self#longident_loc li) in + let expr = label ~space:true (makeList ~postSpace:true [leftItm; atom updateToken]) rightItm in + SpecificInfixPrecedence ({reducePrecedence=(Token updateToken); shiftPrecedence=(Token updateToken)}, LayoutNode expr) + | Pexp_match (e, l) when detectTernary l != None -> ( + match detectTernary l with + | None -> raise (Invalid_argument "Impossible") + | Some (tt, ff) -> + let ifTrue = self#unparseExpr tt in + let testItm = self#unparseResolvedRule ( + self#ensureExpression e ~reducesOnToken:(Token "?") + ) in + let ifFalse = self#unparseResolvedRule ( + self#ensureContainingRule ~withPrecedence:(Token ":") ~reducesAfterRight:ff () + ) in + let withQuestion = + source_map ~loc:e.pexp_loc + (makeList ~postSpace:true [testItm; atom "?"]) + in + let trueFalseBranches = + makeList ~inline:(true, true) ~break:IfNeed ~sep:(Sep ":") ~postSpace:true ~preSpace:true [ifTrue; ifFalse] + in + let expr = label ~space:true withQuestion trueFalseBranches in + SpecificInfixPrecedence ({reducePrecedence=Token ":"; shiftPrecedence=Token "?"}, LayoutNode expr) + ) + | _ -> ( + match self#expression_requiring_parens_in_infix x with + | Some e -> PotentiallyLowPrecedence e + | None -> raise (Invalid_argument "No match for unparsing expression") + ) + + (* + It's not enough to only check if precedence of an infix left/right is + greater than the infix itself. We also should likely pay attention to + left/right associativity. So how do we render the minimum number of + parenthesis? + + The intuition is that sequential right associative operators will + naturally build up deep trees on the right side (left builds up left-deep + trees). So by default, we add parens to model the tree structure that + we're rendering except when the parser will *naturally* parse the tree + structure that the parens assert. + + Sequential identical infix operators: + ------------------------------------ + So if we see a nested infix operator of precedence Y, as one side of + another infix operator that has the same precedence (Y), that is S + associative on the S side of the function application, we don't need to + wrap in parens. In more detail: + + -Add parens around infix binary function application + Exception 1: Unless we are a left-assoc operator of precedence X in the left branch of an operator w/ precedence X. + Exception 2: Unless we are a right-assoc operator of precedence X in the right branch of an operator w/ precedence X. + Exception 3: Unless we are a _any_-assoc X operator in the _any_ branch of an Y operator where X has greater precedence than Y. + + Note that the exceptions do not specify any special cases for mixing + left/right associativity. Precedence is what determines necessity of + parens for operators with non-identical precedences. Associativity + only determines necessity of parens for identically precedented operators. + + PLUS is left assoc: + - So this one *shouldn't* expand into two consecutive infix +: + + + [Pexp_apply] + / \ + first + [Pexp_apply] + / \ + second + third + + + - This one *should*: + + [Pexp_apply] + / \ + [ Pexp_apply ] + third + / \ + first + second + + + + COLONCOLON is right assoc, so + - This one *should* expand into two consecutive infix :: : + + [Pexp_apply] + / \ + first :: [Pexp_apply] + / \ + second :: third + + + - This one *shouldn't*: + + [Pexp_apply] + / \ + [ Pexp_apply ] :: third + / \ + first :: second + + + + + Sequential differing infix operators: + ------------------------------------ + + Neither of the following require paren grouping because of rule 3. + + + [Pexp_apply] + / \ + first + [Pexp_apply] + / \ + second * third + + + [Pexp_apply] + / \ + [Pexp_apply + third + / \ + first * second + + The previous has nothing to do with the fact that + and * have the same + associativity. Exception 3 applies to the following where :: is right assoc + and + is left. + has higher precedence than :: + + - so parens aren't required to group + when it is in a branch of a + lower precedence :: + + [Pexp_apply] + / \ + first :: [Pexp_apply] + / \ + second + third + + + - Whereas there is no Exception that applies in this case (Exception 3 + doesn't apply) so parens are required around the :: in this case. + + [Pexp_apply] + / \ + [ Pexp_apply ] + third + / \ + first :: second + + *) + + method classExpressionToFormattedApplicationItems = function + | { pcl_desc = Pcl_apply (ce, l) } -> + [label (self#simple_class_expr ce) (self#label_x_expression_params l)] + | x -> [self#class_expr x] + + + (** + How JSX is formatted/wrapped. We want the attributes to wrap independently + of children. + + + child + child + child + + + +-------------------------------+ + | left right (list of attrs) | + | / \ / \ | + | + | +---------+ + +--| | > + +---------+ + + *) + method formatJSXComponent componentName args = + let rec processArguments arguments processedAttrs children = + match arguments with + | (Labelled "children", {pexp_desc = Pexp_construct (_, None)}) :: tail -> + processArguments tail processedAttrs None + | (Labelled "children", {pexp_desc = Pexp_construct ({txt = Lident"::"}, Some {pexp_desc = Pexp_tuple components} )}) :: tail -> + processArguments tail processedAttrs (self#formatChildren components []) + | (Labelled "children", expr) :: tail -> + let childLayout = self#simplifyUnparseExpr expr in + let dotdotdotChild = makeList ~break:Layout.Never [atom "..."; childLayout] in + processArguments tail processedAttrs (Some [dotdotdotChild]) + | (Optional lbl, expression) :: tail -> + let nextAttr = + match expression.pexp_desc with + | Pexp_ident ident when isPunnedJsxArg lbl ident -> + makeList ~break:Layout.Never [atom "?"; atom lbl] + | _ -> + label (makeList ~break:Layout.Never [atom lbl; atom "=?"]) (self#simplifyUnparseExpr expression) in + processArguments tail (nextAttr :: processedAttrs) children + + | (Labelled lbl, expression) :: tail -> + let nextAttr = + match expression.pexp_desc with + | Pexp_ident ident when isPunnedJsxArg lbl ident -> atom lbl + | Pexp_apply ({pexp_desc=Pexp_ident loc}, l) when isJSXComponent loc l -> + label (atom (lbl ^ "=")) + (makeList ~break:IfNeed ~wrap:("{", "}") [(self#simplifyUnparseExpr expression)]) + | Pexp_record _ + | Pexp_construct _ + | Pexp_array _ + | Pexp_tuple _ + | Pexp_match _ + | Pexp_extension _ + | Pexp_fun _ + | Pexp_apply _ -> label (makeList [atom lbl; atom "="]) (self#simplifyUnparseExpr expression) + | _ -> makeList ([atom lbl; atom "="; self#simplifyUnparseExpr expression]) + in + processArguments tail (nextAttr :: processedAttrs) children + | [] -> (processedAttrs, children) + | _ :: tail -> processArguments tail processedAttrs children + in + let (reversedAttributes, children) = processArguments args [] None in + match children with + | None -> + makeList + ~break:IfNeed + ~wrap:("<" ^ componentName, "/>") + ~pad:(true, true) + ~inline:(false, false) + ~postSpace:true + (List.rev reversedAttributes) + | Some renderedChildren -> + let openTagAndAttrs = + match reversedAttributes with + | [] -> (atom ("<" ^ componentName ^ ">")) + | revAttrHd::revAttrTl -> + let finalAttrList = (List.rev (makeList ~break:Layout.Never [revAttrHd; atom ">"] :: revAttrTl)) in + let renderedAttrList = (makeList ~inline:(true, true) ~break:IfNeed ~pad:(false, false) ~preSpace:true finalAttrList) in + label + ~space:true + (atom ("<" ^ componentName)) + renderedAttrList + in + label + openTagAndAttrs + (makeList + ~wrap:("", "") + ~inline:(true, false) + ~break:IfNeed + ~pad:(true, true) + ~postSpace:true + renderedChildren) + + + (* Creates a list of simple module expressions corresponding to module + expression or functor application. *) + method moduleExpressionToFormattedApplicationItems x = + let rec extract_apps args = function + | { pmod_desc = Pmod_apply (me1, me2) } -> + let arg = source_map ~loc:me2.pmod_loc (self#simple_module_expr me2) in + extract_apps (arg :: args) me1 + | me -> + let head = source_map ~loc:me.pmod_loc (self#module_expr me) in + if args = [] then head else label head (makeTup args) + in + extract_apps [] x + + (* + + Watch out, if you see something like below (sixteenTuple getting put on a + newline), yet a paren-wrapped list wouldn't have had an extra newlin, you + might need to wrap the single token (sixteenTuple) in [ensureSingleTokenSticksToLabel]. + let ( + axx, + oxx, + pxx + ): + sixteenTuple = echoTuple ( + 0, + 0, + 0 + ); + *) + + method formatSimplePatternBinding labelOpener layoutPattern typeConstraint appTerms = + let letPattern = label ~break:`Never ~space:true (atom labelOpener) layoutPattern in + let upUntilEqual = + match typeConstraint with + | None -> letPattern + | Some tc -> formatTypeConstraint letPattern tc + in + let includingEqual = makeList ~postSpace:true [upUntilEqual; atom "="] in + formatAttachmentApplication applicationFinalWrapping (Some (true, includingEqual)) appTerms + + (* Only formats a type annotation for a value binding. *) + method formatSimpleSignatureBinding labelOpener bindingPattern typeConstraint = + let letPattern = (label ~space:true (atom labelOpener) bindingPattern) in + (formatTypeConstraint letPattern typeConstraint) + + + (* + The [bindingLabel] is either the function name (if let binding) or first + arg (if lambda). + + For defining layout of the following form: + + lbl one + two + constraint => { + ... + } + + If using "=" as the arrow, can also be used for: + + met private + myMethod + constraint = fun ... + + *) + method wrapCurriedFunctionBinding + ?attachTo + ~arrow + ?(sweet=false) + prefixText + bindingLabel + patternList + returnedAppTerms = + let allPatterns = bindingLabel::patternList in + let partitioning = curriedFunctionFinalWrapping allPatterns in + let everythingButReturnVal = + (* + Because align_closing is set to false, you get: + + (Brackets[] inserted to show boundaries between open/close of pattern list) + let[firstThing + secondThing + thirdThing] + + It only wraps to indent four by coincidence: If the "opening" token was + longer, you'd get: + + letReallyLong[firstThing + secondThing + thirdThing] + + For curried let bindings, we stick the arrow in the *last* pattern: + let[firstThing + secondThing + thirdThing =>] + + But it could have just as easily been the "closing" token corresponding to + "let". This works because we have [align_closing = false]. The benefit of + shoving it in the last pattern, is that we can turn [align_closing = true] + and still have the arrow stuck to the last pattern (which is usually what we + want) (See modeTwo below). + *) + match partitioning with + | None when sweet -> + makeList + ~pad:(false, true) + ~wrap:("", arrow) + ~indent:(settings.space * settings.indentWrappedPatternArgs) + ~postSpace:true + ~inline:(true, true) + ~break:IfNeed + allPatterns + | None -> + (* We want the binding label to break *with* the arguments. Again, + there's no apparent way to add additional indenting for the + args with this setting. *) + + (** + Formats lambdas by treating the first pattern as the + "bindingLabel" which is kind of strange in some cases (when + you only have one arg that wraps)... + + echoTheEchoer ( + fun ( + a, + p + ) => ( + a, + b + ) + + But it makes sense in others (where you have multiple args): + + echoTheEchoer ( + fun ( + a, + p + ) + mySecondArg + myThirdArg => ( + a, + b + ) + + Try any other convention for wrapping that first arg and it + won't look as balanced when adding multiple args. + + *) + makeList + ~pad:(true, true) + ~wrap:(prefixText, arrow) + ~indent:(settings.space * settings.indentWrappedPatternArgs) + ~postSpace:true + ~inline:(true, true) + ~break:IfNeed + allPatterns + | Some (attachedList, wrappedListy) -> + (* To get *only* the final argument to "break", while not + necessarily breaking the prior arguments, we dock everything + but the last item to a created label *) + label + ~space:true + ( + makeList + ~pad:(true, true) + ~wrap:(prefixText, arrow) + ~indent:(settings.space * settings.indentWrappedPatternArgs) + ~postSpace:true + ~inline:(true, true) + ~break:IfNeed + attachedList + ) + wrappedListy + in + + let everythingButAppTerms = match attachTo with + | None -> everythingButReturnVal + | Some toThis -> label ~space:true toThis everythingButReturnVal + in + formatAttachmentApplication + applicationFinalWrapping + (Some (true, everythingButAppTerms)) + returnedAppTerms + + method leadingCurriedAbstractTypes x = + let rec argsAndReturn xx = + match xx.pexp_desc with + | Pexp_newtype (str,e) -> + let (nextArgs, return) = argsAndReturn e in + (str::nextArgs, return) + | _ -> ([], xx.pexp_desc) + in argsAndReturn x + + method curriedConstructorPatternsAndReturnVal cl = + let rec argsAndReturn args = function + | { pcl_desc = Pcl_fun (label, eo, p, e); pcl_attributes = [] } -> + let arg = source_map ~loc:p.ppat_loc (self#label_exp label eo p) in + argsAndReturn (arg :: args) e + | xx -> + if args = [] then (None, xx) else (Some (makeTup (List.rev args)), xx) + in + argsAndReturn [] cl + + + + (* + Returns the arguments list (if any, that occur before the =>), and the + final expression (that is either returned from the function (after =>) or + that is bound to the value (if there are no arguments, and this is just a + let pattern binding)). + *) + method curriedPatternsAndReturnVal x = + let uncurried = try Hashtbl.find uncurriedTable x.pexp_loc with | Not_found -> false in + let rec extract_args xx = + if xx.pexp_attributes <> [] then + ([], xx) + else match xx.pexp_desc with + (* label * expression option * pattern * expression *) + | Pexp_fun (l, eo, p, e) -> + let args, ret = extract_args e in + (`Value (l,eo,p) :: args, ret) + | Pexp_newtype (newtype,e) -> + let args, ret = extract_args e in + (`Type newtype :: args, ret) + | Pexp_constraint _ -> ([], xx) + | _ -> ([], xx) + in + let prepare_arg = function + | `Value (l,eo,p) -> source_map ~loc:p.ppat_loc (self#label_exp l eo p) + | `Type nt -> atom ("type " ^ nt) + in + match extract_args x with + | ([], ret) -> ([], ret) + | ([`Value (Nolabel, None, p) ], ret) when is_unit_pattern p && uncurried -> + ( [atom "(.)"], ret) + | ([`Value (Nolabel, None, p) as arg], ret) when (is_unit_pattern p || is_ident_pattern p) && not(uncurried) -> + ([prepare_arg arg], ret) + | (args, ret) -> + if uncurried then + ([makeTup ~uncurried:true (List.map prepare_arg args)], ret) + else + ([makeTup (List.map prepare_arg args)], ret) + + (* Returns the (curriedModule, returnStructure) for a functor *) + method curriedFunctorPatternsAndReturnStruct = function + (* string loc * module_type option * module_expr *) + | { pmod_desc = Pmod_functor(s, mt, me2) } -> + let firstOne = + match mt with + | None -> atom "()" + | Some mt' -> formatTypeConstraint (atom s.txt) (self#module_type mt') + in + let (functorArgsRecurse, returnStructure) = (self#curriedFunctorPatternsAndReturnStruct me2) in + (firstOne::functorArgsRecurse, returnStructure) + | me -> ([], me) + + method isRenderableAsPolymorphicAbstractTypes + typeVars + polyType + leadingAbstractVars + nonVarifiedType = + same_ast_modulo_varification_and_extensions polyType nonVarifiedType && + for_all2' string_equal typeVars leadingAbstractVars + (* Reinterpret this as a pattern constraint since we don't currently have a + way to disambiguate. There is currently a way to disambiguate a parsing + from Ppat_constraint vs. Pexp_constraint. Currently (and consistent with + OCaml standard parser): + + let (x: typ) = blah; + Becomes Ppat_constraint + let x:poly . type = blah; + Becomes Ppat_constraint + let x:typ = blah; + Becomes Pexp_constraint(ghost) + let x = (blah:typ); + Becomes Pexp_constraint(ghost) + + How are double constraints represented? + let (x:typ) = (blah:typ); + If currently both constraints are parsed into a single Pexp_constraint, + then something must be lost, and how could you fail type checking on: + let x:int = (10:string) ?? Answer: It probably parses into a nested + Pexp_constraint. + + Proposal: + + let (x: typ) = blah; + Becomes Ppat_constraint (still) + let x:poly . type = blah; + Becomes Ppat_constraint (still) + let x:typ = blah; + Becomes Ppat_constraint + let x = blah:typ; + Becomes Pexp_constraint + + + Reasoning: Allows parsing of any of the currently valid ML forms, but + combines the two most similar into one form. The only lossyness is the + unnecessary parens, which there is already precedence for dropping in + expressions. In the existing approach, preserving a paren-constrained + expression is *impossible* because it becomes pretty printed as + let x:t =.... In the proposal, it is not impossible - it is only + impossible to preserve unnecessary parenthesis around the let binding. + + The one downside is that integrating with existing code that uses [let x = + (blah:typ)] in standard OCaml will be parsed as a Pexp_constraint. There + might be some lossiness (beyond parens) that occurs in the original OCaml + parser. + *) + + method locallyAbstractPolymorphicFunctionBinding prefixText layoutPattern funWithNewTypes absVars bodyType = + let appTerms = self#unparseExprApplicationItems funWithNewTypes in + let locallyAbstractTypes = (List.map atom absVars) in + let typeLayout = + source_map ~loc:bodyType.ptyp_loc (self#core_type bodyType) + in + let polyType = + label + ~space:true + (* TODO: This isn't a correct use of sep! It ruins how + * comments are interleaved. *) + (makeList [makeList ~sep:(Sep " ") (atom "type"::locallyAbstractTypes); atom "."]) + typeLayout + in + self#formatSimplePatternBinding + prefixText + layoutPattern + (Some polyType) + appTerms + + (** + Intelligently switches between: + Curried function binding w/ constraint on return expr: + lbl patt + pattAux + arg + :constraint => { + ... + } + + Constrained: + lbl patt + pattAux... + :constraint = { + ... + } + *) + method wrappedBinding prefixText ~arrow pattern patternAux expr = + let expr = self#process_underscore_application expr in + let (argsList, return) = self#curriedPatternsAndReturnVal expr in + let patternList = match patternAux with + | [] -> pattern + | _::_ -> makeList ~postSpace:true ~inline:(true, true) ~break:IfNeed (pattern::patternAux) + in + match (argsList, return.pexp_desc) with + | ([], Pexp_constraint (e, ct)) -> + let typeLayout = source_map ~loc:ct.ptyp_loc (self#core_type ct) in + let appTerms = self#unparseExprApplicationItems e in + self#formatSimplePatternBinding prefixText patternList (Some typeLayout) appTerms + | ([], _) -> + (* simple let binding, e.g. `let number = 5` *) + (* let f = (. a, b) => a + b; *) + let appTerms = self#unparseExprApplicationItems expr in + self#formatSimplePatternBinding prefixText patternList None appTerms + | (_::_, _) -> + let (argsWithConstraint, actualReturn) = self#normalizeFunctionArgsConstraint argsList return in + let fauxArgs = + List.concat [patternAux; argsWithConstraint] in + let returnedAppTerms = self#unparseExprApplicationItems actualReturn in + (* Attaches the `=` to `f` to recreate javascript function syntax in + * let f = (a, b) => a + b; *) + let lbl = makeList ~sep:(Sep " ") ~break:Layout.Never [pattern; atom "="] in + self#wrapCurriedFunctionBinding prefixText ~arrow lbl fauxArgs returnedAppTerms + + (* Similar to the above method. *) + method wrappedClassBinding prefixText pattern patternAux expr = + let (args, return) = self#curriedConstructorPatternsAndReturnVal expr in + let patternList = + match patternAux with + | [] -> pattern + | _::_ -> makeList ~postSpace:true ~inline:(true, true) ~break:IfNeed (pattern::patternAux) + in + match (args, return.pcl_desc) with + | (None, Pcl_constraint (e, ct)) -> + let typeLayout = source_map ~loc:ct.pcty_loc (self#class_constructor_type ct) in + self#formatSimplePatternBinding prefixText patternList (Some typeLayout) + (self#classExpressionToFormattedApplicationItems e, None) + | (None, _) -> + self#formatSimplePatternBinding prefixText patternList None + (self#classExpressionToFormattedApplicationItems expr, None) + | (Some args, _) -> + let (argsWithConstraint, actualReturn) = + self#normalizeConstructorArgsConstraint [args] return in + let fauxArgs = + List.concat [patternAux; argsWithConstraint] in + self#wrapCurriedFunctionBinding prefixText ~arrow:"=" pattern fauxArgs + (self#classExpressionToFormattedApplicationItems actualReturn, None) + + method binding prefixText x = (* TODO: print attributes *) + let body = match x.pvb_pat.ppat_desc with + | (Ppat_var {txt}) -> + self#wrappedBinding prefixText ~arrow:"=>" + (source_map ~loc:x.pvb_pat.ppat_loc (self#simple_pattern x.pvb_pat)) + [] x.pvb_expr + (* + Ppat_constraint is used in bindings of the form + + let (inParenVar:typ) = ... + + And in the case of let bindings for explicitly polymorphic type + annotations (see parser for more details). + + See reason_parser.mly for explanation of how we encode the two primary + forms of explicit polymorphic annotations in the parse tree, and how + we must recover them here. + *) + | (Ppat_constraint(p, ty)) -> ( + (* Locally abstract forall types are *seriously* mangled by the parsing + stage, and we have to be very smart about how to recover it. + + let df_locallyAbstractFuncAnnotated: + type a b. + a => + b => + (inputEchoRecord a, inputEchoRecord b) = + fun (input: a) (input2: b) => ( + {inputIs: input}, + {inputIs: input2} + ); + + becomes: + + let df_locallyAbstractFuncAnnotatedTwo: + 'a 'b . + 'a => 'b => (inputEchoRecord 'a, inputEchoRecord 'b) + = + fun (type a) (type b) => ( + fun (input: a) (input2: b) => ({inputIs: input}, {inputIs:input2}): + a => b => (inputEchoRecord a, inputEchoRecord b) + ); + *) + let layoutPattern = + source_map ~loc:x.pvb_pat.ppat_loc (self#simple_pattern p) + in + let leadingAbsTypesAndExpr = self#leadingCurriedAbstractTypes x.pvb_expr in + match (p.ppat_desc, ty.ptyp_desc, leadingAbsTypesAndExpr) with + | (Ppat_var s, + Ptyp_poly (typeVars, varifiedPolyType), + (_::_ as absVars, Pexp_constraint(funWithNewTypes, nonVarifiedExprType))) + when self#isRenderableAsPolymorphicAbstractTypes + typeVars + (* If even artificially varified - don't know until returns*) + varifiedPolyType + absVars + nonVarifiedExprType -> + (* + We assume was the case whenever we see this pattern in the + AST, it was because the parser parsed the polymorphic locally + abstract type sugar. + + Ppat_var..Ptyp_poly...Pexp_constraint: + + let x: 'a 'b . 'a => 'b => 'b = + fun (type a) (type b) => + (fun aVal bVal => bVal : a => b => b); + + We need to be careful not to accidentally detect similar + forms, that cannot be printed as sugar. + + let x: 'a 'b . 'a => 'b => 'b = + fun (type a) (type b) => + (fun aVal bVal => bVal : int => int => int); + + Should *NOT* be formatted as: + + let x: type a b. int => int => int = fun aVal bVal => bVal; + + The helper function + [same_ast_modulo_varification_and_extensions] was created to + help compare the varified constraint pattern body, and the + non-varified expression constraint type. + + The second requirement that we check before assuming that the + sugar form is correct, is to make sure the list of type vars + corresponds to a leading prefix of the Pexp_newtype variables. + *) + self#locallyAbstractPolymorphicFunctionBinding + prefixText + layoutPattern + funWithNewTypes + absVars + nonVarifiedExprType + | _ -> + let typeLayout = source_map ~loc:ty.ptyp_loc (self#core_type ty) in + let appTerms = self#unparseExprApplicationItems x.pvb_expr in + self#formatSimplePatternBinding + prefixText + layoutPattern + (Some typeLayout) + appTerms + ) + | _ -> + let layoutPattern = + source_map ~loc:x.pvb_pat.ppat_loc (self#pattern x.pvb_pat) + in + let appTerms = self#unparseExprApplicationItems x.pvb_expr in + self#formatSimplePatternBinding prefixText layoutPattern None appTerms + in + self#attach_std_item_attrs x.pvb_attributes + (source_map ~loc:x.pvb_loc body) + + (* Ensures that the constraint is formatted properly for sake of function + binding (formatted without arrows) + let x y z : no_unguarded_arrows_allowed_here => ret; + *) + method normalizeFunctionArgsConstraint argsList return = + match return.pexp_desc with + | Pexp_constraint (e, ct) -> + let typeLayout = + source_map ~loc:ct.ptyp_loc + (self#non_arrowed_non_simple_core_type ct) + in + (argsList@[formatJustTheTypeConstraint typeLayout], e) + | _ -> (argsList, return) + + method normalizeConstructorArgsConstraint argsList return = + match return.pcl_desc with + | Pcl_constraint (e, ct) when return.pcl_attributes = [] -> + let typeLayout = + source_map ~loc:ct.pcty_loc + (self#non_arrowed_class_constructor_type ct) + in + (argsList@[formatJustTheTypeConstraint typeLayout], e) + | _ -> (argsList, return) + + method bindingsLocationRange l = + let len = List.length l in + let fstLoc = (List.nth l 0).pvb_loc in + let lstLoc = (List.nth l (len - 1)).pvb_loc in + { + loc_start = fstLoc.loc_start; + loc_end = lstLoc.loc_end; + loc_ghost = false + } + + method bindings ?extension (rf, l) = + let first, rest = match l with + | [] -> raise (NotPossible "no bindings supplied") + | x :: xs -> x, xs + in + let label = add_extension_sugar "let" extension in + let label = match rf with + | Nonrecursive -> label + | Recursive -> label ^ " rec" + in + let first = self#binding label first in + match rest with + | [] -> first + | _ -> + makeList + ~postSpace:true + ~break:Always + ~indent:0 + ~inline:(true, true) + (first :: List.map (self#binding "and") rest) + + method letList expr = + match (expr.pexp_attributes, expr.pexp_desc) with + | ([], Pexp_let (rf, l, e)) -> + (* For "letList" bindings, the start/end isn't as simple as with + * module value bindings. For "let lists", the sequences were formed + * within braces {}. The parser relocates the first let binding to the + * first brace. *) + let bindingsLayout = self#bindings (rf, l) in + let bindingsLoc = self#bindingsLocationRange l in + (source_map ~loc:bindingsLoc bindingsLayout :: self#letList e) + | ([], Pexp_open (ovf, lid, e)) + (* Add this when check to make sure these are handled as regular "simple expressions" *) + when not (self#isSeriesOfOpensFollowedByNonSequencyExpression expr) -> + let overrideStr = match ovf with | Override -> "!" | Fresh -> "" in + let openLayout = label ~space:true + (atom ("open" ^ overrideStr)) + (self#longident_loc lid) + in + (* Just like the bindings, have to synthesize a location since the + * Pexp location is parsed (potentially) beginning with the open + * brace {} in the let sequence. *) + (source_map ~loc:lid.loc openLayout :: self#letList e) + | ([], Pexp_letmodule (s, me, e)) -> + let prefixText = "module" in + let bindingName = atom ~loc:s.loc s.txt in + let moduleExpr = me in + let letModuleLayout = + (self#let_module_binding prefixText bindingName moduleExpr) in + let letModuleLoc = { + loc_start = s.loc.loc_start; + loc_end = me.pmod_loc.loc_end; + loc_ghost = false + } in + (* Just like the bindings, have to synthesize a location since the + * Pexp location is parsed (potentially) beginning with the open + * brace {} in the let sequence. *) + (source_map ~loc:letModuleLoc letModuleLayout :: self#letList e) + | ([], Pexp_letexception (extensionConstructor, expr)) -> + let exc = self#exception_declaration extensionConstructor in + exc::(self#letList expr) + | ([], Pexp_sequence (({pexp_desc=Pexp_sequence _ }) as e1, e2)) + | ([], Pexp_sequence (({pexp_desc=Pexp_let _ }) as e1, e2)) + | ([], Pexp_sequence (({pexp_desc=Pexp_open _ }) as e1, e2)) + | ([], Pexp_sequence (({pexp_desc=Pexp_letmodule _}) as e1, e2)) + | ([], Pexp_sequence (e1, e2)) -> + let e1Layout = match expression_not_immediate_extension_sugar e1 with + | Some (extension, expr) -> + self#attach_std_item_attrs ~extension [] (self#unparseExpr expr) + | None ->self#unparseExpr e1 + in + (* It's kind of difficult to synthesize a location here in the case + * where this is the first expression in the braces. We could consider + * deeply inspecting the leftmost token/term in the expression. *) + (source_map ~loc:e1.pexp_loc e1Layout :: self#letList e2) + | _ -> + match expression_not_immediate_extension_sugar expr with + | Some (extension, {pexp_attributes = []; pexp_desc = Pexp_let (rf, l, e)}) -> + let bindingsLayout = self#bindings ~extension (rf, l) in + let bindingsLoc = self#bindingsLocationRange l in + (source_map ~loc:bindingsLoc bindingsLayout :: self#letList e) + | Some (extension, expr) -> + [self#attach_std_item_attrs ~extension [] (self#unparseExpr expr)] + | None -> + (* Should really do something to prevent infinite loops here. Never + allowing a top level call into letList to recurse back to + self#unparseExpr- top level calls into letList *must* be one of the + special forms above whereas lower level recursive calls may be of + any form. *) + [source_map ~loc:expr.pexp_loc (self#unparseExpr expr)] + + method constructor_expression ?(polyVariant=false) ~arityIsClear stdAttrs ctor eo = + let (implicit_arity, arguments) = + match eo.pexp_desc with + | Pexp_construct ( {txt= Lident "()"},_) -> + (* `foo() is a polymorphic variant that contains a single unit construct as expression + * This requires special formatting: `foo(()) -> `foo() *) + (false, atom "()") + (* special printing: MyConstructor(()) -> MyConstructor() *) + | Pexp_tuple l when is_single_unit_construct l -> + (false, atom "()") + | Pexp_tuple l when polyVariant == true -> + (false, self#unparseSequence ~wrap:("(", ")") ~construct:`Tuple l) + | Pexp_tuple l -> + (* There is no ambiguity when the number of tuple components is 1. + We don't need put implicit_arity in that case *) + (match l with + | exprList when isSingleArgParenApplication exprList -> + (false, self#singleArgParenApplication exprList) + | exprList -> + (not arityIsClear, makeTup (List.map self#unparseConstraintExpr l))) + | _ when isSingleArgParenApplication [eo] -> + (false, self#singleArgParenApplication [eo]) + | _ -> (false, makeTup [self#unparseConstraintExpr eo]) + in + let arguments = source_map ~loc:eo.pexp_loc arguments in + let construction = + label ctor (if isSequencey arguments + then arguments + else (ensureSingleTokenSticksToLabel arguments)) + in + let attrs = + if implicit_arity && (not polyVariant) then + ({txt="implicit_arity"; loc=eo.pexp_loc}, PStr []) :: stdAttrs + else + stdAttrs + in + match attrs with + | [] -> construction + | _::_ -> formatAttributed construction (self#attributes attrs) + + (* TODOATTRIBUTES: Handle stdAttrs here (merge with implicit_arity) *) + method constructor_pattern ?(polyVariant=false) ~arityIsClear ctor po = + let (implicit_arity, arguments) = + match po.ppat_desc with + | Ppat_tuple l -> + (* There is no ambiguity when the number of tuple components is 1. + We don't need put implicit_arity in that case *) + (List.length l > 1 && not arityIsClear, l) + | _ -> (false, [po]) + in + let space, arguments = match arguments with + | [x] when is_direct_pattern x -> (true, self#simple_pattern x) + | xs when isSingleArgParenPattern xs -> (false, self#singleArgParenPattern xs) + (* Optimize the case when it's a variant holding a shot variable - avoid trailing*) + | [{ppat_desc=Ppat_constant (Pconst_string (s, None))} as x] + | [{ppat_desc=Ppat_construct (({txt=Lident s}), None)} as x] + | [{ppat_desc=Ppat_var ({txt = s})} as x] + when Reason_heuristics.singleTokenPatternOmmitTrail s -> + let layout = makeTup ~trailComma:false [self#pattern x] in + (false, source_map ~loc:po.ppat_loc layout) + | [{ppat_desc=Ppat_any} as x] + | [{ppat_desc=Ppat_constant (Pconst_char _)} as x] + | [{ppat_desc=Ppat_constant (Pconst_integer _)} as x] -> + let layout = makeTup ~trailComma:false [self#pattern x] in + (false, source_map ~loc:po.ppat_loc layout) + | xs -> + let layout = makeTup (List.map self#pattern xs) in + (false, source_map ~loc:po.ppat_loc layout) + in + let construction = label ~space ctor arguments in + if implicit_arity && (not polyVariant) then + formatAttributed construction + (self#attributes [({txt="implicit_arity"; loc=po.ppat_loc}, PStr [])]) + else + construction + + (* + * Provides special printing for constructor arguments: + * iff there's one argument & they have some kind of wrapping, + * they're wrapping need to 'hug' the surrounding parens. + * Example: + * switch x { + * | Some({ + * a, + * b, + * }) => () + * } + * + * Notice how ({ and }) hug. + * This applies for records, arrays, tuples & lists. + * Also see `isSingleArgParenPattern` to determine if this kind of wrapping applies. + *) + method singleArgParenPattern = function + | [{ppat_desc = Ppat_record (l, closed); ppat_loc = loc}] -> + source_map ~loc (self#patternRecord ~wrap:("(", ")") l closed) + | [{ppat_desc = Ppat_array l; ppat_loc = loc}] -> + source_map ~loc (self#patternArray ~wrap:("(", ")") l) + | [{ppat_desc = Ppat_tuple l; ppat_loc = loc}] -> + source_map ~loc (self#patternTuple ~wrap:("(", ")") l) + | [{ppat_desc = Ppat_construct (({txt=Lident "::"}), po); ppat_loc} as listPattern] -> + source_map ~loc:ppat_loc (self#patternList ~wrap:("(", ")") listPattern) + | _ -> assert false + + method patternArray ?(wrap=("","")) l = + let (left, right) = wrap in + let wrap = (left ^ "[|", "|]" ^ right) in + makeList ~wrap ~break:IfNeed ~postSpace:true ~sep:commaTrail (List.map self#pattern l) + + method patternTuple ?(wrap=("","")) l = + let (left, right) = wrap in + let wrap = (left ^ "(", ")" ^ right) in + makeList ~wrap ~sep:commaTrail ~postSpace:true ~break:IfNeed (List.map self#constrained_pattern l) + + method patternRecord ?(wrap=("","")) l closed = + let longident_x_pattern (li, p) = + match (li, p.ppat_desc) with + | ({txt = ident}, Ppat_var {txt}) when Longident.last ident = txt -> + (* record field punning when destructuring. {x: x, y: y} becomes {x, y} *) + (* works with module prefix too: {MyModule.x: x, y: y} becomes {MyModule.x, y} *) + self#longident_loc li + | ({txt = ident}, + Ppat_alias ({ppat_desc = (Ppat_var {txt = ident2}) }, {txt = aliasIdent})) + when Longident.last ident = ident2 -> + (* record field punning when destructuring with renaming. {state: state as prevState} becomes {state as prevState *) + (* works with module prefix too: {ReasonReact.state: state as prevState} becomes {ReasonReact.state as prevState *) + makeList ~sep:(Sep " ") [self#longident_loc li; atom "as"; atom aliasIdent] + | _ -> + label ~space:true (makeList [self#longident_loc li; atom ":"]) (self#pattern p) + in + let rows = (List.map longident_x_pattern l)@( + match closed with + | Closed -> [] + | _ -> [atom "_"] + ) in + let (left, right) = wrap in + let wrap = (left ^ "{", "}" ^ right) in + makeList + ~wrap + ~break:IfNeed + ~sep:commaTrail + ~postSpace:true + rows + + method patternFunction ?extension loc l = + let estimatedFunLocation = { + loc_start = loc.loc_start; + loc_end = {loc.loc_start with pos_cnum = loc.loc_start.Lexing.pos_cnum + 3}; + loc_ghost = false; + } in + makeList + ~postSpace:true + ~break:IfNeed + ~inline:(true, true) + ~pad:(false, false) + ((atom ~loc:estimatedFunLocation (add_extension_sugar "fun" extension)) :: (self#case_list l)) + + method parenthesized_expr ?break expr = + let result = self#unparseExpr expr in + match expr.pexp_attributes, expr.pexp_desc with + | [], (Pexp_tuple _ | Pexp_construct ({txt=Lident "()"}, None)) -> result + | _ -> makeList ~wrap:("(",")") ?break [self#unparseExpr expr] + + (* Expressions requiring parens, in most contexts such as separated by infix *) + method expression_requiring_parens_in_infix x = + let {stdAttrs} = partitionAttributes x.pexp_attributes in + assert (stdAttrs == []); + let extension, x = expression_immediate_extension_sugar x in + match x.pexp_desc with + (* The only reason Pexp_fun must also be wrapped in parens when under + pipe, is that its => token will be confused with the match token. + Simple expression will also invoke `#reset`. *) + | Pexp_function _ when pipe || semi -> None (* Would be rendered as simplest_expression *) + | Pexp_function l -> Some (self#patternFunction ?extension x.pexp_loc l) + | _ -> + (* The Pexp_function cases above don't use location because comment printing + breaks for them. *) + let itm = match x.pexp_desc with + | Pexp_fun _ + | Pexp_newtype _ -> + (* let uncurried = *) + let (args, ret) = self#curriedPatternsAndReturnVal x in + ( match args with + | [] -> raise (NotPossible ("no arrow args in unparse ")) + | firstArg::tl -> + (* Suboptimal printing of parens: + + something >>= fun x => x + 1; + + Will be printed as: + + something >>= (fun x => x + 1); + + Because the arrow has lower precedence than >>=, but it wasn't + needed because + + (something >>= fun x) => x + 1; + + Is not a valid parse. Parens around the `=>` weren't needed to + prevent reducing instead of shifting. To optimize this part, we need + a much deeper encoding of the parse rules to print parens only when + needed, testing which rules will be reduced. It really should be + integrated deeply with Menhir. + + One question is, if it's this difficult to describe when parens are + needed, should we even print them with the minimum amount? We can + instead model everything as "infix" with ranked precedences. *) + let retValUnparsed = self#unparseExprApplicationItems ret in + Some (self#wrapCurriedFunctionBinding + ~sweet:(extension = None) + (add_extension_sugar "fun" extension) + ~arrow:"=>" firstArg tl retValUnparsed) + ) + | Pexp_try (e, l) -> + let estimatedBracePoint = { + loc_start = e.pexp_loc.loc_end; + loc_end = x.pexp_loc.loc_end; + loc_ghost = false; + } + in + let cases = (self#case_list ~allowUnguardedSequenceBodies:true l) in + let switchWith = label ~space:true + (atom (add_extension_sugar "try" extension)) + (self#parenthesized_expr ~break:IfNeed e) + in + Some ( + label + ~space:true + switchWith + (source_map ~loc:estimatedBracePoint + (makeList ~indent:settings.trySwitchIndent ~wrap:("{", "}") + ~break:Always_rec ~postSpace:true cases)) + ) + (* These should have already been handled and we should never havgotten this far. *) + | Pexp_setinstvar (s, e) -> raise (Invalid_argument "Cannot handle setinstvar here - call unparseExpr") + | Pexp_setfield (_, _, _) -> raise (Invalid_argument "Cannot handle setfield here - call unparseExpr") + | Pexp_apply (e, l) -> raise (Invalid_argument "Cannot handle apply here - call unparseExpr") + | Pexp_match (e, l) -> + let estimatedBracePoint = { + loc_start = e.pexp_loc.loc_end; + loc_end = x.pexp_loc.loc_end; + loc_ghost = false; + } + in + let cases = (self#case_list ~allowUnguardedSequenceBodies:true l) in + let switchWith = + label ~space:true (atom (add_extension_sugar "switch" extension)) + (self#parenthesized_expr ~break:IfNeed e) + in + let lbl = + label + ~space:true + switchWith + (source_map ~loc:estimatedBracePoint + (makeList ~indent:settings.trySwitchIndent ~wrap:("{", "}") + ~break:Always_rec ~postSpace:true cases)) + in + Some lbl + | Pexp_ifthenelse (e1, e2, eo) -> + let (blocks, finalExpression) = sequentialIfBlocks eo in + let rec singleExpression exp = + match exp.pexp_desc with + | Pexp_ident _ -> true + | Pexp_constant _ -> true + | Pexp_construct (_, arg) -> + (match arg with + | None -> true + | Some x -> singleExpression x) + | _ -> false + in + let singleLineIf = + (singleExpression e1) && + (singleExpression e2) && + (match eo with + | Some expr -> singleExpression expr + | None -> true + ) + in + let makeLetSequence = + if singleLineIf then + makeLetSequenceSingleLine + else + makeLetSequence + in + let rec sequence soFar remaining = ( + match (remaining, finalExpression) with + | ([], None) -> soFar + | ([], Some e) -> + let soFarWithElseAppended = makeList ~postSpace:true [soFar; atom "else"] in + label ~space:true soFarWithElseAppended + (source_map ~loc:e.pexp_loc (makeLetSequence (self#letList e))) + | (hd::tl, _) -> + let (e1, e2) = hd in + let soFarWithElseIfAppended = + label + ~space:true + (makeList ~postSpace:true [soFar; atom "else if"]) + (makeList ~wrap:("(",")") [self#unparseExpr e1]) + in + let nextSoFar = + label ~space:true soFarWithElseIfAppended + (source_map ~loc:e2.pexp_loc (makeLetSequence (self#letList e2))) + in + sequence nextSoFar tl + ) in + let init = + let if_ = atom (add_extension_sugar "if" extension) in + let cond = self#parenthesized_expr e1 in + label ~space:true + (source_map ~loc:e1.pexp_loc (label ~space:true if_ cond)) + (source_map ~loc:e2.pexp_loc (makeLetSequence (self#letList e2))) + in + Some (sequence init blocks) + | Pexp_while (e1, e2) -> + let lbl = + let while_ = atom (add_extension_sugar "while" extension) in + let cond = self#parenthesized_expr e1 in + label ~space:true + (label ~space:true while_ cond) + (source_map ~loc:e2.pexp_loc (makeLetSequence (self#letList e2))) + in + Some lbl + | Pexp_for (s, e1, e2, df, e3) -> + (* + * for longIdentifier in + * (longInit expr) to + * (longEnd expr) { + * print_int longIdentifier; + * }; + *) + let identifierIn = (makeList ~postSpace:true [self#pattern s; atom "in";]) in + let dockedToFor = makeList + ~break:IfNeed + ~postSpace:true + ~inline:(true, true) + ~wrap:("(",")") + [ + identifierIn; + makeList ~postSpace:true [self#unparseExpr e1; self#direction_flag df]; + (self#unparseExpr e2); + ] + in + let upToBody = makeList ~inline:(true, true) ~postSpace:true + [atom (add_extension_sugar "for" extension); dockedToFor] + in + Some (label ~space:true upToBody + (source_map ~loc:e3.pexp_loc (makeLetSequence (self#letList e3)))) + | Pexp_new li -> + Some (label ~space:true (atom "new") (self#longident_class_or_type_loc li)) + | Pexp_assert e -> + Some ( + label ~space:true + (atom "assert") + (self#reset#simplifyUnparseExpr e); + ) + | Pexp_lazy e -> + Some (label ~space:true (atom "lazy") (self#simplifyUnparseExpr e)) + | Pexp_poly _ -> + failwith ( + "This version of the pretty printer assumes it is impossible to " ^ + "construct a Pexp_poly outside of a method definition - yet it sees one." + ) + | _ -> None + in + match itm with + | None -> None + | Some i -> Some (source_map ~loc:x.pexp_loc i) + + method potentiallyConstrainedExpr x = + match x.pexp_desc with + | Pexp_constraint (e, ct) -> + formatTypeConstraint (self#unparseExpr e) (self#core_type ct) + | _ -> self#unparseExpr x + + + (* + * Because the rule BANG simple_expr was given %prec below_DOT_AND_SHARP, + * !x.y.z will parse as !(x.y.z) and not (!x).y.z. + * + * !x.y.z == !((x.y).z) + * !x#y#z == !((x#y)#z) + * + * So the intuition is: In general, any simple expression can exist to the + * left of a `.`, except `BANG simple_expr`, which has special precedence, + * and must be guarded in this one case. + * + * TODO: Instead of special casing this here, we should continue to extend + * unparseExpr to also unparse simple expressions, (by encoding the + * rules precedence below_DOT_AND_SHARP). + * + * TODO: + * Some would even have the prefix application be parsed with lower + * precedence function *application*. In the case of !, where ! means not, + * it makes a lot of sense because (!identifier)(arg) would be meaningless. + * + * !callTheFunction(1, 2, 3)(andEvenCurriedArgs) + * + * Only problem is that it could then not appear anywhere simple expressions + * would appear. + * + * We could make a special case for ! followed by one simple expression, and + * consider the result simple. + * + * Alternatively, we can figure out a way to not require simple expressions + * in the most common locations such as if/while tests. This is really hard + * (impossible w/ grammars Menhir supports?) + * + * if ! myFunc argOne argTwo { + * + * } else { + * + * }; + * + *) + method simple_enough_to_be_lhs_dot_send x = match x.pexp_desc with + | (Pexp_apply (eFun, _)) -> ( + match printedStringAndFixityExpr eFun with + | AlmostSimplePrefix _ -> + source_map ~loc:x.pexp_loc + (formatPrecedence (self#simplifyUnparseExpr x)) + | UnaryPlusPrefix _ + | UnaryMinusPrefix _ + | UnaryNotPrefix _ + | UnaryPostfix _ + | Infix _ -> self#simplifyUnparseExpr x + | Normal -> + if x.pexp_attributes = [] then + (* `let a = foo().bar` instead of `let a = (foo()).bar *) + (* same for foo()##bar, foo()#=bar, etc. *) + self#unparseExpr x + else + self#simplifyUnparseExpr x + ) + | _ -> self#simplifyUnparseExpr x + + method unparseRecord + ?wrap:((lwrap, rwrap)=("", "")) + ?withStringKeys:(withStringKeys=false) + ?allowPunning:(allowPunning=true) + ?forceBreak:(forceBreak=false) + l eo = + (* forceBreak is a ref which can be set to always break the record rows. + * Example, when we have a row which contains a nested record, + * this ref can be set to true from inside the printing of that row, + * which forces breaks for the outer record structure. *) + let forceBreak = ref forceBreak in + let quote = (atom "\"") in + let maybeQuoteFirstElem fst rest = + if withStringKeys then (match fst.txt with + | Lident s -> quote::(atom s)::quote::rest + | Ldot _ | Lapply _ -> assert false + ) + else + (self#longident_loc fst)::rest + in + let makeRow (li, e) shouldPun = + let totalRowLoc = { + loc_start = li.Asttypes.loc.loc_start; + loc_end = e.pexp_loc.loc_end; + loc_ghost = false; + } in + let theRow = match (e.pexp_desc, shouldPun, allowPunning) with + (* record value punning. Turns {foo: foo, bar: 1} into {foo, bar: 1} *) + (* also turns {Foo.bar: bar, baz: 1} into {Foo.bar, baz: 1} *) + (* don't turn {bar: Foo.bar, baz: 1} into {bar, baz: 1}, naturally *) + | (Pexp_ident {txt = Lident value}, true, true) when Longident.last li.txt = value -> + makeList (maybeQuoteFirstElem li []) + + (* Force breaks for nested records or bs obj sugar + * Example: + * let person = {name: {first: "Bob", last: "Zhmith"}, age: 32}; + * is a lot less readable than + * let person = { + * "name": { + * "first": "Bob", + * "last": "Zhmith" + * }, + * "age": 32 + * }; + *) + | (Pexp_record (recordRows, optionalGadt), _, _) -> + forceBreak := true; + let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in + let value = self#unparseRecord ~forceBreak: true recordRows optionalGadt in + label ~space:true keyWithColon value + | (Pexp_extension (s, p), _, _) when s.txt = "bs.obj" -> + forceBreak := true; + let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in + let value = self#formatBsObjExtensionSugar ~forceBreak:true p in + label ~space:true keyWithColon value + | (Pexp_object classStructure, _, _) -> + forceBreak := true; + let keyWithColon = makeList (maybeQuoteFirstElem li [atom ":"]) in + let value = self#classStructure ~forceBreak:true classStructure in + label ~space:true keyWithColon value + | _ -> + let (argsList, return) = self#curriedPatternsAndReturnVal e in + match argsList with + | [] -> + let appTerms = self#unparseExprApplicationItems e in + let upToColon = makeList (maybeQuoteFirstElem li [atom ":"]) in + formatAttachmentApplication applicationFinalWrapping (Some (true, upToColon)) appTerms + | firstArg :: tl -> + let upToColon = makeList (maybeQuoteFirstElem li [atom ":"]) in + let returnedAppTerms = self#unparseExprApplicationItems return in + self#wrapCurriedFunctionBinding + ~sweet:true ~attachTo:upToColon "fun" ~arrow:"=>" + firstArg tl returnedAppTerms + in source_map ~loc:totalRowLoc theRow + in + let rec getRows l = + match l with + | [] -> [] + | hd::[] -> [makeRow hd true] + | hd::hd2::tl -> (makeRow hd true)::(getRows (hd2::tl)) + in + + let allRows = match eo with + | None -> ( + match l with + (* No punning (or comma) for records with only a single field. It's ambiguous with an expression in a scope *) + (* See comment in parser.mly for lbl_expr_list_with_at_least_one_non_punned_field *) + | [hd] -> [makeRow hd false] + | _ -> getRows l + ) + | Some withRecord -> + let firstRow = ( + (* Unclear why "sugar_expr" was special cased hre. *) + let appTerms = self#unparseExprApplicationItems withRecord in + formatAttachmentApplication applicationFinalWrapping (Some (false, (atom "..."))) appTerms + ) in + source_map ~loc:withRecord.pexp_loc firstRow :: getRows l + in + makeList + ~wrap:(lwrap ^ "{" ,"}" ^ rwrap) + ~break:(if !forceBreak then Layout.Always else Layout.IfNeed) + ~sep:commaTrail + ~postSpace:true + allRows + + method isSeriesOfOpensFollowedByNonSequencyExpression expr = + match (expr.pexp_attributes, expr.pexp_desc) with + | ([], Pexp_let (rf, l, e)) -> false + | ([], Pexp_sequence _) -> false + | ([], Pexp_letmodule (s, me, e)) -> false + | ([], Pexp_open (ovf, lid, e)) -> + ovf == Fresh && self#isSeriesOfOpensFollowedByNonSequencyExpression e + | ([], Pexp_letexception _) -> false + | _ -> true + + method unparseObject ?wrap:((lwrap,rwrap)=("", "")) ?(withStringKeys=false) l o = + let core_field_type (s, attrs, ct) = + let l = extractStdAttrs attrs in + let row = + let rowKey = if withStringKeys then + (makeList ~wrap:("\"", "\"") [atom s]) + else (atom s) + in + label ~space:true + (makeList ~break:Layout.Never [rowKey; (atom ":")]) + (self#core_type ct) + in + (match l with + | [] -> row + | _::_ -> + makeList + ~postSpace:true + ~break:IfNeed + ~inline:(true, true) + (List.concat [self#attributes attrs; [row]])) + in + let rows = List.map core_field_type l in + let openness = match o with + | Closed -> atom "." + | Open -> atom ".." + in + (* if an object has more than 2 rows, always break for readability *) + let rows_layout = makeList + ~inline:(true, true) ~postSpace:true ~sep:commaTrail rows + ~break:(if List.length rows >= 2 + then Layout.Always_rec + else Layout.IfNeed) + in + makeList + ~break:Layout.IfNeed + ~preSpace:(List.length rows > 0) + ~wrap:(lwrap ^ "{", "}" ^ rwrap) + (openness::[rows_layout]) + + method unparseSequence ?wrap:(wrap=("", "")) ~construct l = + match construct with + | `ES6List -> + let seq, ext = (match List.rev l with + | ext :: seq_rev -> (List.rev seq_rev, ext) + | [] -> assert false) in + makeES6List ~wrap (List.map self#unparseExpr seq) (self#unparseExpr ext) + | _ -> + let (left, right) = wrap in + let (xf, (leftDelim, rightDelim)) = (match construct with + | `List -> (self#unparseExpr, ("[", "]")) + | `Array -> (self#unparseExpr, ("[|", "|]")) + | `Tuple -> (self#potentiallyConstrainedExpr, ("(", ")")) + | `ES6List -> assert false) + in + let wrap = (left ^ leftDelim, rightDelim ^ right) in + makeList + ~wrap + ~sep:commaTrail + ~break:IfNeed + ~postSpace:true + (List.map xf l) + + + method formatBsObjExtensionSugar ?wrap:(wrap=("", "")) ?(forceBreak=false) payload = + match payload with + | PStr [itm] -> ( + match itm with + | {pstr_desc = Pstr_eval ({ pexp_desc = Pexp_record (l, eo) }, []) } -> + self#unparseRecord ~forceBreak ~wrap ~withStringKeys:true ~allowPunning:false l eo + | {pstr_desc = Pstr_eval ({ pexp_desc = Pexp_extension ({txt = "bs.obj"}, payload) }, []) } -> + (* some folks write `[%bs.obj [%bs.obj {foo: bar}]]`. This looks improbable but + it happens often if you use the sugared version: `[%bs.obj {"foo": bar}]`. + We're gonna be lenient here and treat it as if they wanted to just write + `{"foo": bar}`. BuckleScript does the same relaxation when parsing bs.obj + *) + self#formatBsObjExtensionSugar ~wrap ~forceBreak payload + | _ -> raise (Invalid_argument "bs.obj only accepts a record. You've passed something else")) + | _ -> assert false + + method simplest_expression x = + let {stdAttrs; jsxAttrs} = partitionAttributes x.pexp_attributes in + if stdAttrs <> [] then + None + else + let item = + match x.pexp_desc with + (* The only reason Pexp_fun must also be wrapped in parens is that its => + token will be confused with the match token. *) + | Pexp_fun _ when pipe || semi -> Some (self#reset#simplifyUnparseExpr x) + | Pexp_function l when pipe || semi -> Some (formatPrecedence ~loc:x.pexp_loc (self#reset#patternFunction x.pexp_loc l)) + | Pexp_apply (e, l) -> ( + match self#simple_get_application x with + (* If it's the simple form of application. *) + | Some simpleGet -> Some simpleGet + | None -> None + ) + | Pexp_object cs -> Some (self#classStructure cs) + | Pexp_override l -> (* FIXME *) + let string_x_expression (s, e) = + label ~space:true (atom (s.txt ^ ":")) (self#unparseExpr e) + in + Some ( + makeList + ~postSpace:true + ~wrap:("{<", ">}") + ~sep:(Sep ",") + (List.map string_x_expression l) + ) + | Pexp_construct _ when is_simple_construct (view_expr x) -> + let hasJsxAttribute = jsxAttrs != [] in + Some ( + match view_expr x with + | `nil -> if hasJsxAttribute then atom "<> " else atom "[]" + | `tuple -> atom "()" + | `list xs -> (* LIST EXPRESSION *) + if hasJsxAttribute then + let actualChildren = + match self#formatChildren xs [] with + | None -> [] + | Some ch -> ch + in + makeList + ~break:IfNeed + ~inline:(false, false) + ~postSpace:true + ~wrap:("<>", "") + ~pad:(true, true) + actualChildren + else + self#unparseSequence ~construct:`List xs + | `cons xs -> + self#unparseSequence ~construct:`ES6List xs + | `simple x -> self#longident x + | _ -> assert false + ) + | Pexp_ident li -> + (* Lone identifiers shouldn't break when to the right of a label *) + Some (ensureSingleTokenSticksToLabel (self#longident_loc li)) + | Pexp_constant c -> + (* Constants shouldn't break when to the right of a label *) + Some (ensureSingleTokenSticksToLabel (self#constant c)) + | Pexp_pack me -> + Some ( + makeList + ~break:IfNeed + ~postSpace:true + ~wrap:("(", ")") + ~inline:(true, true) + [atom "module"; self#module_expr me;] + ) + | Pexp_tuple l -> + (* TODO: These may be simple, non-simple, or type constrained + non-simple expressions *) + Some (self#unparseSequence ~construct:`Tuple l) + | Pexp_constraint (e, ct) -> + Some ( + makeList + ~break:IfNeed + ~wrap:("(", ")") + [formatTypeConstraint (self#unparseExpr e) (self#core_type ct)] + ) + | Pexp_coerce (e, cto1, ct) -> + let optFormattedType = match cto1 with + | None -> None + | Some typ -> Some (self#core_type typ) in + Some ( + makeList + ~break:IfNeed + ~wrap:("(", ")") + [formatCoerce (self#unparseExpr e) optFormattedType (self#core_type ct)] + ) + | Pexp_variant (l, None) -> + Some (ensureSingleTokenSticksToLabel (atom ("`" ^ l))) + | Pexp_record (l, eo) -> Some (self#unparseRecord l eo) + | Pexp_array l -> + Some (self#unparseSequence ~construct:`Array l) + | Pexp_let _ | Pexp_sequence _ + | Pexp_letmodule _ | Pexp_letexception _ -> + Some (makeLetSequence (self#letList x)) + | Pexp_extension e -> + begin match expression_immediate_extension_sugar x with + | (Some _, _) -> None + | (None, _) -> + match expression_extension_sugar x with + | None -> Some (self#extension e) + | Some (extension, x') -> + match x'.pexp_desc with + | Pexp_let _ -> + Some (makeLetSequence (self#letList x)) + | Pexp_function l when (pipe || semi) -> + Some (formatPrecedence ~loc:x.pexp_loc + (self#reset#patternFunction ~extension x'.pexp_loc l)) + | _ -> Some (self#extension e) + end + | Pexp_open (ovf, lid, e) -> + if self#isSeriesOfOpensFollowedByNonSequencyExpression x then + (* + * Instead of printing: + * let result = { open Fmt; strf(foo);} + * + * We format as: + * let result = Fmt.(strf(foo)) + * + * (Also see https://github.com/facebook/Reason/issues/114) + *) + let expression = match e.pexp_desc with + | Pexp_record _ (* syntax sugar for M.{x:1} *) + | Pexp_tuple _ (* syntax sugar for M.(a, b) *) + | Pexp_object {pcstr_fields = []} (* syntax sugar for M.{} *) + | Pexp_construct ( {txt= Lident"::"},Some _) -> + self#simplifyUnparseExpr e (* syntax sugar for M.[x,y] *) + (* syntax sugar for the rest, wrap with parens to avoid ambiguity. + * E.g., avoid M.(M2.v) being printed as M.M2.v + *) + | _ -> makeList ~wrap:("(",")") ~break:IfNeed [self#unparseExpr e] + in + Some (label (label (self#longident_loc lid) (atom ("."))) expression) + else + Some (makeLetSequence (self#letList x)) + | Pexp_field (e, li) -> + Some (label (makeList [self#simple_enough_to_be_lhs_dot_send e; atom "."]) (self#longident_loc li)) + | Pexp_send (e, s) -> + let needparens = match e.pexp_desc with + | Pexp_apply (ee, _) -> + (match printedStringAndFixityExpr ee with + | UnaryPostfix "^" -> true + | _ -> false) + | _ -> false + in + let lhs = self#simple_enough_to_be_lhs_dot_send e in + let lhs = if needparens then makeList ~wrap:("(",")") [lhs] else lhs in + Some (label (makeList [lhs; atom "#";]) (atom s)) + | _ -> None + in + match item with + | None -> None + | Some i -> Some (source_map ~loc:x.pexp_loc i) + + method formatChildren children processedRev = + match children with + | {pexp_desc = Pexp_constant constant} :: remaining -> + self#formatChildren remaining (self#constant constant :: processedRev) + | {pexp_desc = Pexp_construct ({txt = Lident "::"}, Some {pexp_desc = Pexp_tuple children} )} :: remaining -> + self#formatChildren (remaining @ children) processedRev + | {pexp_desc = Pexp_apply(expr, l); pexp_attributes} :: remaining -> + self#formatChildren remaining (self#simplifyUnparseExpr (List.hd children) :: processedRev) + | {pexp_desc = Pexp_ident li} :: remaining -> + self#formatChildren remaining (self#longident_loc li :: processedRev) + | {pexp_desc = Pexp_construct ({txt = Lident "[]"}, None)} :: remaining -> self#formatChildren remaining processedRev + | head :: remaining -> self#formatChildren remaining (self#simplifyUnparseExpr head :: processedRev) + | [] -> match processedRev with + | [] -> None + | _::_ -> Some (List.rev processedRev) + + method direction_flag = function + | Upto -> atom "to" + | Downto -> atom "downto" + + method payload ppxToken ppxId e = + let wrap = ("[" ^ ppxToken ^ ppxId.txt, "]") in + let wrap_prefix str (x,y) = (x^str, y) in + let break = Layout.IfNeed in + let pad = (true, false) in + let postSpace = true in + match e with + | PStr [] -> atom ("[" ^ ppxToken ^ ppxId.txt ^ "]") + | PStr [itm] -> makeList ~break ~wrap ~pad [self#structure_item itm] + | PStr (_::_ as items) -> + let rows = List.map self#structure_item items in + makeList ~wrap ~break ~pad ~postSpace ~sep:(Layout.Sep ";") rows + | PTyp x -> + let wrap = wrap_prefix ":" wrap in + makeList ~wrap ~break ~pad [self#core_type x] + (* Signatures in attributes were added recently *) + | PSig [] -> atom ("[" ^ ppxToken ^ ppxId.txt ^":]") + | PSig [x] -> + let wrap = wrap_prefix ":" wrap in + makeList ~break ~wrap ~pad [self#signature_item x] + | PSig items -> + let wrap = wrap_prefix ":" wrap in + let rows = List.map self#signature_item items in + makeList ~wrap ~break ~pad ~postSpace ~sep:(Layout.Sep ";") rows + | PPat (x, None) -> + let wrap = wrap_prefix "?" wrap in + makeList ~wrap ~break ~pad [self#pattern x] + | PPat (x, Some e) -> + let wrap = wrap_prefix "?" wrap in + makeList ~wrap ~break ~pad ~postSpace [ + self#pattern x; + label ~space:true (atom "when") (self#unparseExpr e) + ] + + method extension (s, p) = + match s.txt with + (* We special case "bs.obj" for now to allow for a nicer interop with + * BuckleScript. We might be able to generalize to any kind of record + * looking thing with struct keys. *) + | "bs.obj" -> self#formatBsObjExtensionSugar p + | _ -> (self#payload "%" s p) + + method item_extension (s, e) = (self#payload "%%" s e) + + + (* [@ ...] Simple attributes *) + method attribute = function + | { Location. txt = ("ocaml.doc" | "ocaml.text") }, + PStr [{ pstr_desc = Pstr_eval ({ pexp_desc = Pexp_constant (Pconst_string(text, None)); _ } , _); + pstr_loc; _ }] -> + let text = if text = "" then "/**/" else "/**" ^ text ^ "*/" in + makeList ~inline:(true, true) ~postSpace:true ~preSpace:true ~indent:0 ~break:IfNeed [atom ~loc:pstr_loc text] + | (s, e) -> self#payload "@" s e + + (* [@@ ... ] Attributes that occur after a major item in a structure/class *) + method item_attribute = self#attribute + + (* [@@ ...] Attributes that occur not *after* an item in some structure/class/sig, but + rather as their own standalone item. Note that syntactic distinction + between item_attribute and floating_attribute is no longer necessary with + Reason. Thank you semicolons. *) + method floating_attribute = self#item_attribute + + method attributes l = List.map self#attribute l + + method attach_std_attrs l toThis = + let l = extractStdAttrs l in + match l with + | [] -> toThis + | _::_ -> makeList ~postSpace:true (List.concat [self#attributes l; [toThis]]) + + method attach_std_item_attrs ?(allowUncurry=true) ?extension l toThis = + let l = (partitionAttributes ~allowUncurry l).stdAttrs in + match extension, l with + | None, [] -> toThis + | _, _ -> + let extension = match extension with + | None -> [] + | Some id -> [atom ("%" ^ id.txt)] + in + makeList + ~postSpace:true ~indent:0 ~break:Layout.Always ~inline:(true, true) + (extension @ List.map self#item_attribute l @ [toThis]) + + method exception_declaration ed = + let pcd_name = ed.pext_name in + let pcd_loc = ed.pext_loc in + let pcd_attributes = [] in + let exn_arg = match ed.pext_kind with + | Pext_decl (args, type_opt) -> + let pcd_args, pcd_res = args, type_opt in + [self#type_variant_leaf_nobar {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes}] + | Pext_rebind id -> + [atom pcd_name.txt; atom "="; (self#longident_loc id)] in + self#attach_std_item_attrs ed.pext_attributes + (makeList ~postSpace:true ((atom "exception")::exn_arg)) + + (* + Note: that override doesn't appear in class_sig_field, but does occur in + class/object expressions. + TODO: TODOATTRIBUTES + *) + method method_sig_flags_for s = function + | Virtual -> [atom "virtual"; atom s] + | Concrete -> [atom s] + + method value_type_flags_for s = function + | (Virtual, Mutable) -> [atom "virtual"; atom "mutable"; atom s] + | (Virtual, Immutable) -> [atom "virtual"; atom s] + | (Concrete, Mutable) -> [atom "mutable"; atom s] + | (Concrete, Immutable) -> [atom s] + + method class_sig_field x = + match x.pctf_desc with + | Pctf_inherit ct -> + label ~space:true (atom "inherit") (self#class_constructor_type ct) + | Pctf_val (s, mf, vf, ct) -> + let valueFlags = self#value_type_flags_for (s ^ ":") (vf, mf) in + label + ~space:true + ( + label ~space:true + (atom "val") + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed valueFlags) + ) + (self#core_type ct) + | Pctf_method (s, pf, vf, ct) -> + let methodFlags = self#method_sig_flags_for (s ^ ":") vf + in + let pubOrPrivate = + match pf with + | Private -> "pri" + | Public -> "pub" + in + let m = label + ~space:true + (label ~space:true + (atom pubOrPrivate) + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed methodFlags) + ) + (self#core_type ct) + in + (self#attach_std_item_attrs x.pctf_attributes m) + | Pctf_constraint (ct1, ct2) -> + label + ~space:true + (atom "constraint") + (label ~space:true + (makeList ~postSpace:true [self#core_type ct1; atom "="]) + (self#core_type ct2) + ) + | Pctf_attribute a -> self#floating_attribute a + | Pctf_extension e -> self#item_extension e + + + (* The type of something returned from a constructor. Formerly [class_signature] *) + method shouldDisplayClassInstTypeItem x = match x.pctf_desc with + (*| Pctf_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) + | _ -> true + + method shouldDisplaySigItem x = match x.psig_desc with + (*| Psig_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) + | _ -> true + + method shouldDisplayStructureItem x = match x.pstr_desc with + (*| Pstr_attribute (s, _) -> (not (s.txt = "ocaml.text") && not (s.txt = "ocaml.doc"))*) + | _ -> true + + (* + [@@bs.val] [@@bs.module "react-dom"] (* formattedAttrs *) + external render : reactElement => element => unit = (* frstHalf *) + "render"; (* sndHalf *) + + To improve the formatting with breaking & indentation: + * consider the part before the '=' as a label + * combine that label with '=' in a list + * consider the part after the '=' as a list + * combine both parts as a label + * format the attributes with a ~postSpace:true (inline, inline) list + * format everything together in a ~postSpace:true (inline, inline) list + for nicer breaking + *) + method primitive_declaration vd = + let lblBefore = + label ~space:true + (makeList ~postSpace:true [atom "external"; protectIdentifier vd.pval_name.txt; atom ":"]) + (self#core_type vd.pval_type) + in + let frstHalf = makeList ~postSpace:true [lblBefore; atom "="] in + let sndHalf = makeSpacedBreakableInlineList (List.map self#constant_string vd.pval_prim) in + let primDecl = label ~space:true frstHalf sndHalf in + match vd.pval_attributes with + | [] -> primDecl + | attrs -> + let attrs = List.map (fun x -> self#item_attribute x) attrs in + let formattedAttrs = makeSpacedBreakableInlineList attrs in + makeSpacedBreakableInlineList [formattedAttrs; primDecl] + + method class_instance_type x = + match x.pcty_desc with + | Pcty_signature cs -> + let {pcsig_self = ct; pcsig_fields = l} = cs in + let instTypeFields = List.map self#class_sig_field l in + let allItems = match ct.ptyp_desc with + | Ptyp_any -> instTypeFields + | _ -> + label ~space:true (atom "as") (self#core_type ct) :: + instTypeFields + in + self#attach_std_item_attrs ~allowUncurry:false x.pcty_attributes ( + makeList + ~wrap:("{", "}") + ~postSpace:true + ~break:Layout.Always_rec + ~sep:(Sep ";") + allItems + ) + | Pcty_constr (li, l) -> + self#attach_std_attrs x.pcty_attributes ( + match l with + | [] -> self#longident_loc li + | _::_ -> + label + (self#longident_loc li) + (makeList ~wrap:("(", ")") ~sep:commaTrail (List.map self#core_type l)) + ) + | Pcty_extension e -> + self#attach_std_item_attrs x.pcty_attributes (self#extension e) + | Pcty_arrow _ -> failwith "class_instance_type should not be printed with Pcty_arrow" + + method class_declaration_list l = + let class_declaration ?(class_keyword=false) + ({pci_params=ls; pci_name={txt}; pci_virt; pci_expr={pcl_desc}; pci_loc} as x) = + let (firstToken, pattern, patternAux) = self#class_opening class_keyword txt pci_virt ls in + let classBinding = self#wrappedClassBinding firstToken pattern patternAux x.pci_expr in + source_map ~loc:pci_loc + (self#attach_std_item_attrs x.pci_attributes classBinding) + in + (match l with + | [] -> raise (NotPossible "Class definitions will have at least one item.") + | x::rest -> + makeNonIndentedBreakingList ( + class_declaration ~class_keyword:true x :: + List.map class_declaration rest + ) + ) + (* For use with [class type a = class_instance_type]. Class type + declarations/definitions declare the types of instances generated by class + constructors. + We have to call self#class_instance_type because self#class_constructor_type + would add a "new" before the type. + TODO: TODOATTRIBUTES: + *) + method class_type_declaration_list l = + let class_type_declaration kwd ({pci_params=ls;pci_name={txt};pci_attributes} as x) = + let opener = match x.pci_virt with + | Virtual -> kwd ^ " " ^ "virtual" + | Concrete -> kwd + in + + let upToName = + if ls == [] then + label ~space:true (atom opener) (atom txt) + else + label + ~space:true + (label ~space:true (atom opener) (atom txt)) + (self#class_params_def ls) + in + let includingEqual = makeList ~postSpace:true [upToName; atom "="] in + self#attach_std_item_attrs pci_attributes @@ + label ~space:true includingEqual (self#class_instance_type x.pci_expr) + in + match l with + | [] -> failwith "Should not call class_type_declaration with no classes" + | [x] -> class_type_declaration "class type" x + | x :: xs -> + makeList + ~break:Always_rec + ~indent:0 + ~inline:(true, true) + ( + (class_type_declaration "class type" x):: + List.map (class_type_declaration "and") xs + ) + + (* + Formerly the [class_type] + Notice how class_constructor_type doesn't have any type attributes - + class_instance_type does. + TODO: Divide into class_constructor_types that allow arrows and ones + that don't. + *) + method class_constructor_type x = + match x.pcty_desc with + | Pcty_arrow (l, co, cl) -> + let rec allArrowSegments acc = function + | { pcty_desc = Pcty_arrow (l, ct1, ct2); } -> + allArrowSegments (self#type_with_label (l, ct1, false) :: acc) ct2 + (* This "new" is unfortunate. See reason_parser.mly for details. *) + | xx -> (List.rev acc, self#class_constructor_type xx) + in + let (params, return) = allArrowSegments [] x in + let normalized = + makeList ~break:IfNeed + ~sep:(Sep "=>") + ~preSpace:true ~postSpace:true ~inline:(true, true) + [makeCommaBreakableListSurround "(" ")" params; return] + in + source_map ~loc:x.pcty_loc normalized + | _ -> + (* Unfortunately, we have to have final components of a class_constructor_type + be prefixed with the `new` keyword. Hopefully this is temporary. *) + self#class_instance_type x + + method non_arrowed_class_constructor_type x = + match x.pcty_desc with + | Pcty_arrow (l, co, cl) -> + source_map ~loc:x.pcty_loc + (formatPrecedence (self#class_constructor_type x)) + | _ -> self#class_instance_type x + + method class_field x = + let itm = + match x.pcf_desc with + | Pcf_inherit (ovf, ce, so) -> + let inheritText = ("inherit" ^ override ovf) in + let inheritExp = self#class_expr ce in + label + ~space:true + (atom inheritText) + ( + match so with + | None -> inheritExp; + | Some s -> label ~space:true inheritExp (atom ("as " ^ s)) + ) + | Pcf_val (s, mf, Cfk_concrete (ovf, e)) -> + let opening = match mf with + | Mutable -> + let mutableName = [atom "mutable"; atom s.txt] in + label + ~space:true + (atom ("val" ^ override ovf)) + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed mutableName) + | Immutable -> label ~space:true (atom ("val" ^ override ovf)) (atom s.txt) + in + let valExprAndConstraint = match e.pexp_desc with + | Pexp_constraint (ex, ct) -> + let openingWithTypeConstraint = formatTypeConstraint opening (self#core_type ct) in + label + ~space:true + (makeList ~postSpace:true [openingWithTypeConstraint; atom "="]) + (self#unparseExpr ex) + | _ -> + label ~space:true (makeList ~postSpace:true [opening; atom "="]) (self#unparseExpr e) + in + valExprAndConstraint + | Pcf_val (s, mf, Cfk_virtual ct) -> + let opening = match mf with + | Mutable -> + let mutableVirtualName = [atom "mutable"; atom "virtual"; atom s.txt] in + let openingTokens = + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed mutableVirtualName) in + label ~space:true (atom "val") openingTokens + | Immutable -> + let virtualName = [atom "virtual"; atom s.txt] in + let openingTokens = + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed virtualName) in + label ~space:true (atom "val") openingTokens + in + formatTypeConstraint opening (self#core_type ct) + | Pcf_method (s, pf, Cfk_virtual ct) -> + let opening = match pf with + | Private -> + let privateVirtualName = [atom "virtual"; atom s.txt] in + let openingTokens = + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed privateVirtualName) in + label ~space:true (atom "pri") openingTokens + | Public -> + let virtualName = [atom "virtual"; atom s.txt] in + let openingTokens = + (makeList ~postSpace:true ~inline:(false, true) ~break:IfNeed virtualName) in + label ~space:true (atom "pub") openingTokens + in + formatTypeConstraint opening (self#core_type ct) + | Pcf_method (s, pf, Cfk_concrete (ovf, e)) -> + let methodText = + let postFix = if ovf == Override then "!" else "" in + ( + match pf with + | Private -> "pri" ^ postFix + | Public -> "pub" ^ postFix + ) in + (* Should refactor the binding logic so faking out the AST isn't needed, + currently, it includes a ton of nuanced logic around recovering explicitly + polymorphic type definitions, and that furthermore, that representation... + Actually, let's do it. + + For some reason, concrete methods are only ever parsed as Pexp_poly. + If there *is* no polymorphic function for the method, then the return + value of the function is wrapped in a ghost Pexp_poly with [None] for + the type vars.*) + (match e.pexp_desc with + | (Pexp_poly + ({pexp_desc=Pexp_constraint (methodFunWithNewtypes, nonVarifiedExprType)}, + Some ({ptyp_desc=Ptyp_poly (typeVars, varifiedPolyType)}) + ) + ) when ( + let (leadingAbstractVars, nonVarified) = + self#leadingCurriedAbstractTypes methodFunWithNewtypes in + self#isRenderableAsPolymorphicAbstractTypes + typeVars + (* If even artificially varified. Don't know until this returns*) + varifiedPolyType + leadingAbstractVars + nonVarifiedExprType + ) -> + let (leadingAbstractVars, nonVarified) = + self#leadingCurriedAbstractTypes methodFunWithNewtypes in + self#locallyAbstractPolymorphicFunctionBinding + methodText + (atom s.txt) + methodFunWithNewtypes + leadingAbstractVars + nonVarifiedExprType + | Pexp_poly (e, Some ct) -> + self#formatSimplePatternBinding methodText (atom s.txt) + (Some (source_map ~loc:ct.ptyp_loc (self#core_type ct))) + (self#unparseExprApplicationItems e) + (* This form means that there is no type constraint - it's a strange node name.*) + | Pexp_poly (e, None) -> + self#wrappedBinding methodText ~arrow:"=>" (atom s.txt) [] e + | _ -> failwith "Concrete methods should only ever have Pexp_poly." + ) + | Pcf_constraint (ct1, ct2) -> + label + ~space:true + (atom "constraint") + ( + makeList ~postSpace:true ~inline:(true, false) [ + makeList ~postSpace:true [self#core_type ct1; atom "="]; + self#core_type ct2 + ] + ) + | Pcf_initializer e -> + label + ~space:true + (atom "initializer") + (self#simplifyUnparseExpr e) + | Pcf_attribute a -> self#floating_attribute a + | Pcf_extension e -> + (* And don't forget, we still need to print post_item_attributes even for + this case *) + self#item_extension e + in + source_map ~loc:x.pcf_loc itm + + method class_self_pattern_and_structure {pcstr_self = p; pcstr_fields = l} = + let fields = List.map self#class_field l in + (* Recall that by default self is bound to "this" at parse time. You'd + have to go out of your way to bind it to "_". *) + match (p.ppat_attributes, p.ppat_desc) with + | ([], Ppat_var ({loc; txt = "this"})) -> fields + | _ -> + let field = label ~space:true (atom "as") (self#pattern p) in + source_map ~loc:p.ppat_loc field :: fields + + method simple_class_expr x = + let {stdAttrs} = partitionAttributes x.pcl_attributes in + if stdAttrs <> [] then + formatSimpleAttributed + (self#simple_class_expr {x with pcl_attributes=[]}) + (self#attributes stdAttrs) + else + let itm = + match x.pcl_desc with + | Pcl_constraint (ce, ct) -> + formatTypeConstraint (self#class_expr ce) (self#class_constructor_type ct) + (* In OCaml, + - In the most recent version of OCaml, when in the top level of a + module, let _ = ... is a PStr_eval. + - When in a function, it is a Pexp_let PPat_any + - When in class pre-member let bindings it is a Pcl_let PPat_any + + Reason normalizes all of these to be simple imperative expressions + with trailing semicolons, *except* in the case of classes because it + will likely introduce a conflict with some proposed syntaxes for + objects. + *) + | Pcl_let _ + | Pcl_structure _ -> + let rows = (self#classExprLetsAndRest x) in + makeList ~wrap:("{", "}") ~inline:(true, false) ~postSpace:true ~break:Always_rec (List.map semiTerminated rows) + | Pcl_extension e -> self#extension e + | _ -> formatPrecedence (self#class_expr x) + in source_map ~loc:x.pcl_loc itm + + method classExprLetsAndRest x = + match x.pcl_desc with + | Pcl_structure cs -> self#class_self_pattern_and_structure cs + | Pcl_let (rf, l, ce) -> + (* For "letList" bindings, the start/end isn't as simple as with + * module value bindings. For "let lists", the sequences were formed + * within braces {}. The parser relocates the first let binding to the + * first brace. *) + let binding = + source_map ~loc:(self#bindingsLocationRange l) + (self#bindings (rf, l)) + in + (binding :: self#classExprLetsAndRest ce) + | _ -> [self#class_expr x] + + method class_expr x = + let {stdAttrs} = partitionAttributes x.pcl_attributes in + (* We cannot handle the attributes here. Must handle them in each item *) + if stdAttrs <> [] then + (* Do not need a "simple" attributes precedence wrapper. *) + formatAttributed + (self#simple_class_expr {x with pcl_attributes=[]}) + (self#attributes stdAttrs) + else + match x.pcl_desc with + | Pcl_fun _ -> + (match self#curriedConstructorPatternsAndReturnVal x with + | None, _ -> + (* x just matched Pcl_fun, there is at least one parameter *) + assert false + | Some args, e -> + label ~space:true + (makeList ~postSpace:true + [label ~space:true (atom "fun") args; atom "=>"]) + (self#class_expr e)) + | Pcl_apply (ce, l) -> + formatAttachmentApplication applicationFinalWrapping None + (self#classExpressionToFormattedApplicationItems x, None) + | Pcl_constr (li, []) -> + label ~space:true (atom "class") (self#longident_loc li) + | Pcl_constr (li, l) -> + label + (makeList ~postSpace:true [atom "class"; self#longident_loc li]) + (makeTup (List.map self#non_arrowed_non_simple_core_type l)) + | Pcl_constraint _ + | Pcl_extension _ + | Pcl_let _ + | Pcl_structure _ -> self#simple_class_expr x; + + method classStructure ?(forceBreak=false) ?(wrap=("", "")) cs = + let (left, right) = wrap in + makeList + ~sep:(Layout.Sep ";") + ~wrap:(left ^ "{", "}" ^ right) + ~break:(if forceBreak then Layout.Always else Layout.IfNeed) + ~postSpace:true + ~inline:(true, false) + (self#class_self_pattern_and_structure cs) + + method signature signatureItems = + let signatureItems = List.filter self#shouldDisplaySigItem signatureItems in + if List.length signatureItems == 0 then + atom "" + else + let signatureItems = List.filter self#shouldDisplaySigItem signatureItems in + let first = List.nth signatureItems 0 in + let last = List.nth signatureItems (List.length signatureItems - 1) in + let loc_start = first.psig_loc.loc_start in + let loc_end = last.psig_loc.loc_end in + source_map ~loc:{loc_start; loc_end; loc_ghost=false} + (makeList + ~newlinesAboveComments:1 + ~newlinesAboveItems:1 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~break:Layout.Always_rec + ~indent:0 + ~inline:(true, false) + ~sep:(SepFinal (";", ";")) + (List.map self#signature_item signatureItems)) + + method signature_item x: Layout.t = + let item: Layout.t = + match x.psig_desc with + | Psig_type (rf, l) -> + self#type_def_list (rf, l) + | Psig_value vd -> + if vd.pval_prim <> [] then + self#primitive_declaration vd + else + let intro = atom "let" in + self#attach_std_item_attrs vd.pval_attributes + (formatTypeConstraint + (label ~space:true intro + (source_map ~loc:vd.pval_name.loc + (protectIdentifier vd.pval_name.txt))) + (self#core_type vd.pval_type)) + + | Psig_typext te -> + self#type_extension te + | Psig_exception ed -> + self#exception_declaration ed + | Psig_class l -> + let class_description + ?(class_keyword=false) + ({pci_params=ls; pci_name={txt}; pci_loc} as x) = + let (firstToken, pattern, patternAux) = self#class_opening class_keyword txt x.pci_virt ls in + let withColon = self#wrapCurriedFunctionBinding + ~arrow:":" + firstToken + pattern + patternAux + ([(self#class_constructor_type x.pci_expr)], None) + in + source_map ~loc:pci_loc + (self#attach_std_item_attrs x.pci_attributes withColon) + in + makeNonIndentedBreakingList ( + match l with + | [] -> raise (NotPossible "No recursive class bindings") + | [x] -> [class_description ~class_keyword:true x] + | x :: xs -> + (class_description ~class_keyword:true x):: + (List.map class_description xs) + ) + | Psig_module {pmd_name; pmd_type={pmty_desc=Pmty_alias alias}; pmd_attributes} -> + self#attach_std_item_attrs pmd_attributes @@ + label ~space:true + (makeList ~postSpace:true [ + atom "module"; + atom pmd_name.txt; + atom "=" + ]) + (self#longident_loc alias) + | Psig_module pmd -> + self#attach_std_item_attrs pmd.pmd_attributes @@ + self#formatSimpleSignatureBinding + "module" + (atom pmd.pmd_name.txt) + (self#module_type pmd.pmd_type); + | Psig_open od -> + self#attach_std_item_attrs od.popen_attributes @@ + label ~space:true + (atom ("open" ^ (override od.popen_override))) + (self#longident_loc od.popen_lid) + | Psig_include incl -> + self#attach_std_item_attrs incl.pincl_attributes @@ + label ~space:true + (atom "include") + (self#module_type incl.pincl_mod) + | Psig_modtype x -> + let name = atom x.pmtd_name.txt in + let main = match x.pmtd_type with + | None -> makeList ~postSpace:true [atom "module type"; name] + | Some mt -> + label ~space:true + (makeList ~postSpace:true [atom "module type"; name; atom "="]) + (self#module_type mt) + in + self#attach_std_item_attrs x.pmtd_attributes main + | Psig_class_type l -> self#class_type_declaration_list l + | Psig_recmodule decls -> + let first xx = + self#attach_std_item_attrs xx.pmd_attributes @@ + self#formatSimpleSignatureBinding + "module rec" + (atom xx.pmd_name.txt) + (self#module_type xx.pmd_type) + in + let notFirst xx = + self#attach_std_item_attrs xx.pmd_attributes @@ + self#formatSimpleSignatureBinding + "and" + (atom xx.pmd_name.txt) + (self#module_type xx.pmd_type) + in + let moduleBindings = match decls with + | [] -> raise (NotPossible "No recursive module bindings") + | hd::tl -> (first hd)::(List.map notFirst tl) + in + makeNonIndentedBreakingList moduleBindings + | Psig_attribute a -> self#floating_attribute a + | Psig_extension (e, a) -> + self#attach_std_item_attrs a (self#item_extension e) + in + source_map ~loc:x.psig_loc item + + method non_arrowed_module_type x = + match x.pmty_desc with + | Pmty_alias li -> + formatPrecedence (label ~space:true (atom "module") (self#longident_loc li)) + | Pmty_typeof me -> + makeList ~wrap:("(", ")") [ + label ~space:true + (atom "module type of") + (self#module_expr me) + ] + | _ -> self#simple_module_type x + + method simple_module_type x = + match x.pmty_desc with + | Pmty_ident li -> + self#longident_loc li; + | Pmty_signature s -> + makeList + ~break:IfNeed + ~inline:(true, false) + ~wrap:("{", "}") + ~newlinesAboveComments:0 + ~newlinesAboveItems:0 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~sep:(SepFinal (";", ";")) + (List.map self#signature_item (List.filter self#shouldDisplaySigItem s)) + | Pmty_extension (s, e) -> self#payload "%" s e + | _ -> makeList ~break:IfNeed ~wrap:("(", ")") [self#module_type x] + + method module_type x = + let pmty = match x.pmty_desc with + | Pmty_functor _ -> + (* The segments that should be separated by arrows. *) + let rec extract_args args xx = match xx.pmty_desc with + | Pmty_functor (_, None, mt2) -> extract_args (`Unit :: args) mt2 + | Pmty_functor (s, Some mt1, mt2) -> + let arg = + if s.txt = "_" + then self#module_type mt1 + else formatTypeConstraint (atom s.txt) (self#module_type mt1) + in + extract_args (`Arg arg :: args) mt2 + | _ -> + let prepare_arg = function + | `Unit -> atom "()" + | `Arg x -> x + in + let args = match args with + | [`Unit] -> [] + | xs -> List.rev_map prepare_arg args + in + (args, self#module_type xx) + in + let args, ret = extract_args [] x in + makeList ~break:IfNeed ~sep:(Sep "=>") ~preSpace:true ~postSpace:true ~inline:(true, true) + [makeTup args; ret] + + (* See comments in sugar_parser.mly about why WITH constraints aren't "non + * arrowed" *) + | Pmty_with (mt, l) -> + let modSub atm li2 token = makeList ~postSpace:true [ + atom "module"; + atm; + atom token; + self#longident_loc li2 + ] in + let typeAtom = atom "type" in + let eqAtom = atom "=" in + let destrAtom = atom ":=" in + let with_constraint = function + | Pwith_type (li, td) -> + self#formatOneTypeDef + typeAtom + (self#longident_loc li) + eqAtom + td + | Pwith_module (li, li2) -> + modSub (self#longident_loc li) li2 "=" + | Pwith_typesubst td -> + self#formatOneTypeDef + typeAtom + (atom ~loc:td.ptype_name.loc td.ptype_name.txt) + destrAtom + td + | Pwith_modsubst (s, li2) -> modSub (atom s.txt) li2 ":=" + in + (match l with + | [] -> self#module_type mt + | _ -> + label ~space:true + (makeList ~postSpace:true [self#module_type mt; atom "with"]) + (makeList + ~break:IfNeed + ~inline:(true, true) + ~sep:(Sep "and") + ~postSpace:true + ~preSpace:true + (List.map with_constraint l)); + ) + (* Seems like an infinite loop just waiting to happen. *) + | _ -> self#non_arrowed_module_type x + in + source_map ~loc:x.pmty_loc pmty + + method simple_module_expr x = match x.pmod_desc with + | Pmod_unpack e -> + formatPrecedence (makeList ~postSpace:true [atom "val"; self#unparseExpr e]) + | Pmod_ident li -> + ensureSingleTokenSticksToLabel (self#longident_loc li) + | Pmod_constraint (unconstrainedRet, mt) -> + formatPrecedence ( + formatTypeConstraint + (self#module_expr unconstrainedRet) + (self#module_type mt) + ) + | Pmod_structure s -> + makeList + ~break:Always_rec + ~inline:(true, false) + ~wrap:("{", "}") + ~newlinesAboveComments:0 + ~newlinesAboveItems:0 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~sep:(SepFinal (";", ";")) + (List.map self#structure_item (List.filter self#shouldDisplayStructureItem s)) + | _ -> + (* For example, functor application will be wrapped. *) + formatPrecedence (self#module_expr x) + + method module_expr x = + match x.pmod_desc with + | Pmod_functor _ -> + let (argsList, return) = self#curriedFunctorPatternsAndReturnStruct x in + (* See #19/20 in syntax.mls - cannot annotate return type at + the moment. *) + self#wrapCurriedFunctionBinding "fun" ~sweet:true ~arrow:"=>" (makeTup argsList) [] + ([self#moduleExpressionToFormattedApplicationItems return], None) + | Pmod_apply _ -> + self#moduleExpressionToFormattedApplicationItems x + | Pmod_extension (s, e) -> self#payload "%" s e + | Pmod_unpack _ + | Pmod_ident _ + | Pmod_constraint _ + | Pmod_structure _ -> self#simple_module_expr x -(* This file was auto-generated based on "reason_parser.messages". *) -(* Please note that the function [message] can raise [Not_found]. *) + method structure structureItems = + if List.length structureItems == 0 then + atom "" + else + let structureItems = List.filter self#shouldDisplayStructureItem structureItems in + let first = List.nth structureItems 0 in + let last = List.nth structureItems (List.length structureItems - 1) in + let loc_start = first.pstr_loc.loc_start in + let loc_end = last.pstr_loc.loc_end in + source_map ~loc:{loc_start; loc_end; loc_ghost = false} + (makeList + ~newlinesAboveComments:1 + ~newlinesAboveItems:1 + ~newlinesAboveDocComments:1 + ~postSpace:true + ~break:Always_rec + ~indent:0 + ~inline:(true, false) + ~sep:(SepFinal (";", ";")) + (List.map self#structure_item structureItems)) -let message = - fun s -> - match s with + (* + How do modules become parsed? + let module (X: sig) = blah; + Will not parse! (Should just make it parse to let [X:sig =]). + let module X: sig = blah; + Becomes Pmod_constraint + let module X: sig = (blah:sig); + Becomes Pmod_constraint .. Pmod_constraint + let module X = blah:typ; + Becomes Pmod_constraint + let module X (Y:y) (Z:z):r => Q + Becomes Pmod_functor...=> Pmod_constraint + + let module X (Y:y) (Z:z):r => (Q:r2) + Probably becomes Pmod_functor...=> (Pmod_constraint.. + Pmod_constraint) + + let (module X) = + Is a *completely* different thing (unpacking/packing first class modules). + We should make sure this is very well distinguished. + - Just replace all "let module" with a new three letter keyword (mod)? + - Reserve let (module X) for unpacking first class modules. + + See the notes about how Ppat_constraint become parsed and attempt to unify + those as well. + *) + + method let_module_binding prefixText bindingName moduleExpr = + let (argsList, return) = self#curriedFunctorPatternsAndReturnStruct moduleExpr in ( + match (argsList, return.pmod_desc) with + (* Simple module with type constraint, no functor args. *) + | ([], Pmod_constraint (unconstrainedRetTerm, ct)) -> + self#formatSimplePatternBinding prefixText bindingName (Some (self#module_type ct)) + ([self#moduleExpressionToFormattedApplicationItems unconstrainedRetTerm], None) + (* Simple module with type no constraint, no functor args. *) + | ([], _) -> + self#formatSimplePatternBinding prefixText bindingName None + ([self#moduleExpressionToFormattedApplicationItems return], None) + | (_, _) -> + (* A functor *) + let (argsWithConstraint, actualReturn) = ( + match return.pmod_desc with + (* A functor with constrained return type: + * + * let module X = (A) (B) : Ret => ... + * *) + | Pmod_constraint (me, ct) -> ([makeTup argsList; formatJustTheTypeConstraint (self#non_arrowed_module_type ct)], me) + | _ -> ([makeTup argsList], return) + ) in + self#wrapCurriedFunctionBinding prefixText ~arrow:"=>" + (makeList [bindingName; atom " ="]) argsWithConstraint + ([self#moduleExpressionToFormattedApplicationItems actualReturn], None) + ) + + method class_opening class_keyword name pci_virt ls = + let firstToken = if class_keyword then "class" else "and" in + match (pci_virt, ls) with + (* When no class params, it's a very simple formatting for the + opener - no breaking. *) + | (Virtual, []) -> + (firstToken, atom "virtual", [atom name]) + | (Concrete, []) -> + (firstToken, atom name, []) + | (Virtual, _::_) -> + (firstToken, atom "virtual", [atom name; self#class_params_def ls]) + | (Concrete, _::_) -> + (firstToken, atom name, [self#class_params_def ls]) + + + (* TODO: TODOATTRIBUTES: Structure items don't have attributes, but each + pstr_desc *) + method structure_item term = + let item = ( + match term.pstr_desc with + | Pstr_eval (e, attrs) -> + let {stdAttrs; jsxAttrs; uncurried} = partitionAttributes attrs in + if uncurried then Hashtbl.add uncurriedTable e.pexp_loc true; + let layout = self#attach_std_item_attrs stdAttrs (self#unparseUnattributedExpr e) in + (* If there was a JSX attribute BUT JSX component wasn't detected, + that JSX attribute needs to be pretty printed so it doesn't get + lost *) + (match jsxAttrs with + | [] -> layout + | _::_ -> + let jsxAttrNodes = List.map self#attribute jsxAttrs in + makeList ~sep:(Sep " ") (jsxAttrNodes @ [layout])) + | Pstr_type (_, []) -> assert false + | Pstr_type (rf, l) -> (self#type_def_list (rf, l)) + | Pstr_value (rf, l) -> (self#bindings (rf, l)) + | Pstr_typext te -> (self#type_extension te) + | Pstr_exception ed -> (self#exception_declaration ed) + | Pstr_module x -> + let bindingName = atom ~loc:x.pmb_name.loc x.pmb_name.txt in + self#attach_std_item_attrs x.pmb_attributes @@ + self#let_module_binding "module" bindingName x.pmb_expr + | Pstr_open od -> + self#attach_std_item_attrs od.popen_attributes @@ + makeList ~postSpace:true [ + atom ("open" ^ (override od.popen_override)); + self#longident_loc od.popen_lid; + ] + | Pstr_modtype x -> + let name = atom x.pmtd_name.txt in + let main = match x.pmtd_type with + | None -> + makeList ~postSpace:true [atom "module type"; name] + | Some mt -> + label ~space:true + (makeList ~postSpace:true [atom "module type"; name; atom "="]) + (self#module_type mt) + in + self#attach_std_item_attrs x.pmtd_attributes main + | Pstr_class l -> self#class_declaration_list l + | Pstr_class_type l -> self#class_type_declaration_list l + | Pstr_primitive vd -> self#primitive_declaration vd + | Pstr_include incl -> + self#attach_std_item_attrs incl.pincl_attributes @@ + (* Kind of a hack *) + let moduleExpr = incl.pincl_mod in + formatAttachmentApplication + applicationFinalWrapping + (Some (true, atom "include")) + ([self#moduleExpressionToFormattedApplicationItems moduleExpr], None) + + | Pstr_recmodule decls -> (* 3.07 *) + let first xx = + self#attach_std_item_attrs xx.pmb_attributes @@ + self#let_module_binding "module rec" (atom xx.pmb_name.txt) xx.pmb_expr + in + let notFirst xx = + self#attach_std_item_attrs xx.pmb_attributes @@ + self#let_module_binding "and" (atom xx.pmb_name.txt) xx.pmb_expr + in + let moduleBindings = match decls with + | [] -> raise (NotPossible "No recursive module bindings") + | hd::tl -> (first hd)::(List.map notFirst tl) + in + makeNonIndentedBreakingList moduleBindings + | Pstr_attribute a -> self#floating_attribute a + | Pstr_extension ((extension, PStr [item]), a) -> + begin match item.pstr_desc with + | Pstr_value (rf, l) -> self#bindings ~extension (rf, l) + | _ -> self#attach_std_item_attrs ~extension a + (self#structure_item item) + end + | Pstr_extension (e, a) -> + (* Notice how extensions have attributes - but not every structure + item does. *) + self#attach_std_item_attrs a (self#item_extension e) + ) in + source_map ~loc:term.pstr_loc item + + method type_extension te = + let formatOneTypeExtStandard prepend ({ptyext_path} as te) = + let name = self#longident_loc ptyext_path in + let item = self#formatOneTypeExt prepend name (atom "+=") te in + self#attach_std_item_attrs te.ptyext_attributes item + in + formatOneTypeExtStandard (atom "type") te + + (* [allowUnguardedSequenceBodies] allows sequence expressions {} to the right of `=>` to not + be guarded in `{}` braces. *) + method case_list ?(allowUnguardedSequenceBodies=false) l = + let rec appendLabelToLast items rhs = + match items with + | hd::[] -> (label ~indent:0 ~space:true hd rhs)::[] + | hd::tl -> hd::(appendLabelToLast tl rhs) + | [] -> raise (NotPossible "Cannot append to last of nothing") + in + + let case_row {pc_lhs; pc_guard; pc_rhs} = + let theOrs = orList pc_lhs in + + (* match x with *) + (* | AnotherReallyLongVariantName (_, _, _) *) + (* | AnotherReallyLongVariantName2 (_, _, _) + when true => { *) + + (* } *) + + (*match x with *) + (* everythingElse *) + (* *) + + + + (* ............................................................ + : each or segment has a spaced list <> that ties its : + : bar "|" to its pattern : + ...:..........................................................:..... + : : each or-patterned match is grouped in SpacedBreakableInline : + : : : : + v v v v + <>|<> FirstThingStandalone t =>t + <>| AnotherReallyLongVariantName (_, _, _) + ^ <>|<>AnotherReallyLongVariantNam2 (_, _, _) (label the last in or ptn for or and label it again for arrow) + : ^ ^ ^ when true =>{ + : : : : } ^ ^ + : : : : ^ ^ : : + : : : : : : : : + : : : :If there is :a WHERE : : + : : : :an extra :label is : : + : : : :inserted bef:ore the : : + : : : :arrow. : : : : + : : : :............:.....:...: : + : : : : : : + : : : : : : + : : : : : : + : : :The left side of:this final label: + : : :uses a list to :append the arrow: + : : :................:.....:..........: + : : : : + : : : : + : : : : + : :Final or segment is: : + : :wrapped in lbl that: : + : :partitions pattern : : + : :and arrow from : : + : :expression. : : + : : : : + : :...................: : + : [orsWithWhereAndArrowOnLast] : + : : + :..................................: + [row] + + *) + let bar xx = makeList ~postSpace:true [atom "|"; xx] in + let appendWhereAndArrow p = match pc_guard with + | None -> makeList ~postSpace:true [p; atom "=>"] + | Some g -> + (* when x should break as a whole - extra list added around it to make it break as one *) + let withWhen = label ~space:true p + (makeList ~break:Layout.Never ~inline:(true, true) ~postSpace:true + [label ~space:true (atom "when") (self#unparseExpr g)]) + in + makeList ~inline:(true, true) ~postSpace:true [withWhen; atom "=>"] + in + let rec appendWhereAndArrowToLastOr = function + | [] -> [] + | hd::tl -> + let formattedHd = self#pattern hd in + let formattedHd = + if tl = [] then appendWhereAndArrow formattedHd else formattedHd + in + (formattedHd :: appendWhereAndArrowToLastOr tl) + in + let orsWithWhereAndArrowOnLast = appendWhereAndArrowToLastOr theOrs in + let rhs = + if allowUnguardedSequenceBodies then + match (self#under_pipe#letList pc_rhs) with + (* TODO: Still render a list with located information here so that + comments (eol) are interleaved *) + | [hd] -> hd + (* In this case, we don't need any additional indentation, because there aren't + wrapping {} which would cause zero indentation to look strange. *) + | lst -> makeUnguardedLetSequence lst + else self#under_pipe#unparseExpr pc_rhs + in + source_map + (* Fake shift the location to accomodate for the bar, to make sure + * the wrong comments don't make their way past the next bar. *) + ~loc:(expandLocation ~expand:(0, 0) { + loc_start = pc_lhs.ppat_loc.loc_start; + loc_end = pc_rhs.pexp_loc.loc_end; + loc_ghost = false; + }) + (makeList ~break:Always_rec ~inline:(true, true) + (List.map bar (appendLabelToLast orsWithWhereAndArrowOnLast rhs))) + in + List.map case_row l + + (* Formats a list of a single expr param in such a way that the parens of the function or + * (poly)-variant application and the wrapping of the param stick together when the layout breaks. + * Example: `foo({a: 1, b: 2})` needs to be formatted as + * foo({ + * a: 1, + * b: 2 + * }) + * when the line length dictates breaking. Notice how `({` and `})` 'hug'. + * Also see "isSingleArgParenApplication" which determines if + * this kind of formatting should happen. *) + method singleArgParenApplication ?(uncurried=false) es = + let lparen = if uncurried then "(. " else "(" in + match es with + | [{pexp_attributes = []; pexp_desc = Pexp_record (l, eo)}] -> + self#unparseRecord ~wrap:(lparen, ")") l eo + | [{pexp_attributes = []; pexp_desc = Pexp_tuple l}] -> + self#unparseSequence ~wrap:(lparen, ")") ~construct:`Tuple l + | [{pexp_attributes = []; pexp_desc = Pexp_array l}] -> + self#unparseSequence ~wrap:(lparen, ")") ~construct:`Array l + | [{pexp_attributes = []; pexp_desc = Pexp_object cs}] -> + self#classStructure ~wrap:(lparen, ")") cs + | [{pexp_attributes = []; pexp_desc = Pexp_extension (s, p)}] when s.txt = "bs.obj" -> + self#formatBsObjExtensionSugar ~wrap:(lparen, ")") p + | [({pexp_attributes = []; pexp_desc} as exp)] when (is_simple_list_expr exp) -> + (match view_expr exp with + | `list xs -> + self#unparseSequence ~construct:`List ~wrap:(lparen, ")") xs + | `cons xs -> + self#unparseSequence ~construct:`ES6List ~wrap:(lparen, ")") xs + | _ -> assert false) + | _ -> assert false + + + method label_x_expression_param (l, e) = + let term = self#unparseConstraintExpr e in + let param = match (l, e) with + | (Nolabel, _) -> term + | (Labelled lbl, _) when is_punned_labelled_expression e lbl -> + makeList [atom namedArgSym; term] + | (Optional lbl, _) when is_punned_labelled_expression e lbl -> + makeList [atom namedArgSym; label term (atom "?")] + | (Labelled lbl, _) -> + label (atom (namedArgSym ^ lbl ^ "=")) term + | (Optional lbl, _) -> + label (atom (namedArgSym ^ lbl ^ "=?")) term + in + source_map ~loc:e.pexp_loc param + + method label_x_expression_params ?(uncurried=false) xs = + match xs with + (* function applications with unit as only argument should be printed differently + * e.g. print_newline(()) should be printed as print_newline() *) + | [(Nolabel, {pexp_attributes = []; pexp_desc = Pexp_construct ( {txt= Lident "()"}, None)})] + -> makeList ~break:Never [if uncurried then atom "(.)" else atom "()"] + + (* The following cases provide special formatting when there's only one expr_param that is a tuple/array/list/record etc. + * e.g. foo({a: 1, b: 2}) + * becomes -> + * foo({ + * a: 1, + * b: 2, + * }) + * when the line-length indicates breaking. + *) + | [(Nolabel, exp)] when isSingleArgParenApplication [exp] -> + self#singleArgParenApplication ~uncurried [exp] + | params -> + makeTup ~uncurried (List.map self#label_x_expression_param params) + + method formatFunAppl ~jsxAttrs ~args ~funExpr ~applicationExpr ?(uncurried=false) () = + (* If there was a JSX attribute BUT JSX component wasn't detected, + that JSX attribute needs to be pretty printed so it doesn't get + lost *) + let maybeJSXAttr = List.map self#attribute jsxAttrs in + let categorizeFunApplArgs args = + let reverseArgs = List.rev args in + match reverseArgs with + | ((_, {pexp_desc = Pexp_fun _}) as callback)::args + when let otherCallbacks = + List.filter (fun (_, e) -> match e.pexp_desc with Pexp_fun _ -> true | _ -> false) args + in List.length otherCallbacks == 0 + (* default to normal formatting if there's more than one callback *) + -> `LastArgIsCallback(callback, List.rev args) + | _ -> `NormalFunAppl args + in + begin match categorizeFunApplArgs args with + | `LastArgIsCallback(callbackArg, args) -> + (* This is the following case: + * Thing.map(foo, bar, baz, (abc, z) => + * MyModuleBlah.toList(argument) + *) + let (argLbl, cb) = callbackArg in + let {stdAttrs; uncurried} = partitionAttributes cb.pexp_attributes in + let cbAttrs = stdAttrs in + if uncurried then Hashtbl.add uncurriedTable cb.pexp_loc true; + let (cbArgs, retCb) = self#curriedPatternsAndReturnVal {cb with pexp_attributes = []} in + let cbArgs = if List.length cbAttrs > 0 then + makeList ~break:IfNeed ~inline:(true, true) ~postSpace:true + (List.map self#attribute cbAttrs @ cbArgs) + else makeList cbArgs in + let theCallbackArg = match argLbl with + | Optional s -> makeList ([atom namedArgSym; atom s; atom "=?"]@[cbArgs]) + | Labelled s -> makeList ([atom namedArgSym; atom s; atom "="]@[cbArgs]) + | Nolabel -> cbArgs + in + let theFunc = + source_map ~loc:funExpr.pexp_loc + (makeList ~wrap:("", "(") [self#simplifyUnparseExpr funExpr]) + in + let formattedFunAppl = begin match self#letList retCb with + | [x] -> + (* force breaks for test assertion style callbacks, e.g. + * describe("App", () => test("math", () => Expect.expect(1 + 2) |> toBe(3))); + * should always break for readability of the tests: + * describe("App", () => + * test("math", () => + * Expect.expect(1 + 2) |> toBe(3) + * ) + * ); + *) + let forceBreak = match funExpr.pexp_desc with + | Pexp_ident ident when + let lastIdent = Longident.last ident.txt in + List.mem lastIdent ["test"; "describe"; "it"; "expect"] -> true + | _ -> false + in + let returnValueCallback = makeList ~break:(if forceBreak then Always else IfNeed) ~wrap:("=> ", ")") [x] in + + let argsWithCallbackArgs = List.concat [(List.map self#label_x_expression_param args); [theCallbackArg]] in + let left = label + theFunc + (makeList ~wrap:("", " ") ~break:IfNeed ~inline:(true, true) ~sep:(Sep ",") ~postSpace:true + argsWithCallbackArgs) + in + label left returnValueCallback + | xs -> + let printWidthExceeded = Reason_heuristics.funAppCallbackExceedsWidth ~printWidth:settings.width ~args ~funExpr () in + if printWidthExceeded = false then + (* + * Thing.map(foo, bar, baz, (abc, z) => + * MyModuleBlah.toList(argument) + * ) + * + * To get this kind of formatting we need to construct the following tree: + * + * + * where left is + * + * + * The part of that label could be a with wrap:("", " ") break:IfNeed inline:(true, true) + * with items: "foo", "bar", "baz", "(abc, z)", separated by commas. + * + * this is also necessary to achieve the following formatting where }) hugs : + * test("my test", () => { + * let x = a + b; + * let y = z + c; + * x + y + * }); + *) + let right = + source_map ~loc:retCb.pexp_loc + (makeList ~break:Always_rec ~wrap:("=> {", "})") ~sep:(SepFinal (";", ";")) xs) + in + let argsWithCallbackArgs = + List.map self#label_x_expression_param args @ [theCallbackArg] + in + let left = label + theFunc + (makeList ~wrap:("", " ") ~break:IfNeed ~inline:(true, true) ~sep:(Sep ",") ~postSpace:true + argsWithCallbackArgs) + in + label left right + else + (* Since the heuristic says the line lenght is exceeded in this case, + * we conveniently format everything as + * + *) + let args = + makeList ~break:Always ~wrap:("", ")") ~sep:commaTrail ( + (List.map self#label_x_expression_param args) @ + [label ~space:true (makeList ~wrap:("", " =>") [theCallbackArg]) + (source_map ~loc:retCb.pexp_loc (makeLetSequence xs))] + ) + in + label theFunc args + end in + maybeJSXAttr @ [formattedFunAppl] + | `NormalFunAppl args -> + let theFunc = + source_map ~loc:funExpr.pexp_loc (self#simplifyUnparseExpr funExpr) + in + (*reset here only because [function,match,try,sequence] are lower priority*) + (* The "expression location" might be different than the location of the actual + * function application because things like surrounding { } expand the + * parsed location (in body of while loop for example). + * We recover the most meaningful function application location we can.*) + let (syntheticApplicationLocation, syntheticArgLoc) = match args with + | [] -> (funExpr.pexp_loc, funExpr.pexp_loc) + | hd::_ -> + {funExpr.pexp_loc with loc_end = applicationExpr.pexp_loc.loc_end}, + {funExpr.pexp_loc with loc_start = funExpr.pexp_loc.loc_end; loc_end = applicationExpr.pexp_loc.loc_end} + in + let theArgs = self#reset#label_x_expression_params ~uncurried args in + maybeJSXAttr @ [source_map ~loc:syntheticApplicationLocation + (label theFunc (source_map ~loc:syntheticArgLoc theArgs))] + end +end;; + +let toplevel_phrase ppf x = + match x with + | Ptop_def s -> format_layout ppf (printer#structure s) + | Ptop_dir (s, da) -> print_string "(* top directives not supported *)" + +let case_list ppf x = + List.iter (format_layout ppf) (printer#case_list x) + +(* Convert a Longident to a list of strings. + E.g. M.Constructor will be ["Constructor"; "M.Constructor"] + Also support ".Constructor" to specify access without a path. + *) +let longident_for_arity lid = + let rec toplevel = function + | Lident s -> + [s] + | Ldot (lid, s) -> + let append_s x = x ^ "." ^ s in + s :: (List.map append_s (toplevel lid)) + | Lapply (y,s) -> + toplevel s in + match lid with + | Lident s -> + ("." ^ s) :: toplevel lid | _ -> - raise Not_found + toplevel lid -end -module Reason_parser_explain -= struct -#1 "reason_parser_explain.ml" -module Parser = Reason_parser -module Interp = Parser.MenhirInterpreter -module Raw = Reason_parser_explain_raw +(* add expilcit_arity to a list of attributes + *) +let add_explicit_arity loc attributes = + ({txt="explicit_arity"; loc}, PStr []) :: + normalized_attributes "explicit_arity" attributes -let identlike_keywords = - let reverse_table = lazy ( - let table = Hashtbl.create 7 in - Hashtbl.iter (fun k v -> Hashtbl.add table v k) Reason_lexer.keyword_table; - table - ) in - function - | Parser.SIG -> Some "sig" - | Parser.MODULE -> Some "module" - | Parser.BEGIN -> Some "begin" - | Parser.END -> Some "end" - | Parser.OBJECT -> Some "object" - | Parser.SWITCH -> Some "switch" - | Parser.TO -> Some "to" - | Parser.THEN -> Some "then" - | Parser.TYPE -> Some "type" - | token -> - match Hashtbl.find (Lazy.force reverse_table) token with - | name -> Some name - | exception Not_found -> None +(* explicit_arity_exists check if expilcit_arity exists + *) +let explicit_arity_not_exists attributes = + not (attribute_exists "explicit_arity" attributes) -let keyword_confused_with_ident state token = - match identlike_keywords token with - | Some name when Raw.transitions_on_lident state - || Raw.transitions_on_uident state -> - (name ^ " is a reserved keyword, it cannot be used as an identifier. Try `" ^ name ^ "_' instead") - | _ -> raise Not_found +(* wrap_expr_with_tuple wraps an expression + * with tuple as a sole argument. + *) +let wrap_expr_with_tuple exp = + {exp with pexp_desc = Pexp_tuple [exp]} -let uppercased_instead_of_lowercased state token = - match token with - | Parser.UIDENT name when Raw.transitions_on_lident state -> - let name = String.uncapitalize name in - if Hashtbl.mem Reason_lexer.keyword_table name then - "variables and labels should be lowercased" - else - Printf.sprintf "variables and labels should be lowercased. Try `%s'" name - | _ -> raise Not_found +(* wrap_pat_with_tuple wraps an pattern + * with tuple as a sole argument. + *) +let wrap_pat_with_tuple pat = + {pat with ppat_desc = Ppat_tuple [pat]} -let semicolon_might_be_missing state _token = - (*let state = Interp.current_state_number env in*) - if Raw.transitions_on_semi state then - "syntax error, consider adding a `;' before" - else - raise Not_found -let message env (token, startp, endp) = - let state = Interp.current_state_number env in - (* Is there a message for this specific state ? *) - try Reason_parser_message.message state - with Not_found -> - (* Identify a keyword used as an identifier *) - try keyword_confused_with_ident state token - with Not_found -> - (* Identify an uppercased identifier in a lowercase place *) - try uppercased_instead_of_lowercased state token - with Not_found -> - try semicolon_might_be_missing state token - with Not_found -> - (* TODO: we don't know what to say *) - "" + +(* explicit_arity_constructors is a set of constructors that are known to have + * multiple arguments + * + *) + +module StringSet = Set.Make(String);; + +let built_in_explicit_arity_constructors = ["Some"; "Assert_failure"; "Match_failure"] + +let explicit_arity_constructors = StringSet.of_list(built_in_explicit_arity_constructors @ (!configuredSettings).constructorLists) + +let add_explicit_arity_mapper super = + let super_expr = super.Ast_mapper.expr in + let super_pat = super.Ast_mapper.pat in + let expr mapper expr = + let expr = + match expr with + | {pexp_desc=Pexp_construct(lid, Some sp); + pexp_loc; + pexp_attributes} when + List.exists + (fun c -> StringSet.mem c explicit_arity_constructors) + (longident_for_arity lid.txt) && + explicit_arity_not_exists pexp_attributes -> + {pexp_desc=Pexp_construct(lid, Some (wrap_expr_with_tuple sp)); + pexp_loc; + pexp_attributes=add_explicit_arity pexp_loc pexp_attributes} + | x -> x + in + super_expr mapper expr + and pat mapper pat = + let pat = + match pat with + | {ppat_desc=Ppat_construct(lid, Some sp); + ppat_loc; + ppat_attributes} when + List.exists + (fun c -> StringSet.mem c explicit_arity_constructors) + (longident_for_arity lid.txt) && + explicit_arity_not_exists ppat_attributes -> + {ppat_desc=Ppat_construct(lid, Some (wrap_pat_with_tuple sp)); + ppat_loc; + ppat_attributes=add_explicit_arity ppat_loc ppat_attributes} + | x -> x + in + super_pat mapper pat + in + { super with Ast_mapper. expr; pat } + +let preprocessing_mapper = + ml_to_reason_swap_operator_mapper + (escape_stars_slashes_mapper + (add_explicit_arity_mapper Ast_mapper.default_mapper)) + +let core_type ppf x = + format_layout ppf + (printer#core_type (apply_mapper_to_type x preprocessing_mapper)) + +let pattern ppf x = + format_layout ppf + (printer#pattern (apply_mapper_to_pattern x preprocessing_mapper)) + +let signature (comments : Comment.t list) ppf x = + format_layout ppf ~comments + (printer#signature (apply_mapper_to_signature x preprocessing_mapper)) + +let structure (comments : Comment.t list) ppf x = + format_layout ppf ~comments + (printer#structure (apply_mapper_to_structure x preprocessing_mapper)) + +let expression ppf x = + format_layout ppf + (printer#unparseExpr (apply_mapper_to_expr x preprocessing_mapper)) + +let case_list = case_list + +end +in +object + method core_type = Formatter.core_type + method pattern = Formatter.pattern + method signature = Formatter.signature + method structure = Formatter.structure + (* For merlin-destruct *) + method toplevel_phrase = Formatter.toplevel_phrase + method expression = Formatter.expression + method case_list = Formatter.case_list +end end module Reason_toolchain @@ -123802,7 +129347,13 @@ module Reason_toolchain (* Reason *) (* *) (***********************************************************************) -(* Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. *) +(* + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + (* Entry points in the parser *) @@ -123882,6 +129433,8 @@ module To_current = Convert(OCaml_404)(OCaml_current) module S = MenhirLib.General (* Streams *) +module Comment = Reason_comment + let setup_lexbuf use_stdin filename = (* Use custom method of lexing from the channel to keep track of the input so that we can reformat tokens in the toolchain*) @@ -123900,9 +129453,9 @@ let setup_lexbuf use_stdin filename = module type Toolchain = sig (* Parsing *) - val core_type_with_comments: Lexing.lexbuf -> (Parsetree.core_type * Reason_pprint_ast.commentWithCategory) - val implementation_with_comments: Lexing.lexbuf -> (Parsetree.structure * Reason_pprint_ast.commentWithCategory) - val interface_with_comments: Lexing.lexbuf -> (Parsetree.signature * Reason_pprint_ast.commentWithCategory) + val core_type_with_comments: Lexing.lexbuf -> (Parsetree.core_type * Reason_comment.t list) + val implementation_with_comments: Lexing.lexbuf -> (Parsetree.structure * Reason_comment.t list) + val interface_with_comments: Lexing.lexbuf -> (Parsetree.signature * Reason_comment.t list) val core_type: Lexing.lexbuf -> Parsetree.core_type val implementation: Lexing.lexbuf -> Parsetree.structure @@ -123911,14 +129464,14 @@ module type Toolchain = sig val use_file: Lexing.lexbuf -> Parsetree.toplevel_phrase list (* Printing *) - val print_interface_with_comments: Format.formatter -> (Parsetree.signature * Reason_pprint_ast.commentWithCategory) -> unit - val print_implementation_with_comments: Format.formatter -> (Parsetree.structure * Reason_pprint_ast.commentWithCategory) -> unit + val print_interface_with_comments: Format.formatter -> (Parsetree.signature * Reason_comment.t list) -> unit + val print_implementation_with_comments: Format.formatter -> (Parsetree.structure * Reason_comment.t list) -> unit end module type Toolchain_spec = sig val safeguard_parsing: Lexing.lexbuf -> - (unit -> ('a * Reason_pprint_ast.commentWithCategory)) -> ('a * Reason_pprint_ast.commentWithCategory) + (unit -> ('a * Reason_comment.t list)) -> ('a * Reason_comment.t list) type token @@ -123934,8 +129487,8 @@ module type Toolchain_spec = sig val toplevel_phrase: Lexing.lexbuf -> Parsetree.toplevel_phrase val use_file: Lexing.lexbuf -> Parsetree.toplevel_phrase list - val format_interface_with_comments: (Parsetree.signature * Reason_pprint_ast.commentWithCategory) -> Format.formatter -> unit - val format_implementation_with_comments: (Parsetree.structure * Reason_pprint_ast.commentWithCategory) -> Format.formatter -> unit + val format_interface_with_comments: (Parsetree.signature * Reason_comment.t list) -> Format.formatter -> unit + val format_implementation_with_comments: (Parsetree.structure * Reason_comment.t list) -> Format.formatter -> unit end let rec left_expand_comment should_scan_prev_line source loc_start = @@ -123991,11 +129544,17 @@ module Create_parse_entrypoint (Toolchain_impl: Toolchain_spec) :Toolchain = str let contents = Buffer.contents input_copy in Buffer.reset input_copy; if contents = "" then - let _ = Parsing.clear_parser() in - (ast, unmodified_comments |> List.map (fun (txt, phys_loc) -> (txt, Reason_pprint_ast.Regular, phys_loc))) + let _ = Parsing.clear_parser() in + let make_regular (text, location) = + Comment.make ~location Comment.Regular text in + (ast, List.map make_regular unmodified_comments) else - let modified_and_comment_with_category = - List.map (fun (str, physical_loc) -> + let rec classifyAndNormalizeComments unmodified_comments = + match unmodified_comments with + | [] -> [] + | hd :: tl -> ( + let classifiedTail = classifyAndNormalizeComments tl in + let (str, physical_loc) = hd in (* When searching for "^" regexp, returns location of newline + 1 *) let (stop_char, eol_start, virtual_start_pos) = left_expand_comment false contents physical_loc.loc_start.pos_cnum in let one_char_before_stop_char = @@ -124015,7 +129574,7 @@ module Create_parse_entrypoint (Toolchain_impl: Toolchain_spec) :Toolchain = str * But we don't want it to extend to next line in this case: * * true || (* comment *) - * fasle + * false * *) let should_scan_next_line = stop_char = '|' && @@ -124026,18 +129585,37 @@ module Create_parse_entrypoint (Toolchain_impl: Toolchain_spec) :Toolchain = str let end_pos_plus_one = physical_loc.loc_end.pos_cnum in let comment_length = (end_pos_plus_one - physical_loc.loc_start.pos_cnum - 4) in let original_comment_contents = String.sub contents (physical_loc.loc_start.pos_cnum + 2) comment_length in - let t = match (eol_start, eol_end) with - | (true, true) -> Reason_pprint_ast.SingleLine - | (false, true) -> Reason_pprint_ast.EndOfLine - | _ -> Reason_pprint_ast.Regular + let location = { + physical_loc with + loc_start = {physical_loc.loc_start with pos_cnum = virtual_start_pos}; + loc_end = {physical_loc.loc_end with pos_cnum = virtual_end_pos} + } in + let just_after loc' = + loc'.loc_start.pos_cnum == location.loc_end.pos_cnum - 1 && + loc'.loc_start.pos_lnum == location.loc_end.pos_lnum + in + let category = match (eol_start, eol_end, classifiedTail) with + | (true, true, _) -> Comment.SingleLine + | (false, true, _) -> Comment.EndOfLine + | (false, false, comment :: _) + (* End of line comment is one that has nothing but newlines or + * other comments its right, and has some AST to the left of it. + * For example, there are two end of line comments in: + * + * | Y(int, int); /* eol1 */ /* eol2 */ + *) + when Comment.category comment = Comment.EndOfLine + && just_after (Comment.location comment) -> + Comment.EndOfLine + | _ -> Comment.Regular + in + let comment = + Comment.make ~location category original_comment_contents in - let start_pos = virtual_start_pos in - (original_comment_contents, t, - {physical_loc with loc_start = {physical_loc.loc_start with pos_cnum = start_pos}; - loc_end = {physical_loc.loc_end with pos_cnum = virtual_end_pos}}) + comment :: classifiedTail ) - unmodified_comments in + let modified_and_comment_with_category = classifyAndNormalizeComments unmodified_comments in let _ = Parsing.clear_parser() in (ast, modified_and_comment_with_category) ) @@ -124237,6 +129815,9 @@ module OCaml_syntax = struct when !Location.input_name = "//toplevel//" -> maybe_skip_phrase lexbuf; raise err + (* Escape error is raised as a general catchall when a syntax_error() is + thrown in the parser. + *) | Parsing.Parse_error | Syntaxerr.Escape_error -> let loc = Location.curr lexbuf in if !Location.input_name = "//toplevel//" @@ -124756,7 +130337,7 @@ let print = let print_width = let docv = "COLS" in let doc = "wrapping width for printing the AST" in - Arg.(value & opt (int) (100) & info ["w"; "print-width"] ~docv ~doc) + Arg.(value & opt (int) (80) & info ["w"; "print-width"] ~docv ~doc) let heuristics_file = let doc = @@ -124787,7 +130368,12 @@ let add_runtime = end #1 "refmt_impl.ml" -(* Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. *) +(* + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) open Lexing open Cmdliner