Caml1999T037HFC/Value_rec_check*ocaml.text&_none_@@A Static checking of recursive declarations, as described in A practical mode system for recursive definitions Alban Reynaud, Gabriel Scherer and Jeremy Yallop POPL 2021 Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 ]} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. 9typing/value_rec_check.mlSg@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@@Р(Asttypes(Asttypesii@@ 3@@@@@A3@@@i@@ @Р)Typedtree)Typedtreejj@@ 3@@@@@A3@@@j@@ @3@@@Р%Types%Typeskk@@ 3@@@@@A3@@@k@@ @3@@@될< {1 Static or dynamic size} mm'@@@@@@3@@@A+"sdAo).o)0@@;@@@A/Value_rec_types6recursive_binding_kind@@@@@@@o))o)Y@@A@DA@@Aг /Value_rec_typeso)3o)B@o)C@@@3@B&;@@@A.@@@@@@@@@@@@@@@@@@7@@*q[_+q[e@@@j1value_description@@@@@@@@354455555@fJD@@@&is_ref@UEA@@@@@@@@@б@г%TypesTq[hUq[m@%Xq[nYq[@@@-@@@& @@г+$booleq[fq[@@3@@@2@@@@@5@@EDA@@@C@@@@@@@@@?@@ঠ%Typesrr@(val_kindrr@@3(val_kind%Types1value_description@@@*value_kind@@@@@A3(val_type)type_expr@@@@@@@A0typing/types.mli@M@Q@M@e@@@3'val_loc(Location!t@@@@@B@A@@@@@@#@3.val_attributes*)Parsetree*attributes@@@@@C%@A@@@@@@1@3'val_uid89#Uid!t@@@@@D2@A*@@+@@@@>@@A.@@/@@@@B@Ġ%Typesss@(Val_primss@@;(Val_primQ@@@@)Primitive+description@@@@A@AD@AQAPARRAPAu@@@e@ঠ)Primitivess@)prim_name s s@@3)prim_name)Primitive+description@@@:&stringQ@@@3@@@3*prim_arity#intA@@@4@@A @@4typing/primitive.mli^^@@K@3*prim_alloc$boolE@@@5@@B@@ __@@#L@30prim_native_name*"@@@6@@C @@`?C`?\@@-M@35prim_native_repr_args4$listK:+native_repr@@@8@@@7@@D2@@)a*a@@?N@34prim_native_repr_resF @@@9@@E;@@2b3b@@HO@@@6]7]@@LJ@,%makemutableesfs@@hsis@@U@@@wE@v3lkklllll@86sq[[tv&4@@@@*prim_arity{t|t @_Att@@e@@@|E@{@@@st@@@@@~E@}!@@@@@@@@%@@@rt@@i@@@-@@@ภ$trueu!u%@;Qa@@@M@@@AB@@A@@T@ @@g@@@@@@v&*v&+@@@@@I@@@ภ%falsev&/K@;r@@@@B@@A@@q@N@@S@@A%param q[R@@@S@б@г5|y@<@@@gx@г+wv@/@@@ns@@ @@pr@lA@@@@@@@@@@@B@{@A@x@xw@@@zz@@@@g)arg_label@@@@W)apply_arg@@@@@@@@@@3      @@@@@@1is_abstracted_arg @*FA@@@@@@@@@@@@@@@@2б@В@г233z4z@@9@@@,@@@г89@zAz@@?@@@9@@@@@ @@@ @@гE$boolSzTz@@M@@@L@@@@@O)@@ihA@@@@g@@@@e@@@@@c@@@@@b@@@@y{z{@@@@@3|{{|||||@tqz|@@@@@Ġ'Omitted{{@;'Omitted)Typedtree.arg_or_omitted!a@d!b@e@@@ @@AA@B@A4typing/typedtree.mli}6W6Y}6W6h@@@@Ġ"(){{@;U_@@@N@@@@A@@A@@X@@ @@$unitF@@@A@@@4@@@@@F@@{{@@@Q@@@렠@@@@@@U@@@ภ8{{@7@@@@@@ a@@@||@@o@@@n@@Ġ#Arg||@;#Argh@a@A@@B@AV|6I6KW|6I6V@@@i@@||@@s*expression@@@@@@@@I@@@@@||@@@@@@@X@@@@@@@@ภd!|@c@@@G@@Aa%z@@@@б@В@г5@@@@@@гx7@|@@@@@@@ @@@гj@n@@@@@@@@+A@@@@\@@@!٠@Z@@@!@@!X@@@!@@!B@!@A@@@X@@m~  n~  @@@*expression@@@!@@@!@@!3xwwxxxxx@pn@@k@@@3classify_expression@JA@@@@!@@@!@@!б@г)Typedtree~ #~ ,@&~ -~ 7@@@.@@@!' @@г,"sd~ ;~ =@@4@@@!3@@@@@!6@@FEA@@@D@@@!A@@@!@@!@@Aఠ3classify_expression@KA@@@%Ident#tbl@@@;C@;@@@;C@!@@@@"/C@! @@@"@@"@@"k@࣠@#envA@ OA@@*3@~9@4@%.@@@!D@!@@!D@!@@!D@!@@@A7classify_value_bindings@(Asttypes(rec_flag@@@$C@!@VC@<C@;C@!@$listK-value_binding@@@;F@;@@@;C@"C@"@@"D@"@@"D@!@@!D@!@89@@QLA-classify_path@wC@"@$Path!t@@@$C@"X6recursive_binding_kind@@@" @@" D@"@@"D@!@X#,#2Y#,#?@@qMA:classify_module_expression@C@" @+module_expr@@@<;C@"@@@"D@"@@"D@" @@" D@!@u''v'(@@NA@@@@@@!eA@PA@@3@@@@@@@@@ఐ!e@@@@@3@!@@@(exp_desc@3(exp_desc@@@ #/expression_desc@@@ @@@ 3'exp_loc (Location!t@@@ @@A @A   !@@%x@3)exp_extra$listK@6)exp_extra@@@ @!t@@@ @E*attributes@@@ @@ @@@ @@B0@A7"&8"\@@Jy@3(exp_type>%Types)type_expr@@@ @@C>@AE]aF]{@@Xz@3'exp_envL#Env!t@@@ !@@DL@AS|T|@@f{@3.exp_attributesZ(@@@ "@@EU@A\]@@o|@@A`a@@sw@ti@@c@@@".s@Ġ(Texp_let!'!/@;(Texp_lett@@@ @@@@ 1f@@@ 3@@@ 2(@@@ 4@CBA_@A6@@@@ఠ(rec_flag;!1<!9@TQA@@.@@@"73?>>?????@@@@ఠ"vbJ!;K!=@cRA@@+!@@@"9@@@"8@ఠ!e\!?]!@@uSA@@\@@@":!@@@Md!A@@@@@";&@@@@@"<)@@@@ఠ#env)uEQvET@]A@@^C@$3xwwxxxxx@HA@B@C:3@4@5)"@#@$@@@ఐ7classify_value_bindingsEWEn@@@@@u@n^@@$@@$@@$@@ఐc(rec_flagEoEw@!@@&@@ఐ#envExE{@%@@3@@ఐn"vbE|E~@:@@C@;C@$C@@4@@D@A@EM@@ఐ3classify_expression@Ұ@@@@@@@$@@$@@$3@Ze^@_@`@@@@ఐl#env@ @@k@@ఐ!e@o@@H@$@@*@@ @@@$H@$&@; @@@@@$@Ġ*Texp_ident @;*Texp_ident@@@@ ,#loc)Longident!t@@@ .@@@ ->1value_description@@@ /@C@A_@A@D@@@@@ఠ$path23@KTA@@@@@"D365566666@@@@@=>@@.,@@@"F@@@"E @@IJ@@+@@@"G@@@GO@@@@@"H@@@@@"I@@@ఐ -classify_path_`@$@@@"@@@@$@@$@@$3feefffff@=6@7@8@@@@ఐ#envvw@@@@@ఐQ$path@@@=@@(@@@Ġ-Texp_sequence@;-Texp_sequence|@@@@ t@@@ u@BPA_@A))))@@@@@@@@@@"O3@@@@ఠ!e@UA@@@@@"WI@"P@@@+@@@@@"Q@@@Ġ0Texp_struct_item"2@;0Texp_struct_item@>.structure_item@@@ @@@ @B^A_@A4,,,5,,-@@@G@@45@@@@@"V9@8!e78@ VA@@5C@@@&9@@J@@@"XH@@H@@b@@N@@@"[L@@@ఐ<3classify_expression =E =X@ @@@;@*1@@@$@@$@@$3        @r]V@W@X@@@@ఐ*#env =Y =\@@@P@@ఐq!e %=] &=^@@@JH@$@@*@@0 @Ġ.Texp_construct 5`f 6`t@;.Texp_construct@)#loc)!t@@@ R@@@ Q*Data_types7constructor_description@@@ SP@@@ U@@@ T@CHA_@A$c$e$y$@@@@@ ``v a`w@@(&@@@"e@@@"d3 f e e f f f f f@@@@ঠ(cstr_tag s`z t`@3(cstr_tag*Data_types7constructor_description@@@"/constructor_tag@@@"@@E;3)cstr_name&stringQ@@@"@@@ @A5typing/data_types.mliWW@@C@3(cstr_res%Types)type_expr@@@"@@A@AX X @@$D@31cstr_existentials+$listK)type_expr@@@"@@@"@@B*@A!YIM"YIo@@6E@3)cstr_args=$)type_expr@@@"@@@"@@C:@A1Z2Z@@FF@3*cstr_arityM#intA@@@"@@DF@A=[>[@@RG@Y3+cstr_constsY @@@"@@FP@AG]TXH]Ti@@\I@3.cstr_nonconstsc@@@"@@GZ@AQ^R^@@fJ@30cstr_generalizedm$boolE@@@"@@Hf@A]_^_ @@rK@3,cstr_privatey(Asttypes,private_flag@@@"@@It@Ak`8<l`8W@@L@3(cstr_loc(Location!t@@@"@@J@Aya}za}@@M@3/cstr_attributes)Parsetree*attributes@@@"@@K@Abb@@P@3,cstr_inlined&optionL0type_declaration@@@"@@@"@@L@Acc@@Q@3(cstr_uid#Uid!t@@@"@@M@Add@@S@@A\\0@@H@Ġ,Cstr_unboxed A` B`@;,Cstr_unboxed@@@"@@@@AC@Ajj@@@V@@@  @@@@@"@@@ R`y S`@@@@@"H@"@Ġ":: `` a`A;   ؐ@@U@ B@AA@A u@@ Ġఠ!e# o`@ WA@@n@@@" @Ġ"[] A; @@@@AA@A @@ @@A@ ~@@@"@@@"@@@ `'@@8@@@"@@@"&@@@[ `@@@@@"+@@@@@".@@@ఐ۠3classify_expression  @@@@@@@@$@@$@@$3        @A;@<@=@@@@ఐɠ#env  @1@@@@ఐU!e  @@@H@$@@*@@ @Ġ.Texp_construct  @@  @@@@@"@@@"y@@ @@@@"~@@@@@@"@@@"@@@@@J@@@"@@M@@@"@@@ภ&Static  @;&Static/Value_rec_types6recursive_binding_kind@@@@@@@B@@A:typing/value_rec_types.mliUU@@@ A@@@@@Ġ+Texp_record  @;+Texp_record@y@@@ @AJA_@A%j%l&3&8@@;@@&fields@@%arrayJ@1label_description@@@ [@7record_label_definition@@@ \@@ Z@@@ Y%%%%@@@.representation@@m5record_representation@@@ ]%%%&@@@3extended_expression@@&optionL_@@@ _@@@ ^&& &&2@@@@JA@@@@@ y@@@ AA@ঠ&fields w3 x9@3L[@@@"N@@@310@@AA*@'3$#@@BA@A9@6A@@ ? @@@R@@@#3        @@@@@Ġ*Overridden B L@;*OverriddenZ@@@ @#loc!t@@@ @@@ Ԡ@@@ @BA@B@A m44 m44@@@@@ N O@@@@@#@@@#2@ఠ!e$ P Q@ XA@@@@@#@@@@8 R@@@@@#E@@K@@@M@ @@#L@@ < U@@@@@@#@@@@#@@#@@@#_@.representation   @3@@@"@@A3@@@A@3@@BA@A@Ġ.Record_unboxed   @;.Record_unboxed v5record_representation@@@@$boolE@@@@A@BC@A nESS oESS@@@ @@  @@@@@#&@@@@@@@@#'@@@ $ %W@@ @@@#)H@#(@@@@@@@@#*@@@@@#+@@@ఐv3classify_expression ;[c <[v@C@@@u@dk@@@$@@$@@$3 B A A B B B B B@}@~@@@@@ఐd#env R[w S[z@̰@@@@ఐ!e _[{ `[|@@@H@%@@*@@j @Ġ+Texp_record o} p}@U@ t} u}@@W@@@#0@@@ @@@@@#1@@@@@#2@@@ภ&Static  @@@@@Ġ,Texp_variant  @;,Texp_variant@%label@@@ VI@@@ X@@@ W@BIA_@A %<%> %<%i@@@@@  @@@@@#9-@@@@@@#;@@@#:6@@@*@@@@@#<:@@:@Ġ*Texp_tuple  @;*Texp_tuple@@&stringQ@@@ O@@@ N@@@@ P@@ M@@@ L@AGA_@AJ""K"# @@@]@@  @@#@"!@@@#G@@@#F@@@@#H@@#E@@@#D~@@@=@@f@@@#I@@@@v@@j@@@#J@Ġ/Texp_atomic_loc  @;/Texp_atomic_loc@@@@ `#loc!t@@@ b@@@ a1label_description@@@ c@CKA_@A ''((R@@@@@ @ A@@>@@@#Q@@@" @@@#S@@@#R@@@@@@#T@@@8@@@@@#U@@@@@@@@@#V@Ġ:Texp_extension_constructor c d@;:Texp_extension_constructorL@W#locW!t@@@ @@@ ,!t@@@ @B]A_@A+,,+,,@@@@@  @@@@@#]@@@#\@@ @@@@#^@@@/@@@@@#_@@@@@@@@@#` @Ġ-Texp_constant   @;-Texp_constant@(constant@@@ 0@AAA_@A  @@@ @@  @@@@@#d*@@@@@@@@#e.@@.@@" @@@@@#g2@@@ภ&Static  (  .@@@@;@Ġ(Texp_for 06 0>@;(Texp_for@%Ident!t@@@ x)Parsetree'pattern@@@ y@@@ z@@@ {.direction_flag@@@ |@@@ }@FRA_@A ])) ^*5*G@@@ p@@ 0? 0@@@-@@@#q@@@)@@@#r@@ @ @@@#s@@@ @@@#t@@@'@@@#u@@@ @@@#v@@@O@@@@@#w@@@Ġ-Texp_setfield3AG4AT@;-Texp_setfield@ 4@@@ h+#loc+!t@@@ j@@@ i1label_description@@@ k L@@@ l@DMA_@A (( () @@@ @@[AU\AV@@ Y@@@#@@@&$@@@#@@@#@@@"@@@#@@@ l@@@#@@@A@@@@@#@@@@@@@@@#@Ġ*Texp_whileW]Wg@;*Texp_whilel@ @@@ v @@@ w@BQA_@A )) ))@@@ @@WhWi@@ @@@#@@@ @@@#@@@ @@@@@#@@@@@@@@@#@Ġ/Texp_setinstvarjpj@;/Texp_setinstvar@m!t@@@ t!t@@@ #loc@@@ @@@  @@@ @DVA_@A .** /*+@@@ A@@jj@@&@@@#Q@@@$@@@#V@@ @" @@@#@@@#_@@@ @@@#d@@@B@@L@@@#h@@h@@@@P@@@#l@@@ภ&Static@@@@u@Ġ0Texp_unreachable @;0Texp_unreachable@@@@A_@A m*,, n*,,@@@ @@@  @@p@@@#@@s@@@#@@@ภ&Static#$@&@@@+@Ġ*Texp_apply01@;*Texp_apply@ 1@@@ 8|@ 0)arg_label@@@ ;@ )apply_arg@@@ <@@ :@@@ 9@BDA_@A ?A ?z@@@ @ঠ(exp_desc\]@Ġ*Texp_identde@\@ij@@ "@@@#3kjjkkkkk@@@@@rs@@ca@@@#@@@# @ఠ"vd%@YA@@f@@@#@@@&@@@@@# @@@@@ @@@#H@#(@@@@b@a@@@#@_@@@#@@#@@@#=@@@| @@ @@@#B@@ @@@#E@@ఐ &is_ref!,!2@ @@@ @@@%% @@@%$@@%#3@ /LE@F@G@@@@ఐS"vd!3!5@ @@ @@@%,H@%.H@%-@@# @@@@@%/H@%+@ภ&Static9A9G@@@@'@Ġ*Texp_applyHNHX@ɠ@HZH[@@ @@@#3@ i@@@ఠ$args& H\ H`@$ZA@@֠@@@@#̠@@@@#@@#@@@#@@@' Ha@@ z@@@#!@@ }@@@#$@@డ$List&exists5bm6bq@ 9br:bx@@@@!a@&A$boolE@@@(@@(@ %@@@( @@@(@@(@@(@(list.mli$$$$@@,Stdlib__Liste@(#@@@@@ k@@@(@ i@@@)@@(G@(*@@@(@@(@'@@@(&@@@(@@(@@(3xwwxxxxx@ vo@p@q@@@@ఐ u1is_abstracted_argbyb@ @@@@ @@@(@ @@@(@@( @@@(@@(!@@ఐ$argsbb@+@@`O@@@(H@)H@)6@@} @@@@@)H@(<@ภ&Static@@@@E@Ġ*Texp_apply@@@@ @@@#@@@@@@@#۠@@@@#@@#@@@#@@@@@ @@@@#@@ C@@@#@@@ภ'Dynamic@;'Dynamic@@@AB@@AYY@@@B@@  @@ @Ġ*Texp_array@;*Texp_array @ ,mutable_flag@@@ m U @@@ o@@@ n@BNA_@A v) )  w) );@@@ @@"#@@@@@#$@@@ (@@@#@@@#-@@@*@@ @@@#1@@ @@@#4@@@ภ&Static=>@@@@@ E=@Ġ)Texp_packJK@;)Texp_pack 3@ @@@ @A[A_@A "++ "++@@@ @ఠ$mexp'^_@w[A@@ @@@#3baabbbbb@ @@@@@@@ @@@#@@ @@@#@@@ఐ :classify_module_expressionvw(@ @@@ @  @@@)@@)@@)3}||}}}}}@ (!@"@#@@@@ఐ #env),@ @@ @@ఐ<$mexp-1@@@ 6C@))@@)@@ @Ġ-Texp_function282E@;-Texp_function @  !.function_param@@@ 6@@@ 5 (-function_body@@@ 7@BCA_@A  @@@ -@@2F2G@@@@@#@@@#j@@ @@@@#o@@@,@@ .@@@#s@@ 1@@@#v@@@ภ&StaticKSKY@@@@ @Ġ)Texp_lazyZ`Zi@;)Texp_lazy @ @@@ @AYA_@A R ++ S ++@@@ e@ఠ!e(ZjZk@\A@@ @@@$ o@@@@@ c@@@$ s@@ f@@@$ v@@@డ'Typeopt6classify_lazy_argument'Typeopt!"@ %&@@@)Typedtree*expression@@@)Р%Other@4Constant_or_function@=Float_that_cannot_be_shortcut@*IdentifierР%Other@-Forward_value@@@@)A@@@)@@@)A@@@)@@)@2typing/typeopt.mlia++eA@@'TypeoptR@:5@@@2@@@)Р-@,@+@*Р)@(@@@@)A@@@)@@@)A@@@)@@)3xwwxxxxx@ x@y@z@@@@ఐ!e@ @@d@@@)I@)I@)@@r @@Р`@_@^@]Р\@[@@@@)A@@@)@@@)A@@@)3@4Constant_or_function@Р@@@~Р}@|@@@@)A@@@)@@@)A@@@@@)Y@@Р@@@Р@@@@@)A@@@)@@@)A@@@)t@@@ఐ 33classify_expression@ @@@ 2@ ! (@@@*^@@*]@@*\@@ఐ #env  @ @@ D@@ఐ!e@@@ >I@*k@@'@@ )@@@*Z@=Float_that_cannot_be_shortcut@Р@@@Р@@@@@)A@@@)@@@)A@@FG@@@)@@@*Identifier-Forward_value@Р @ @@@@)A@@]^@@ @)@Р-@,@+@*Р)@(@@@@)A@@@)@@@)A@@|@@@)@@@@:"@@РM@L@K@JРI@H@@@@*A@@@*@@@*A@@@* @@@ภ&Static%@@@@)@*Identifier%Other@Рg@f@@@@*$A@@&:&@@@ @*#B@Р@@@Р@@@@@*A@@@*@@@*A@@&.@@@*`@@Р@@@Р@@@@@*)A@@@*(@@@*'A@@@*&{@@@ఐ:3classify_expressionDNDa@@@@9@(/@@@*v@@*u@@*t@@ఐ%#envDbDe@ @@K@@ఐ!e Df!Dg@@@EI@*@@'@@@%Other@Р@@@Р@@@@@*;A@@@*:@@@*9A@@HhpIhv@@@*8@@Р@@@Р@@@@@*@A@@@*?@@@*>A@@@*=@@@ภ&Staticmn@ p@@@Q@@@Aqr@@ x@Ġ(Texp_new@;(Texp_new z@M!t@@@ #loc !t@@@ @@@  1class_declaration@@@ @CTA_@A *k*m *k*@@@@@@@$@@@$ #@@@" @@@$ @@@$ ,@@@@@@$ 1@@@;@@%@@@$5@@5@Ġ,Texp_instvar@;,Texp_instvar @!t@@@ !t@@@ #loc@@@ @@@ @CUA_@AP**Q**@@@c@@@@"@@@$g@@@ @@@$l@@ @@@@$@@@$u@@@9@@i@@@$y@@y@@@@m@@@$}@Ġ+Texp_object  @;+Texp_object@/class_structure@@@ mM@@@ @@@ @BZA_@A!++!++@@@@@;<@@@@@$ @@@@@@$"@@@$!@@@+@@@@@$#@@@@@@@@@$$@Ġ*Texp_matchYZ'@;*Texp_matchB@Z@@@ =$case+computation@@@ @@@@ ?@@@ >%value@@@ C@@@ B@@@ A'partial@@@ D@DEA_@A    @@@@@()@@@@@$/@@@431@@@$2@@@$1@@@$0@@@0@/@@@$5@@@$4@@@$3@@"@.@@@$6@@@[$@@ @@@$7@@@@'(@@@@@$8!@Ġ/Texp_ifthenelse*0*?@;/Texp_ifthenelse@@@@ p@@@ q s@@@ s@@@ r@COA_@A4)<)>5)<)~@@@G@@*@*A@@@@@$?K@@@@@@$@P@@ @@@@$B@@@$AY@@@1@@M@@@$C]@@]@@g@@Q@@@$Da@Ġ)Texp_sendBHBQ@;)Texp_send@@@@ ~{$meth@@@ @BSA_@Am*H*Jn*H*j@@@@@BRBS@@@@@$I@@@@@@$J@@@! @@}@@@$K@@@@@@@@@$L@Ġ*Texp_field3TZ4Td@;*Texp_field@4@@@ d+#loc+!t@@@ f@@@ e 1label_description@@@ g@CLA_@A(S(U(e(@@@@@WTeXTf@@U@@@$S@@@" @@@$U@@@$T@@@@@@$V@@@8@@@@@$W@@@@@@@@@$X@Ġ+Texp_assertzgm{gx@;+Texp_assertc@{@@@ !t@@@ @BXA_@A+g+i+g+@@@@@gygz@@@@@$]@@@@@@$^@@@" @@@@@$_@@@@@@@@@$` @Ġ(Texp_try{{@;(Texp_try@@@@ ERA@@@ H@@@ G@@@ F_N@@@ K@@@ J@@@ I@CFA_@A)" " *" "G@@@<@@{{@@@@@$j@@@@(yh@@@$m@@@$l@@@$kM@@@(u@@@$p@@@$o@@@$nZ@@@J@@N@@@$q^@@^@@h#@@R@@@$rb@Ġ-Texp_override@;-Texp_override@!t@@@ S@ :!t@@@ @#loc D@@@ @@@ @(@@@ @@ @@@ @BWA_@A+ +"+ +f@@@@@89@@1@@@$|@@@/@.@@@$@+)@@@$@@@$@P@@@$@@$~@@@$}@@@U @@@@@$@@@@$@@@@@$@Ġ*Texp_letophi@;*Texp_letopQ@ǐ@@@ @A\A_@A#++),,@@;@@$let_@@*binding_op@@@ $,,$,,(@@@$ands@@͠@@@ @@@ %,),/%,),F@@@%param@@ !t@@@ &,G,M&,G,]@@@$body@@B1@@@ @@@  ',^,d ',^,v@@@'partial@@5@@@ (,w,}(,w,@@(@@\A@@@@@@@@@A+@@@@Y@@@$/@@@b@@#@@@$3@@3@@= @@'@@@$7@@@ภ'Dynamic@@@@@@@@A@г預"sd@@@@@:@"*3@R@@ @@@@@A@@(@@@@;@@:@@:C@:@@@"@@@@@@@@"@@"@@"3@@@@࣠@(rec_flag3A@+aA@@3@!@@@@@@#env4A!"@:bA@@3"!!"""""@1@@@@@@@@(bindings5A23@KcA@@332233333@@@@@@@@@ డ&ignoreF!!G!!@@!a@$unitF@@@\@@['%ignoreAA @@@*stdlib.mli````@@&Stdlibt@@@@TG@;@@@;@@;3eddeeeee@3?E@6@7@@@@ఐf(rec_flagu!!v!!@P@@i@@3@@&@@@;G@;@@ఠ'old_env6!!!!@dA@@pC@;3@&@@@ఐx#env!!!!@`@@| @A@!!@@@ఠ1add_value_binding7!!!!@eA@@@@@@;K@;p@@@;G@;@@@@;jG@;$G@;%@@;&G@; @@;!G@;3@\@9@:@;@@@࣠@#env9A!!!!@fA@@(3@5!!""@@@@@  @@"vb:A!!!!@gA@@-3@!?@@@@@@@@ఐ"vb!!!!@B@@@@C3@#@@@&vb_pat!!!!@3&vb_pat@@@ {'pattern@@@ @@@ 3'vb_expr @@@ @@A@ArEFsEF@@@3+vb_rec_kind/Value_rec_types6recursive_binding_kind@@@ @@B@AFFFFP@@@3-vb_attributes"U@@@ @@C@AFQFUFQFo@@@3&vb_loc+!t@@@ @@D)@AFpFtFpF@@@@AEEEE@@@H=@@7@@@;,G@(pat_descJ!!K!"@3(pat_desc,pattern_data!a@ |@@@ @@@ 3'pat_loc !t@@@ @@A @Arr @@\@3)pat_extra@)pat_extra@@@ @!t@@@ @@@@ @@ @@@ @@B*@As s G@@]@3(pat_type:)type_expr@@@ @@C6@AtHLtHf@@_@3'pat_envF!t@@@ @@DB@Augkugz@@c@3.pat_attributesR@@@ @@EK@Av{v{@@d@@Aqq@@[@a@@,pattern_desc;@t@;0@;2@@@;4J@;5@Ġ(Tpat_var""""@;(Tpat_varS@@@ @@@ @ !t@@@ #loc @@@ @@@ T#Uid!t@@@ @C@ALAAGQ & (HQ & g@@@Zk@ఠ"id;""""@hA@@)@@@;E@ఠ$_loc<"""""@iA@@0.@@@;G@@@;F@ఠ$_uid=""$""(@0jA@@7@@@;H@@@Y"")@@r@@@;J@@@;I(@ @y@@@;L@@@;K/@@@@ఠ$size>8"-";9"-"?@QkA@@g@@@;gL@;W3>==>>>>>@ERK@L@ME>@?@@4-@.@/@@@ఐ3classify_expressionQ"-"BR"-"U@Y@@@@z@@@;[@@;Z@@;Y@@ఐܠ'old_enve"-"Vf"-"]@@@'@@ఐ"vbt"-"^u"-"`@y@@6@'vb_expr{"-"a|"-"h@k @@M@;i?@@0@@C@@A@"-"7@@డ%Ident#add%Ident"l"v"l"{@ "l"|"l"@@@!t@@@6@!a@5@ܠ @@@6 @@@6@@6@@6@@6@0typing/ident.mligg@@X@% @@@@@@;r@ @@@@;q@@@;o@@;n@@;m@@;l3@@@@@@@ఐޠ"id"l""l"@@@@@@@;L@;L@;@@ఐ$size"l""l"@!@@8$@@ఐ(#env"l""l"@ @@L1@@h@@K2@y@@:@@""""@@U@@@;P@@@;O @ @\@@@;R@@@;Q@@@ఐJ#env""?@.@@@Y@@@A!!B@@[3@@@@MDA@uG@;K@A@H@డ$List)fold_left-""."#@ 1"#2"# @@@@#acc@&@!a@& @@'@@'@ @ @@@'@@'@@'@@'@ 33 3r@@ ]@#@@@@7F@;@*@@;@@;@@41@@@; @@;@@;@@;3]\\]]]]]@@@@@@@ఐȠ1add_value_bindingm"# n"#@ @@@@@@;@@@;@K@@@; @@;@@;@@ఐj#env"#"#"@R@@n+@@ఐf(bindings"##"#+@-@@r8@@l@@E9@@@F@@@G @V@@H@A@@@@o@@;@@;@@;C@;@@@@ppUT@SV@@m@j`@@@"@@"@@"3@9@@@࣠@#env?A#,#@#,#C@lA@@3@@@@@@@Ġ$Path#}##}#@&Pident#}##}#@@;&Pident$Path!t@@@*@%Ident!t@@@*@A@@D@A/typing/path.mliSTVSTi@@@B@ఠ!x@#}##}#@mA@@@@@;3@ I@@@A@@@@@3 @@D@;D@;@@@డ)find_same%Ident####@ ####@@@@@@6@Y!a@5@@@6@@6@@6@}h~h@@`Y@@@@@@@;@mh@@@;i@@;@@;3;::;;;;;@?KD@E@F@@@@ఐR!xK##L##@ @@@@@;G@;G@;@@ఐ#env_##`##@_@@ $@@L@@%@Ġ)Not_foundk##l##@;)Not_found#exnG@@@@@@ A@A&_none_@@A@@I@@@@@@@@<C@@@ภ'Dynamic&&&&@ @@@9@@@< Q@@@##&&@@@@@;W@Ġ$Path'''' @$Pdot'' ''@@;$Pdot@@@@*&stringQ@@@*@BA@D@AUU@@@C@@''''@@@@@;@@@@@@;@@@( @@@Ġ$Path''''@&Papply''''@@;&Papply@@@@*@@@*@BB@D@AWW@@@ D@@'' ''!@@@@@;@@@@@@;@@@% @@@@V @@@Ġ$Path''$''(@)Pextra_ty'')''2@@;)Pextra_ty0@1@@@*5(extra_ty@@@*@BC@D@A)Y*Y5@@@:E@@''3''4@@D@@@;"@@@@@@;'@@@' @@$(@@ @@%)@@@ภ'Dynamic/''0''@ <@@@2@@ApA4#,#t@б@@6:;#,#F<#,#G@@г/Value_rec_typesE#,#KF#,#Z@I#,#[J#,#q@@@@@@<"D@;Q @@@@@@@D*@A:==;==@@M@@A>=`=d?=`=@@Q@I>@@8@@@<:H@Ġ*Tmod_ident(B(H(B(R@;*Tmod_identI@@@ Y@!t@@@ I#loc!t@@@ K@@@ J@B@@G@Al?m?qm?m?@@@@ఠ$pathD(B(T(B(X@5pA@@#@@@@@)@@@@?@@' @@@Ġ,Tcoerce_none*)h)r*)h)~@;,Tcoerce_none@@@ @@@@AD@A* FF+ FF@@@=@@@  @@@@@<@@@@@<!@@@ఐ:classify_module_expression+))+))@@@@@z@@@<@@<@@<4@@ఐ~#env+))+))@h@@A@@ఐ$mexp +)) +))@J@@J@<P@@'@@@@@<T@Ġ1Tcoerce_structure ,)) ,))@;1Tcoerce_structureP@_@#intA@@@ @;@@@ @@ @@@ t@[!t@@@ @@@@ @V@@@ @@ @@@ @B@AD@A FFFG+@@@@@ S,)) T,))@@9@8@@@<Ġ@p@@@<@@<@@@<@@@6@5@@@<Ƞ@2@@@<ɠ@@@@<@@<@@@<@@@f)@@@@@<@@@@@<@@@ภ&Static -)) -))@@@@@Ġ/Tcoerce_functor .)) .))@;/Tcoerce_functor@@@@ @@@ @BAAD@AG,G.G,Gd@@@@@ .)* .)*@@@@@<@@@@@@<@@@ @@@@@<@@@@@<@@@ภ&Static /** /**@@@@ @Ġ1Tcoerce_primitive 0**" 0**3@;1Tcoerce_primitive@B2primitive_coercion@@@ @ABAD@A4GeGg5GeG@@@G@@ 0**4 0**5@@@@@<,@@@@@@@@<0@@@@@<3@@@డ$Misc+fatal_error$Misc 1*9*E 1*9*I@  1*9*J!1*9*U@@@&stringQ@@@>!a@>@@>@.utils/misc.mliYY@@$Misc@@@@@@@@@@@@@ J@@@@?g@@ &letrec: primitive coercion on a module!(1*9*W!)1*9*}@@!+1*9*V!,1*9*~@@,@@@@J@@J@@{@@: @@+|@Ġ-Tcoerce_alias!?2**!@2**@;-Tcoerce_aliasx@T!t@@@ !t@@@ a@@@ @CCAD@AHHHH@@@@@!]2**!^2**@@@@@<@@@@@@<@@ @x@@@<@@@.@@|@@@<@@@@@<@@@డ+fatal_error$Misc!3**!3**@ !3**!3**@@@@@@@@@ $@@@@J@@ @@@ @@ "letrec: alias coercion on a module!3**!3**@@!3**!3**@@@@@@J@@J@@@@' @@@@@A!))K)S!4**@@?@Ġ+Tmod_unpack!5**!5**@;+Tmod_unpack@@@@ W+module_type@@@ X@BF@G@AA*A, A*A[@@@2@ఠ!eG!5**!5**@!sA@@@@@<{3@@!5*+!5*+@@@@@<|;@@@+!5*+@@0@@@<}@@@3@@@<~C@@@ఐ*3classify_expression!6++!6++!@@@@)@@@@@@@@@@@3!!!!!!!!@W0)@*@+@@@@ఐ#env"6++""6++%@w@@@@ఐD!e"6++&"6++'@@@8H@@@@*@@ @@@A"(%()@г"sd"$'( "%'("@@@@@B@<63"("'"'"("("("("(@@@ @@@@@A@@@@@@B@@B@@BC@B@@@"8''%@@ఐ}3classify_expression"B7+(+-"C7+(+@@J@@@zs@@@B@@@B@L@@@B|@@@B@@B@@B3"S"R"R"S"S"S"S"S@a@@@@డ%empty%Ident"e7+(+A"f7+(+F@ "i7+(+G"j7+(+L@@!a@5@@@6@fqqfq@@W@@@@@@B@@@BC@BC@B/@@D@@@ @@@! @@@!@@!B@BC@B?@ ,@б@г  -@@@@!*@г@@@@!1@@ @@!3@ EA@@@B@@@B?@@@B@@BB@B>@A@"~  Q@@R@A""ΐ " {1 Usage of recursive variables} ":+O+O":+O+v@@@@@@3""""""""@SQa@d@N@@$ModeB"<+x+"<+x+@"DA@БA+!tC"@,G,N"@,G,O@@;@@&Ignore@@"A,R,V"A,R,^@)ocaml.doc# [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur. #B,_,c#D,-'@@@@@@@#uA%Delay@@# F-)--# F-)-4@ A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. #G-5-9#I-.@@@@@@@#3vA%Guard@@##K..#$K..$@0  A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. #1L.%.)#2Z1=1C@@@@@@@#JwA&Return@@#:\1E1I#;\1E1Q@G  A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context. #H]1R1V#I`222w@@@@@@@#axA+Dereference@@#Qb2y2}#Rb2y2@^ A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context. #_c22#`e33l@@@@@@@#xyA@@A@@@@@#c@,G,I@o For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it. #p=++#q?,,F@@@@@@@A@#tA@##xA,R,X@t@@@#@@@@@@##F-)-/}@n@@@#~}@}}@@@}@}@#yy#K..w@h@@@z#xw@ww@@@w@w@#ss#\1E1Kq@b@@@t#rq@qq@@@q@q@#mm#b2y2k@\@@@n#ΐlk@kk@@@k@k@@A@g#ِfe@ee@@@e@e@@r@3########@@@@@#g3n3t#g3n3y@@@@@@B@@@@B#@@@B@@B@@B3########@%@@@%equal@$zA@@@@B@@@@B@@@B@@B@@B'б@г'!t$g3n3$g3n3@@/@@@B$@@б@г/!t$g3n3$g3n3@@7@@@B2@@г7$bool$*g3n3$+g3n3@@?@@@B>@@@@@BA@@@#@@BD& @@XWA@@@V@@@B@U@@@BT@@@B@@B@@BS@డ"!=$Kg3n3}$Lg3n3@@!a@@$boolE@@@'@@&@@%&%equalBA @@@@ y y@@ Q@@б@гba@@@@B^@б@г^]@@@@BZ@г$9ZY@@@@BV@@ @@BU@@@@BT@$g3n3|$g3n3@@@@@@@C@@@@C@@@C@@C@@CD@C @A@$g3n3p@@@@ఠ$rank$n4O4U$n4O4Y@${A@@@@@@CD@C#@@@C!D@C@@CD@C3$$$$$$$$@@@@@@@Ġ&Ignore$o4e4k$o4e4q@;@@@B@@@@E@@A@@@@@!3$$$$$$$$@.$n4O4Q$s44@@@@@@@$o4e4u$o4e4v@@' @Ġ%Delay$p4w4}$p4w4@;@@@AE@@A@@@@@:@@@A$p4w4$p4w4@@:@Ġ%Guard$q44$q44@;/@@@BE@@A@@@@@M,@@@B%q44%q44@@M2@Ġ&Return% r44% r44@;B@@@CE@@A@@@@@`?@@@C%r44%r44@@`E@Ġ+Dereference%s44% s44@;U@@@DE@@A@@@@@sR@@@D%(s44R@@rW@@A!g%+n4O4\U@@@V@@D@C4]@A@Z@ZY@t@ఠ$join%;z5S5Y%<z5S5]@%T|A@@@@@@CWD@C6@ D@C; D@C<@@C=D@C7@@C8D@C53%M%L%L%M%M%M%M%M@@@@@@࣠@!mA%^z5S5^%_z5S5_@%w}A@@3%_%^%^%_%_%_%_%_@,%fz5S5U%g{5e5@@@@@  @@"m'A%rz5S5`%sz5S5b@%~A@@*3%s%r%r%s%s%s%s%s@!6@@@@@@@@డ#">=%{5e5s%{5e5u@@!a@@;@@@6@@5@@4-%greaterequalBA @@@@@ @ A@@ ?V@@@@$@@@CVF@CD@@@@CC@@CB@@CA3%%%%%%%%@6Bb@9@:@@@@ఐ$rank%{5e5l%{5e5p@j@@@ @@@CP$@@@CO@@CN@@ఐt!m%{5e5q%{5e5r@Y@@'@@@@0(@@ఐ6$rank%{5e5v%{5e5z@@@@1@@@C\$@@@C[@@CZ?@@ఐ"m'%{5e5{%{5e5}@I@@L@@@@WH@CbO@@A@@@@@CeG@CLU@ఐ!m&{5e5&{5e5@@@_@ఐ"m'&{5e5@f@@i@&{5e5i@@k@A@D@Ci@A@@@ʠ@ఠ'compose&%77&&77@&>A@@@|@@@CD@Ck@@@@CD@Cp@@@CD@Cq@@CrD@Cl@@CmD@Cj3&=&<&<&=&=&=&=&=@ @@@@@࣠@"m'A&N77&O77@&g@A@@%3&O&N&N&O&O&O&O&O@2&V77&W8 8A@@@@@  @@!mA&b77 &c77!@&{AA@@03&c&b&b&c&c&c&c&c@!<@@@@@@@@@ఐ-"m'&x77*&y77,@@@N3&x&w&w&x&x&x&x&x@"H@@@@@@ఐ(!m&77.&77/@ @@T@@@@@b@[@@Cy@@Ġ&Ignore&757;&757A@@@@@w@C{3&&&&&&&&@*@@@@@&757C&757D@@xD@Cw@C| @@@@@@ @@C@@@@@&757G&757H@@@C@@Ġ&Ignore&757J&757P@@@@@@C)@@@@@@@@C0@@0@@5 @@@@@@C7@@@ภ&Ignore&757T&757Z@@@@@@@Ġ+Dereference&7[7a&7[7l@@@@@@CS@@@&7[7n&7[7o@@@C[@@@@@@ @@Cb@@@@@@Ch@@@ภ+Dereference'7[7s'7[7~@@@@q@@Ġ%Delay'$77'%77@>@@@@@C@@@'-77'.77@@@C@@@@@@ @@C@@@@@@C@@@ภ%Delay'D77'E77@^@@@ @@Ġ%Guard'U77'V77@\@@@@+@C@@Ġ&Return'b77'c77@V@@@@/@C@@@@@@ @@C@@@@@@C@@@ภ%Guard'z77'{77@@@@B@@Ġ%Guard'77'77@@@@@a@C3''''''''@@@@@Ġ+Dereference'77'77@@@@@l@C@Ġ%Guard'77'77@@@@@ @@@@ @Ġ%Delay'77'77@@@@@'@@'77'77@@*@!m'77'77@'BA@@@C'77'77@@%7@@=@@@>@,@@C>@@@D@2@@CD@@@ఐ!m'77'77@@!@@@3''''''''@e'@@@@Ġ&Return'77'77@@@@@@Cd@@Ġ&Return'77'77@@@@@@Cq@@@@@@ @@Cx@@@@@@C~@@@ภ&Return(78(78 @@@@@@Ġ&Return(%8 8(&8 8@@@@@@C@@Ġ+Dereference(88 8(98 8%@@@@@@C@Ġ%Guard(C8 8((D8 8-@J@@@@ @@@@ @Ġ%Delay(M8 80(N8 85@g@@@@@@(Q8 8(R8 86@@@!m(W8 8:(X8 8;@(pCA@@@C°(^8 8(_8 8<@@%@@<@@@=@,@@C@@@C@2@@C@@@ఐ!m(t8 8@@@ @ @@<3(t(s(s(t(t(t(t(t@&@@@@@A(z77$$@@@@.%A@SD@D-,@A@)@)(@?@A@@3@PE@ha@b@c@@3((((((((@Kk@@(<+x+(8B8E@@@(<+x+x@@ƠA+$modeD(8G8L(8G8P@@;@@&Ignore@@(8G8\(8G8b@@(FA%Delay@@(8G8c(8G8j@@(GA%Guard@@(8G8k(8G8r@@(HA&Return@@(8G8s(8G8{@@(IA+Dereference@@(8G8|(8G8@@(JA@@A!t@@@D@@@@@(8G8G @@A@(EA@#8865@4@@@8@#44(8G8e2@1@@@5@#11(8G8m/@.@@@2@#..(8G8u,@+@@@/@#++(8G8~)@(@@@,@@Aг($Mode(8G8S(8G8W@/)8G8X)8G8Y@@@73))))))))@:3@'!A@P@k@@@@@8|;@@@A@@@DF@D.@@@@I@@@G@@ @@J@@JT@3))))))))@@@#EnvE)*88)+88@)CA@Б!MAF)<==)===@)UKA@гР'#Map$Make)N==)O==@ )R==)S==@@@3)T)S)S)T)T)T)T)T@R@@@#Ord␡+Stdlib__Map+OrderedType#key@;@@@A!t@@@F=@@@@'map.mlis;/;Xs;/;h@@@@s@A@!t@;!a@F<@A@A+Stdlib__Map$Make1@@F>I@B@@@I V ZI V e@@@@2D@A@%empty#!a@F;@@@F:@0L  1L  @@DE@@#add@I@@@F9@!a@F7@  @@@F8$ @@@F6@@F5@@F4@@F3@OO  PO  @@cF@@+add_to_list@@@@F2@!a@F/@>$listK@@@F1@@@F0I @@@F.@@@F-@@F,@@F+@@F*@yX  zX  @@G@@&update@I@@@F)@@&optionL!a@F$@@@F(  @@@F'@@F&@v@@@F%z@@@F#@@F"@@F!@@F @^^@@H@@)singleton@u@@@F@!a@F@@@F@@F@@F@jW[jW{@@I@@&remove@@@@F@!a@F@@@F@@@F@@F@@F@oo@@J@@%merge@@@@@F@`!a@F @@@F@k!b@F @@@Ft!c@F @@@F@@F@@F@@F@@@@F @@@@F @@@F@@F@@F@@F@vY]x@@,K@@%union@@@@@F@!a@E@ @@@F@@F@@F@@F@@@@E@@@@E@@@E@@E@@E@@E@EfjFf@@YL@@(cardinal@)!a@E@@@E#intA@@@E@@E@^_@@rM@@(bindings@B!a@E@@@E @>@@@E@@@E@@@E@@E@8<8a@@N@@+min_binding@c!a@E@@@E@[@@@E젠@@@E@@E@bfb@@O@@/min_binding_opt@!a@E@@@E#@{@@@E砠@@@E@@@E@@E@JNJ|@@P@@+max_binding@!a@E@@@E@@@@Eᠠ@@@E@@E@484[@@Q@@/max_binding_opt@!a@E@@@E`@@@@Eܠ@@@E@@@E@@E@ @@ R@@&choose@ݠ!a@E@@@E@@@@E֠@@@E@@E@@@)S@@*choose_opt@!a@E@@@E@@@@EѠ@@@E@@@E@@E@67@@JT@@$find@@@@E@!a@E@@@E@@E@@E@NO@@bU@@(find_opt@@@@E@7!a@E@@@E۠ @@@E@@E@@E@kIMlIs@@V@@*find_first@@=@@@E$boolE@@@E@@E@\!a@E@@@E@T@@@E@@@E@@E@@E@    D@@W@@.find_first_opt@@f@@@E)@@@E@@E@!a@E@@@E'@@@@E@@@E@@@E@@E@@E@"*"."*"l@@X@@)find_last@@@@@EU@@@E@@E@!a@E@@@E@@@@E@@@E@@E@@E@#_#c#_#@@Y@@-find_last_opt@@@@@E|@@@E@@E@֠!a@E@@@Ez@@@@E@@@E@@@E@@E@@E@$y$}$y$@@'Z@@$iter@@@@@E@!a@E$unitF@@@E@@E@@E@ @@@E @@@E@@E@@E@9%%:%& @@M[@@$fold@@ @@@E@!a@E@#acc@E@@E@@E@@E@0@@@E@  @@E@@E@@E@]'%')^'3'l@@q\@@#map@@!a@E!b@E@@E@M @@@EQ @@@E@@E@@E@|(e(i}(e(@@]@@$mapi@@N@@@E@!a@E!b@E}@@E@@E@q @@@E~u @@@E|@@E{@@Ez@))))@@^@@&filter@@r@@@Ey@!a@Et;@@@Ex@@Ew@@Ev@ @@@Eu@@@Es@@Er@@Eq@****@@_@@*filter_map@@@@@Ep@!a@ElO!b@Ej@@@Eo@@En@@Em@@@@Ek @@@Ei@@Eh@@Eg@ ,, ,,?@@`@@)partition@@@@@Ef@!a@E`@@@Ee@@Ed@@Ec@ @@@Eb@@@@E_@@@@Ea@@E^@@E]@@E\@.../%@@/a@@%split@@@@E[@!a@EW@@@EZ@ @@@EV@@@@EX@@@@EY@@EU@@ET@@ES@H$0'0+I$0'0\@@\b@@(is_empty@,!a@ER@@@EQ@@@EP@@EO@_022!`022;@@sc@@,is_singleton@C!a@EN@@@EM@@@EL@@EK@v32l2pw32l2@@d@@#mem@F@@@EJ@_!a@EI@@@EH@@@EG@@EF@@EE@822823@@e@@%equal@@!a@E@@*@@@ED@@EC@@EB@@@@EA@@@@E?:@@@E>@@E=@@E<@@E;@<3j3n<3j3@@f@@'compare@@!a@E6@t@@@E:@@E9@@E8@@@@E7@@@@E5@@@E4@@E3@@E2@@E1@B44B44@@g@@'for_all@@@@@E0@!a@E,{@@@E/@@E.@@E-@ՠ @@@E+@@@E*@@E)@@E(@F5r5vF5r5@@h@@&exists @@@@@E'@!a@E#@@@E&@@E%@@E$@ @@@E"@@@E!@@E @@E@(K66")K66Q@@@@@Dx@!a@Dt@!b@Dr@@Dw@@Dv@@Du@@@@Ds@  @@Dq@@Dp@@Do@lXXlX@@,]@@(fold_all@@b@@@Dn@!a@Dj@!b@Dh@@Dm@@Dl@@Dk@@@@Di@  @@Dg@@Df@@De@mm@@,^@@$iter@@@@@Dd@!a@D`(@@@Dc@@Db@@Da@ @@@D_2@@@D^@@D]@@D\@;n<n@@-_@@&remove@@@@D[@!a@DY@@@DZ&@@@DX@@DW@@DV@WoXo@@-:`@@2make_key_generator@]@@@DU@@@@DT@@@DS@@DR@@DQ@ns==os=f@@-Qa@@@ @U@@G@F@E@p@@@ 3/==@ G;@@@A @@@Gr@@@@ @@@ A@ G; @A@A   ͠ @@@Gq  @@ @@@ A@  @@@Gp@ @ @ @(@@@Go@ @ @@@Gn @@@Gm@@Gl@@Gk@@Gj@ @ @ @@@@Gi@ @(  @@@Gh@@@Gg0  @@@Gf@@@Ge@@Gd@@Gc@@Gb@ @ @ @3@@@Ga@@  @@@G`  @@@G_@@G^@O @@@G]S @@@G\@@G[@@GZ@@GY@ @ @ @R@@@GX@ b @@@GW@@GV@@GU@ @ @ @a@@@GT@q @@@GSu @@@GR@@GQ@@GP@ {@ x@ w@@v@@@GO@ v u@@@GN@ q p@@@GM l k@@@GL@@GK@@GJ@@GI@ @@@GH@ @@@GG {@@@GF@@GE@@GD@@GC@ g@ d@ c@@@@@GB@ b@ d ^ g@@@GA@@G@@@G?@@G>@ m@@@G=@ s@@@G<à w@@@G;@@G:@@G9@@G8@ ]@ Z@ Y@͠ X@@@G7 T@@@G6@@G5@ Q@ N@ M@ڠ L@@@G4 H@@@@G3@ Y@@G2@@@G1@@G0@ G@ D@ C@ B@@@G/@@@@G.@ L@@G-@@G,@ >@ ;@ : @ 9@@@G+ 5@@@@G*@ F@@G)@@@G(@@G'@ 4@ 1@ 0!@ /@@@G&@@@@G%@ 9@@G$@@G#@ +@ (@ '"@. &@@@G" "@.@@@G!@ 3@@G @@@G@@G@ !@ @ #@E @@@G@B@@@G@ &@@G@@G@ @ @ $@X @@@G @X@@@G@ @@G@@@G@@G@ @ @ %@d@@@G@t @@@G @@G@@G@ @ @ &@s@@@G@ @@@G @@@G@@G @@G @@@'@@@@@G @@@G @@G @@@@G@@@@G@@@G@@G@@G@@@(@@@@@G@@@G@@G@@@@G@@@@F@@@F@@@F@@F@@F@@@)@@@@@F@@@F@@F@٠@@@F@@@@F@@@F@@F@@F@@@*@@@@@F@@@F@@F@@@@FР@@@@F@@@F@@@F@@F@@F@@@+@@@@@F@@@@F@@F@@F@@@@F@@@F@@F@@F@@@,@@@@@F@@@@F@@F@@F@1@@@F@@@F@@F@@F@@@-@@@@F@A@@@FE@@@F@@F@@F@@@.@@F@@@F@@@F@@F@X@@@F\@@@F@@F@@F@@@/@@]@@@F@@@@F@@F@@F@r@@@Fv@@@F@@F@@F@@@0@@w@@@F@@@@F@@F@@F@@@@F@@@F@@F@@F@@@1@@@@@F@~z@@@F@@F@@F@@@@F@@@@F@@@@F@@F@@F@@F@y@v@u2@@@@F@Ġt@@@F@̠|@@@F@p@@@F@ؠ@@@F@@F@@F@@F@o@l@k3@j@@@Ff@@@F@@F@e@b@a4@`@@@F\@@@F@@F@[@X@W5@@@@F@V@@@FR@@@F@@F@@F@Q@N@M6@@L@NH@@@F@@F@@F@V@@@F@\@@@FG@@@F@@F@@F@@F@F@C@B7@@A@C=@@@F@@F@@F@3K@@@F@9Q@@@F<@@@F@@F@@F@@F@;@8@78@@=@@@F@62@@@F@@F@@F@R>@@@F1@@@F@@F@@F@0@-@,9@@V@@@F@+'@@@F@@F@@F@k3@@@F&@@@F@@F@@F@%@"@!:@x @@@F~@x@@@F}@-@@F|@@@F{@@Fz@@@;@@@@@Fy@@@Fx@@@Fw@@@Fv@@Fu@@@ <@ @@@Ft@@@@Fs@@@Fr@@@Fq@@Fp@@@=@@@@Fo!@@@@Fn@ @@Fm@@@Fl@@Fk@@@>@@@@Fj@ݠ@@@Fi?@@@@Fh@@@Fg@@@Ff@@Fe@@Fd@@@?@T@@@@Fc@@@Fb@@@Fa@@@@F` @@@F_@@F^@@F]@@@@@sܠ@@@@F\@@@F[@@@FZ$@@@FY@@FX@@@@@@7v==H@I@!A+!tBH7==7==@@;@@5AR!t!t@@@H@@@H@@@@7==7=> @ 8 A "t" maps each rec-bound variable to an access status 7==7==@@@@@@@@@7LA@@Aг !M7=>7=>@'7=>@@г)$Mode7==7=>@07=>7=>@@@8377777777@n@A@A@@|{@hg@ML@0/@#"@@@@@@@@qp@\[@KJ@65@)(@@@@@@@xw@hg@SR@;:@"!@@@@@@@@nm@WV@BA@-,@@@@@@@;@@@A@@@L@Gs@@@@@@@@rm@@@ks@@:8?@@@@@@@@38887878888888888@w@@@ఠ%equal8G> >8H> >@8`MA@@@٠t@@@LYI@L0@@@LF@ @@@LE ;@@@LD@@LC@@LBI@L)38b8a8a8b8b8b8b8b@@@@డ6%equal!M8t> >8u> >@ 8x> >8y> > @@@@ o@ q k@@@HN@@HM@@HL@8 y@@@HK@> @@@HJ j@@@HI@@HH@@HG@@HF@ i@ f!@@@@E@G @@@L4@@L3@@L2@QO@@@L1@WU@@@L/ @@@L.@@L-@@L,@@L+H@@డ%equal$Mode8> >!8> >%@ 8> >&8> >+@@@o@@@D4@t@@@D3@@@D2@@D1@@D0@@ٰ@@@}@@@LT@@@@LS@@@LR@@LQ@@LPy@@k@@z@A@8> > !@@"@}@ఠ$find8>->38>->7@9NA@@@r!t@@@LfI@La@@@@LoI@Ljt@@@LI@Lk@@LlI@Lb@@LcI@L`39 9 9 9 9 9 9 9 @@@@@@࣠@"idA@9>->99>->;@@&@@@Lg399999999@89$>->/9%>Q>@@@@  @9?OA2г5%Ident94>->=95>->B@<98>->C99>->D@@@D@@@Ld @@9@>->89A>->E@@@K"@@@@#tblA@9L>->G9M>->J@@K@@@Lp39N9M9M9N9N9N9N9N@2?7@:@,@@@  @9mPAT гW!t9`>->L9a>->M@@_@@@Lm@@9g>->F9h>->N@@@f@@@@డ<$find!M9z>Q>Y9{>Q>Z@ 9~>Q>[9>Q>_@@@5@@@G@; @@@G @@G@@G@ @ ˰@@@ @@@Lx@GI@LK@Lv@@@Lw@@Lu@@Lt399999999@MZR@U@J@@@@ఐ"id9>Q>`9>Q>b@Y@@+@@@LL@L@@ఐs#tbl9>Q>c9>Q>f@@@@@@L%@@I@@*&@Ġ)Not_found9>Q>l9>Q>u@`@@@@8@@@L4@@@ภ&Ignore9>Q>y@;6@@@DL@@@@E@@A8@@5@@@A@@@9>Q>U@@GC@A@I@L@A@@@נ@ఠ%empty9>>9>>@:QA@@@@L@@@LI@L399999999@ @@@@@డ%empty!M: >>: >>@ : >>:>>@@ w@@@Gv@s@p @@!@A@:>> @@ @@ఠ$join:$>>:%>>@:=RA@@@@@@LI@L@@@@LI@L@@@LI@L@@LI@L@@LI@L3:?:>:>:?:?:?:?:?@HYR@S@T@@@࣠@!xA@:P>>:Q>>@@$@@@L3:R:Q:Q:R:R:R:R:R@6:Y>>:Z?8?A@@@@  @:tSA0г3!t:g>>:h>>@@;@@@L@@:n>>:o>>@@@B@@@@!yA@:z>>:{>>@@D@@@L3:|:{:{:|:|:|:|:|@+80@3@%@@@  @:TAM гP!t:>>:>>@@X@@@L@@:>>:>>@@@_@@@@డh$fold!M:>>:>>@ :>>:>>@@@@.@@@H @ @  @@H @@H @@H @l@@@H@  @@H@@H@@H@ @ @@@@B@@@L@!t@@@LK@L@K@L@@L@@L@@L@@@@L@  @@L@@L@@L3::::::::@anf@i@^@@@@࣠@"idA@:>>:>>@@ m!t@@@L3::::::::@@@@  @;UAz@@@LN@Lг%Ident; >>; >>@;>>;>>@@@!@@@L @@;>>;>>@@@@@@L%@@@@!vA@;'>>;(>>@@\@@@L3;);(;(;););););)@NE=@@@4@@@  @;HVAe гh$Mode;=>>;>>>@o;A>>;B>>@@@w@@@L @@;I>>;J>>@@@~@@@@#tblA@;U>>;V>>@@@@@L3;W;V;V;W;W;W;W;W@/<4@7@,@@@  @;vWA" г%!t;i>>;j>>@@-@@@L@@;p>>;q>>@@@4@@@@@ఠ"v';~>>;>>@;XA@@{@@@MP@M3;;;;;;;;@.;3@6@+@@@ఐ$find;>?;>?@@@@@@@M@@@@M@@@M@@M@@M@@ఐ"id;>?;>?@@@@@@MQ@MQ@M0@@ఐo#tbl;>? ;>? @:@@@@@MQ@M!Q@M D@@9 @@HE@A@;>> @@డ#add!M;??;??@ ;??;??@@@a@@@G|@7@<@@@G{@@@@Gz@@Gy@@Gx@@Gw@3@0@@@s@@@M)@@@@MUO@M'@ @@@M(@@@M&@@M%@@M$@@M#3<<<<<<<<@@@@@@@ఐ+"id<??<??!@@@@@@MBP@MA@@డT$join$Mode<0??#<1??'@ <4??(<5??,@@@@@@D:@@@D9@@D8@@ @@@@@@MJ@@@MI@@MH<@@ఐ-!v><??7@@@@@@L@@@@L@@L@@LL@ML@M|@@ఐM!x<?8?><?8??@@@o@@@M@@ఐ3!y<?8?@Q@ʰR@@t@@@M@@ V@@@CWA@I@M^@A@[@[Z@r@ఠ)join_list<?C?I<?C?R@<YA@@@6@@@MJ@M@@@MI@M@@@MI@M@@MI@M3<<<<<<<<@@@@@@࣠@"liA<?C?S<?C?U@<ZA@@"3<<<<<<<<@/<?C?E<?C?t@@@@@  @@డ;h$List)fold_left<?C?X<?C?\@ =?C?]=?C?f@@!Ѱ@@@@8J@M@B@@M@@M@@6I@@@M @@M@@M@@M3========@.:R@1@2@@@@ఐ$join=#?C?g=$?C?k@L@@@@@@M@@@@M@@@M@@M@@M@@ఐN%empty==?C?l=>?C?q@@@@s@MJ@M@@@M4@@ఐr"li=T?C?rg@=h@@@@@Yi@@MA@sjA@I@Mq@A@n@nm@@ఠ'compose=f?v?|=g?v?@=[A@@@@@@NI@M@*(@@@N K@M@@@N$I@M53@@@NK@M@@@NI@M@@MI@M@@MI@M3========@@@@@@࣠@!mA=?v?=?v?@=\A@@13========@>=?v?x=??@@@@@  @@#envA=?v?=?v?@=]A@@<3========@!H@@@@@@@@డ#map!M=??=??@ =??=??@@@@@@H@@@@H@@@H@@H@@H @@@@@@dY@@M@i@@@Mb@@@M@@M@@M3========@8Dv@;@<@@@@డ!'compose$Mode=??=??@ >??>??@@@@@@D?@@@@D>@@@D=@@D<@@D;@@@@@@@@N @@@@N @@@N @@N @@N 6@@ఐ!m>*??>+??@w@@C@@>.??>/??@@@@@@N@@@N@@NN@@ఐ#env>B??@W@@Z@@@@[@A@I@N.@A@@@@ఠ&single>T??>U??@>m^A@@@@@@NVI@N0@o@N?I@N5@@@NTI@N6@@N7I@N1@@N2I@N/3>k>j>j>k>k>k>k>k@@@ @@@࣠@"idA>|??>}??@>_A@@$3>}>|>|>}>}>}>}>}@1>??>??@@@@@  @@$modeA>??>??@>`A@@/3>>>>>>>>@!;@@@@@@@@డh#add!M>??>??@ >??>??@@˰@@@,@@@NA@N@hS@@@N@lW@@@N>@@N=@@N<@@N;3>>>>>>>>@,8]@/@0@@@@ఐS"id>??>??@8@@s@@ఐL$mode>??>??@@@w@@ఐ%empty>??b@c@@L@N^@@@N]/@@Ij@@0@tkA@I@Nlr@A@o@on@@ఠ)unguarded>??>??@?aA@@@@@@NI@Nn@8 @@@NK@N|@@@NI@Ns8 @@@NI@Nt@@NuI@No@@NpI@Nm3????????@@@@@@࣠@#envA?0???1??@?IbA@@.3?1?0?0?1?1?1?1?1@;?8???9?@9@@@@@  @@"liA?D???E??@?]cA@@93?E?D?D?E?E?E?E?E@!E@@@@@@@@డ=$List&filter?Z???[??@ ?^???_?@@@@@!a@%/%@@@(H@@(G@_ @@@(FW@@@(E@@(D@@(C@/"^-)-)/#^-)-X@@/!o@#@@@@l@@@N@@N~@ut@@@N}mx@@@N{@@Nz@@Ny3????????@GS@J@K@@@@࣠@"idA??@??@@?dA@@3????????@@@@@@@డ>!>??@$??@%@@!a@@d@@@0@@/@@.,%greaterthanBA'i@@@@'i'j@@'hT@@@@>@@@NM@N@@@@N@@N@@N3????????@G>@5@6@@@@డ $rank$Mode??@ ??@@ ??@??@@@@@@@D7>@@@D6@@D5@K@L @@@@@@N>@@@N@@N,@@ఐ$find@ ?@@ ?@@@@@@@@N@@@@N@@@N@@N@@NH@@ఐ"id@&?@@'?@@R@@U@@ఐ#env@3?@@4?@"@@@0b@@@7?@@8?@#@@0@@@Nh@@V@@qi@@డq$rank$Mode@M?@&@N?@*@ @Q?@+@R?@/@@f@@@@@@N?L@@@N@@N@@ภ%Guard@f?@0@g?@5@;@@@BE@@A@@@@@b@@@N@@"@@O@N@@ @@ @@@NN@N@@x?@@y?@6@@@k@@@N@@NL@NL@N@@ఐL"li@?@7U@V@@@@6W@@s@aXA@I@N_@A@\@\[@r@ఠ)dependent@@;@A@@;@J@@eA@@@@@@OA=A=A>A>A>A>A>@0'@@@@@@డx$rank$ModeAT@T@oAU@T@s@ AX@T@tAY@T@x@@m@@@ @@@O @S@@@O@@O#@@ఐ$findAp@T@zAq@T@~@u@@@~@@@O-@w@@@O,t@@@O+@@O*@@O)?@@ఐj"idA@T@A@T@@I@@L@@ఐˠ#envA@T@A@T@@@@Y@@A@T@yA@T@@@@@@O;_@@M@@h`@@డ$rank$ModeA@T@A@T@@ A@T@A@T@@@ʰ@@@ e@@@OL@@@@OK@@OJ@@ภ&IgnoreA@T@A@T@@@@@@@@OY@@ @@O@OR@@ @@l@@@O\N@O@A@T@dA@T@@@@-x@@@O @@O L@O`L@O^@@ఐ"liA@T@@ܰ@@A@@@@5@$A@PI@Of"@A@@@5@ఠ&remove B@@B@@@BiA@@@@@@Om@ @Ok@@@Ol Ġ@@@Oj@@Oi@@OhI@Og3BBBBBBBB@W~w@x@y@@@డ&remove!MB%@@B&@@@ B)@@B*@@@@@@@@G@ @@@G @@@G@@G@@G@@@@6&@A@B>@@@@@)@ఠ$takeàBK@@BL@@@BdjA@@@@@@OI@Oo@ [@@@OI@Ot@ `@@@OI@Oy@ ! @@OI@O@@@OI@Oz@@O{I@Ou@@OvI@Op@@OqI@On3BwBvBvBwBwBwBwBw@dx@y@z@@@࣠@"idAB@@B@@@BkA@@93BBBBBBBB@FB@@B@@@@@@@  @@#envAB@@B@@@BlA@@D3BBBBBBBB@!P@@@@@@@@@ఐ Š$findB@@B@@@@@@ @@@O@ @@@O @@@O@@O~@@O}3BBBBBBBB@#/i@&@'@@@@ఐJ"idB@@B@@@/@@@@ఐC#envB@@B@@@@@@@.@@w@@ఐꠐ&removeB@@B@@@q@@@ l@@@O@ @@@O @@@O@@O@@O;@@ఐ"idC@@C@@@g@@H@@ఐ{#envC@@C@@@R@@U@@-@@V@@C@@@@@@@@O^@A@I@O@A@@@@ఠ+remove_listǠC/@@C0@@@CHmA@@@= @@@PK@O@@@OI@O@  S@O@@@PI@OI@O@@OI@O@@OI@O3CLCKCKCLCLCLCLCL@ @@@@@࣠@!lAC]@@C^@@@CvnA@@*3C^C]C]C^C^C^C^C^@7Ce@@CfAA<@@@@@  @@#envACq@@Cr@A@CoA@@/3CrCqCqCrCrCrCrCr@!A@@@@@@@@డA$List)fold_leftCAACAA @ CAA CAA@@(Z@@@@MK@O@[@@O@@O@@=sb@@@O @@O@@O@@O3CCCCCCCC@+7\@.@/@@@@࣠@#envACAACAA@CpA@@!3CCCCCCCC@@@@@@@"idACAA CAA"@CqA@@3CCCCCCCC@%3@@@@@@@@డ&remove!MCAA&CAA'@ CAA(CAA.@@@@@ [@@@P@ @@@O @@@O@@O@@O3CCCCCCCC@*6@-@.@@@@ఐ="idCAA/CAA1@ @@@@ఐY#envDAA2DAA5@C@@v@@5@@ @@@P"@DAADAA6@@@@@@O@@OL@P)L@P'e@@ఐ#envD#AA7D$AA:@@@@@ఐ֠!lD0AA;@@@@@@@@A@I@P/@A@@@@@ @ @@  A@  /@ W C@ W @ $k@@@&@R@5@S@ @)"@#@$@@3DRDQDQDRDRDRDRDR@,@@DX==DYA=A@@$3DXDWDWDXDXDXDXDX@@@@!tI;@@BkA@@@@@Dc88Dd88@@@@D|rAA@&single@)!t@@@P0@!!t@@@P1@@@P2@@P3@@P4@D88D88@! J Create an environment with a single identifier used with a given mode. D88D99@@@@@@@DsA@%empty:@@@P5@D99!D99.@! * An environment with no used identifiers. D9/91D9/9`@@@@@@@DtA@$find@*.!t@@@P6@_@@@P7!!t@@@P8@@P9@@P:@D9b9dD9b9@!Ӑ V Find the mode of an identifier in an environment. The default mode is Ignore. D99D99@@@@@@@DuA@)unguarded@@@@P;@D\*c!t@@@P<@@@P>Dg*n!t@@@P?@@@PA@@PB@@PC@D99D9:@" o unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e. E ::E :h:@@@@@@@E"vA@)dependent@@@@PD@D*!t@@@PE@@@PGD*!t@@@PH@@@PJ@@PK@@PL@E0::E1::@"= Y dependent e l: the list of all identifiers in l that are used in e (not ignored). E>::E?;;%@@@@@@@EWwA@$join@@@@PM@@@@PN@@@PO@@PP@@PQ@EW;';)EX;';?@@EpxA@)join_list@D٠ @@@PR@@@PT@@@PU@@PV@Eo;@;BEp;@;]@"| > Environments can be joined pointwise (variable per variable) E};^;`E~;^;@@@@@@@EyA@'compose@"!t@@@PW@3@@@PX7@@@PY@@PZ@@P[@E;;E;;@" j Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise E;;E< <7@@@@@@@EzA@&remove@++!t@@@P\@\@@@P]`@@@P^@@P_@@P`@E<9<;E<9@@@@ @@@@@@@G;@;FG;@;O@б@г$listG;@;TG;@;X@г!tG;@;RG;@;S@@3GGGGGGGG@5@A@@@@@г!tH;@;\@@ @@ @@@@%H@@@@@@H;;H;;@б@г$ModeH#;;H$;;@H';;H(;;@@@3H'H&H&H'H'H'H'H'@3@A @@б@г!tH5;;H6;;@@ @@г!tH>;;@@@@ @@@@@@%NHS@@@@@@$HT<9@A @@б@г!tHr<9@A @@б@гȠ!tH<<H<<@@ @@В@г͠$ModeH<<H<<@԰H<<H<<@@@!@@@гנ!tH<<@@+@@@,@@-#@@.6@@@@%H䐠@@@@@@;꠰ڠڰH<=H<=@б@г۠$listH<=H<=@гࠡ%IdentH<=H<=@H<=H<=@@@3HHHHHHHH@^/-@A @@@ @@б@г점!tI <=!I<="@@@@г!tI<=&@@@@ @@  @@@@&&I+@@@@@@%I,=l=rI-=l=w@б@г!tI6=l=zI7=l={@@3I5I4I4I5I5I5I5I5@81/@A@@б@г!tIC=l=ID=l=@@ @@г$boolIL=l=@@@@ @@@@@@@@3INIMIMINININININ@@A3IPIOIOIPIPIPIPIP@@@IU88IV==@@G@C@B@H@I@D@E@F@J@K@L@A@@ ;@@@Is88@!@@Iu88@@$@ఠ*remove_pat۠IABAFIABAP@IA@@@D/general_pattern@SZ@@@ShJ@R@ x=@@@SRJ@R@@@SQJ@R@@RJ@R@@RJ@R3IIIIIIII@ M @JHA@CA@@@@@rp@[Y@75@@@@@@@M @@@࣠@#patAIABAQIABAT@IA@@F3IIIIIIII@.SIABABIA[A@@@@@  @@#envAIABAUIABAX@IA@@M3IIIIIIII@!]@@@@@@@@డ +remove_list#EnvIA[A]IA[A`@ IA[AaIA[Al@@@@@@S;@@@S:@q@@@S9t@@@S8@@S7@@S6@ܰ@@@@@@SF@@@SE@@@@SD@@@SC@@SB@@SA3JJJJJJJJ@?K@B@C@@@@డH~0pat_bound_identsJ1A[AnJ2A[A~@@!k@@@@ C@@E@@@@Ġ@@@SY@@@SX@@@SW@@SV9@@ఐ#patJeA[AJfA[A@@@F@@JiA[AmJjA[A@@ao@@@ST@@@SSM@SqN@SaT@@ఐ#envJA[A@]@@`@@@@a@A@J@Sw@A@@@䠰@ఠ.remove_patlistߠJAAJAA@JA@@@Dt@S@@@SL@S@@@SJ@Sy@@@@SJ@S~J@S@@SJ@Sz@@S{J@Sx3JJJJJJJJ@70@1@2@@@࣠@$patsAJAAJAA@JA@@+3JJJJJJJJ@8JAAJAA@@@@@  @@#envAJAAJAA@JA@@-3JJJJJJJJ@!B@@@@@@@@డIU$List*fold_rightJAAJAA@ JAAJAA@@@@!a@&@#acc@&@@'@@'@g@@@'@  @@'@@'@@'@::@@:^@#@@@@r@hL@S@@S@@S@|{@@@S@  @@S@@S@@S3KKKKKKKK@FRu@I@J@@@@ఐ*remove_patK+AAK,AA@x@@@@@@S@@@@S@@@S@@S@@S@@ఐ$patsKFAAKGAA@m@@+@@ఐ#envKSAA@4@@7@@k@@B8@A@J@S@A@@@A+)term_judgJKcG)G.KdG)G7@@;@@IoA@(!t@@@S"N!t@@@S@@S@@@@KvG)G)KwG)GI@@@@KA@@Aб@г$ModeKG)G:KG)G>@KG)G?KG)G@@@@"3KKKKKKKK@@@0;@@@A8@@@S@S@@@@#@@@ @@@@г*#EnvKG)GDKG)GG@1KG)GH/@0@@81@@A%2@@4@@43@3KKKKKKKK@@@A+)bind_judgKKGJGOKGJGX@@;@@IA@(!t@@@S@"!t@@@S"!t@@@S@@S@@S@@@@KGJGJKGJGs@@@@KA@@Aб@г$ModeKGJG[KGJG_@"KGJG`KGJGa@@@*3KKKKKKKK@Z7;@@@A?@@@S@S@@@@"@@@@@@@б@г1#EnvKGJGeKGJGh@8KGJGiLGJGj@@@@@@г;#EnvL GJGnL GJGq@BLGJGr@@A@@I-B@@R.C@@[/7D@@F@@FE@3LLLLLLLL@0@@@ఠ&optionL!GuGyL"GuG@L:A@Ш!a@б@б@А!a @S3L3L2L2L3L3L3L3L3@R@@L9GuGL:GuG@@гߠ)term_judgLBGuGLCGuG@@ @@@S@@@@@S@@б@гK&optionLTGuGLUGuG@А!a'$L[GuGL\GuG@@@-@@@S+ @@г)term_judgLiGuGLjGuG@@ @@@S8@@@@@S;@@@,@@S>LuGuG @@F@@SCLzGuGA@[ZA@@@@O@SH@@@S@@S@; @@@S*@@@S@@S@@S@@SZ@࣠@!fALGGLGG@LA@@@n@Sh@@@T @@T 3LLLLLLLL@qLGuGuLGG@@@@@@@!oALGGLGG@LA@@m@@@T3LLLLLLLL@,@"@@@T@@T@(@)@@@@@@!mALGGLGG@LA@@k@@@T 3LLLLLLLL@*<@@@T@%@&@@@@@@ఐ6!oLGGLGG@@@N@@@T%3LLLLLLLL@)@@@T@#@$@@@Ġ$NoneMGGMGG@;LQL^L[@@W@@@@AA@AM@@LT@@ @@k@@@T*3M M M M M M M M @@@@@p@@@T+@@@డ#%empty#EnvMGGMGG@ M!GGM"GG@@@@@S@} @@@@@T4@Ġ$SomeM6GGM7GG@;L6@LA@AA@AMG@@Lఠ!vMAGGMBGG@MZA@@S@T/W@@@@@@@@T0\@@@@@T1`@@@ఐ!fMYGGMZGG@@@@#@@@T9@@T83M^M]M]M^M^M^M^M^@r&@ @!@@@@ఐ-!vMnGGMoGG@ @@,@@ఐ!mM{GG@@@@@@TKR@TMR@TL%@@.@@^&@@@AMGG@@@@@TV@MGG@@@@Y@@@Ts@@Tr@L@@@Tq;@@@Tp@@To@@TnL@Th@A@@@k@ఠ$listMGHMGH@MA@Ш!a@б@б@А!a @T3MMMMMMMM@@@@S@@@S@@S@ @@@Sq@@@S@@S@@S@@@@MGHMGH@@г})term_judgMGHMGH@@ @@@T$@@@*@@T'@@б@гMc$listMGH%MGH)@А!a:7MGH"MGH$@@@@@@@T> @@г)term_judgNGH-NGH6@@ @@@TK@@@@@TN@@@,@@TQNGH  @@Y@@TVNGH A@nmA@@@@b@TH@@@T@@T@; @@@T*@@@T@@T@@T@@Tm@࣠@!fAN9H9H?N:H9H@@NRA@@@@Th@@@T@@T3NAN@N@NANANANANA@NHGGNIHIH@@@@@@@"liANTH9HANUH9HC@NmA@@m@@@T3NYNXNXNYNYNYNYNY@,@"@@@T@@T@(@)@@@@@@!mANnH9HDNoH9HE@NA@@ @@@T3NrNqNqNrNrNrNrNr@*<@@@T@%@&@@@@@@డL$List)fold_leftNHIHMNHIHQ@ NHIHRNHIH[@@3^@@@@,@@@U2O@U O@T@cO@T @@T@@T@ @H~ @@@T@@T@@T@@T3NNNNNNNN@6ED@@@T@?@@@@@@࣠@#envANHIHaNHIHd@NA@@+3NNNNNNNN@@@@@@@$itemANHIHeNHIHi@NA@@13NNNNNNNN@(=@@@@@@@@డ%$join#EnvNHIHmNHIHp@ NHIHqNHIHu@@@T@@@S @Y@@@S\@@@S@@S@@S@ @ @@@b@@@U@g@@@Uj@@@T@@T@@T3OOOOOOOO@6Bi@9@:@@@@ఐX#envOHIHvOHIHy@B@@@@ఐ점!fO"HIH{O#HIH|@ư@@@N@@@U@@U$@@ఐj$itemO4HIH}O5HIH@.@@1@@ఐ֠!mOAHIHOBHIH@@@@@@U#T@U%T@U$G@@ONHIHzOOHIH@@@@@U @U&T@U"Q@@u @@S@U T@O[HIH\O\HIH@@@@@@T@@TP@U-P@U+@@డ&G%empty#EnvOsHIHOtHIH@ OwHIHOxHIH@@V@@P@U/@@ఐ6"liOHIH?@@@@Ie@@@TP@U1P@U0@@I@@@OH9H;K@@@@[@@@UO@@UN@c@@@UM@@@UL@@UK@@UJL@UDb@A@_@_^@栰@ఠ%arrayOHHOHH@OA@Ш!a@б@б@А!a @Uk3OOOOOOOO@!@@@T@@@T@@T@ @@@T@@@T@@T@@T@-@.@@OHHOHH@@г)term_judgOHHOHH@@ @@@Ul$@@@*@@Um'@@б@гOt%arrayOHHOHH@А!a:7OHHPHH@@@@@@@Uo> @@г)term_judgP HHPHH@@ @@@UpK@@@@@UqN@@@,@@UrQPHH @@Y@@UsVPHHA@nmA@@@@b@UH@@@U@@U@; @@@U*@@@U@@U@@U@@Um@࣠@!fAP?HHP@HH@PXA@@@@Uh@@@U@@U3PGPFPFPGPGPGPGPG@PNHHPOHI*@@@@@@@"arAPZHHP[HH@PsA@@m@@@U3P_P^P^P_P_P_P_P_@,@"@@@U@@U@(@)@@@@@@!mAPtHHPuHH@PA@@@@@U3PxPwPwPxPxPxPxPx@*<@@@U@%@&@@@@@@డN%Array)fold_leftPHHPHH@ PHHPHH@@@@#acc@V@!a@V @@W@@W@ @%arrayJ@@@W@@W@@W@@W@)array.mli    @@-Stdlib__ArrayY@(#@@@@R@@@XO@XO@Xi@O@Xk @@Xm@@Xl@ @! @@@Xj@@Xh@@Xg@@Xf3PPPPPPPP@Vej@@@U@_@`@@@@࣠@#env+APHHPHH@PA@@+3PPPPPPPP@@@@@@@$item,APHHPHI@Q A@@13PPPPPPPP@(=@@@@@@@@డ'$join#EnvQ HIQ HI@ Q HI QHI @@&@@@z@@@X@@@@X@@@X@@X@@X3QQQQQQQQ@(4[@+@,@@@@ఐJ#envQ+HIQ,HI@4@@q@@ఐ!fQ:HIQ;HI@ذ@@@`@@@X@@X$@@ఐ\$itemQLHIQMHI@.@@1@@ఐ蠐!mQYHIQZHI@@@@@@XT@XT@XG@@QfHIQgHI@@@@@X@XT@XQ@@g @@S@XT@QsHHQtHI@@@@@@X|@@X{P@XP@X@@డ(_%empty#EnvQHIQHI!@ QHI"QHI'@@n@@P@X@@ఐH"arQHI(Q@#R@@@@@XzP@XP@X@@[@@@QHH]@@@@m@@@X@@X@Ơu@@@X@@@X@@X@@XL@Xt@A@q@qp@@@QI,I0QI,I6@@@7G!t@@@Xv@@@X@@X3QQQQQQQQ@*@@@U}@@@U|@@U@ @@@U@@@Uy@@U@@U~@6@7@@@&single-'&@RA@&@@@X#@@@X@@X1б@г1%IdentRI,I9RI,I>@8R I,I?R I,I@@@@@@@@X9 @@г>)term_judgRI,IDRI,IM@@F@@@XE@@@@@XH@@XWA@@@V@@@YS@@@Y@@YR@డ)&single#EnvR3I,IPR4I,IS@ R7I,ITR8I,IZ@@@  @@@S@  @@@S@@@S@@S@@S@   @б@г7UTQN@ @@@YM@гML@@@@YI@@ @@YH@4/A@@@@@@Y&@@@Y%@@Y$L@Y!@A@RrI,I,;@@<@@@R}I[I_R~I[Ii@@@Q8!t@@@Y@@@@Y?@2@@@Y>6@@@Y=@@Y<@@Y;3RRRRRRRR@@@@@@*remove_ids. @RA@@@@Y:@@@Y9@@@@Y8@@@Y7@@Y6@@Y53б@г3$listRI[ItRI[Ix@г8%IdentRI[IlRI[Iq@?RI[IrRI[Is@@@G@@@Y(9 @@@O@@@Y*>@@б@гI)term_judgRI[I|RI[I@@Q@@@Y+L@@гQ)term_judgRI[IRI[I@@Y@@@Y,X@@@@@Y-[@@@$@@Y.^0 @@yxA@@@wv@@@YF@@@YE@s@@@YDr@@@YC@@YB@@YAq@࣠@#ids0AS IIS II@S+A@@R8@@@Y_@@@Y^3SSSSSSSS@S$I[I[S% II@@@@@@@!f1AS0 IIS1 II@SIA@@@@@Yj3S5S4S4S5S5S5S5S5@/%$@@@Y]@@@Y\@-@.@@@@@@!m2ASL IISM II@SeA@@@@@Yu3SPSOSOSPSPSPSPSP@,"@@@Yi@&@'@@@@ @@డ*<+remove_list#EnvSh IISi II@ Sl IISm II@@ r@@@ d r@@@Y@@@Y~@ @@@Y} @@@Y|@@Y{@@Yz3S~S}S}S~S~S~S~S~@/>@@@Yt@8@9@@@@ఐ#idsS IIS II@Y@@  @@@Y@@@YP@YP@Y@@ఐ~!fS IIS II@X@@z@@@Y0@@ఐr!mS IIS II@:@@Y@@@YQ@YQ@YF@@S II@@ 4@@@Y@YQ@YO@@i@@d@@@YP@YU@S II@б@гǠ)(гȠ%$`!@@@@YG@@֠@@@YI@б@г@@@@YJ@г@@@@YK@@ @@YL@@@@YM@/A@@@@@@Y@@@Y@@@@Y@@@Y@@Y@@YL@Y@A@@@@@T#"IIT$"II@@@S@@@Y@@@Y@@@Y@@Y3T1T0T0T1T1T1T1T1@@@@@@$join3@TRA@@@@Y@@@Y@@@Y@@Y&б@г&$listTS"IITT"II@г+)term_judgT\"IIT]"II@@3@@@Y-@@@;@@@Y2 @@г7)term_judgTm"IITn"II@@?@@@Y>@@@@@YA@@TSA@@@RQ@@@Y@@@YP@@@Y@@YO@࣠@"li5AT#IIT#II@TA@@T  :@@@Y@@@Y3TTTTTTTT@heT"IIT#IJ"@@@@@@@!m6AT#IIT#II@TA@@ F@@@Z3TTTTTTTT@-#"@@@Y@@@Y@+@,@@@@@@డ+)join_list#EnvT#IIT#II@ T#IIT#IJ@@@t ?@@@S$@@@S# C@@@S"@@S!@qn`@@@ L@@@Z @@@Z  P@@@Z @@Z3TTTTTTTT@;J @@@Z@D@E@@@@డSl$List#mapU#IJU#IJ @ U#IJ U#IJ@@@@!a@&!b@&@@'@N@@@'N@@@'@@'@@'@DD@@DW@% @@@@@@@Z5O@Z @@@ZO@ZV>V?V?V?V?V?@KaZ@[@\@@@"<<;@V`A@@@@Zo@@@@Zn@@@Zm@@Zl@@Zk*б@г*)term_judgVb*KKVc*KK'@@2@@@Za%@@б@г2$ModeVr*KK+Vs*KK/@9Vv*KK0Vw*KK1@@@A@@@Zb: @@г?)term_judgV*KK5V*KK>@@G@@@ZcF@@@@@ZdI@@@*@@ZeL- @@baA@@@`@@@Zy@_@@@Zx\@@@Zw@@Zv@@Zu[@࣠@!f=AV+KAKGV+KAKH@VA@@ P@@@Z3VVVVVVVV@olV*KKV+KAK@@@@@@@*inner_mode>AV+KAKIV+KAKS@VA@@3@@@Z3VVVVVVVV@* @@@Z@$@%@@@@@@࣠@*outer_mode?AV+KAK[V+KAKe@VA@@ w@@@Z3VVVVVVVV@,"@@@Z@&@'@@@@ @@ఐO!fV+KAKiV+KAKj@+@@K@@@Z3VVVVVVVV@' @@@Z@!@"@@@@డ44'compose$ModeW+KAKlW+KAKp@ W+KAKqW+KAKx@@@@@@@@Z@@@@Z@@@Z@@Z@@Z+@@ఐV*outer_modeW/+KAKyW0+KAK@5@@@@@ZQ@ZQ@Z?@@ఐ*inner_modeWC+KAKWD+KAK@`@@@@@ZQ@ZQ@ZS@@WN+KAKk@@ @@@Z@ZQ@Z^@@e@@ @@@ZP@Zd@W_+KAKW@@ @@@ZN@Z@Wg+KAKC@б@г@@@@Zz @б@г  A@@@@Z{@г@"@@@Z|@@ @@Z}@@@@Z~@%A@@@^@@@Z@]@@@ZZ@@@Z@@Z@@ZL@Z@A@@@Z@@W1LrLvW1LrLz@@@ @@@[@ S@@@[ W@@@[@@[@@[3WWWWWWWW@vt@@q@@@">>@@WA@@@@[@@@@[@@@[@@Z@@Z(б@г()bind_judgW1LrL}W1LrL@@0@@@Z%@@б@г0)term_judgW1LrLW1LrL@@8@@@Z3@@г8)term_judgW1LrLW1LrL@@@@@@Z?@@@@@ZB@@@#@@ZE& @@YXA@@@W@@@[ @V@@@[ U@@@[ @@[ @@[T@࣠@&binderBAX2LLX2LL@X/A@@ m@@@[3XXXXXXXX@heX"1LrLrX#2LL@@@@@@@$termCAX.2LLX/2LL@XGA@@ @@@[)3X3X2X2X3X3X3X3X3@)@@@[@#@$@@@@@@$modeDAXF2LLXG2LL@X_A@@ @@@[43XJXIXIXJXJXJXJXJ@(@@@[(@"@#@@@@ @@ఐK&binderX^2LLX_2LL@(@@G@@@[93XaX`X`XaXaXaXaXa@' @@@[3@!@"@@@@ఐ1$modeXt2LLXu2LL@@@ @@@[OP@[QP@[P@@ఐa$termX2LLX2LL@?@@]@@@[S.@@ఐY$modeX2LLX2LL@8@@ :@@@[bQ@[dQ@[cD@@X2LL@@ @3@[N@[eQ@[aN@@U@@ F@@@[fP@[MT@X2LL@б@г@@@@[ @б@г@@@@[@г s@@@@[@@ @@[@@@@[@#A@@@7@@@[@6@@@[5@@@[@@[@@[L@[@A@@@5A@X9MuM}X9MuM@@@WM*expression@@@[ @@@[@@[3YXXYYYYY@MK_@b@H@@@*expressionE@Y!A@@@@[@@@[@@[б@г)TypedtreeY 9MuMY!9MuM@&Y$9MuMY%9MuM@@@.@@@[' @@г,)term_judgY19MuMY29MuM@@4@@@[3@@@@@[6@@FEA@@@D@@@]A@@@]@@]@@࣠@#expXAYN:MMYO:MM@YgA@@WY@@@]p3YTYSYSYTYTYTYTYT@geu@x@b-function_bodyF@G@@@|@L@\O@@@|L@\@@\M@[@Y~zzYzz#@@YA*binding_opG@W*binding_op@@@[0@@@[@@[@Y||Y||@@YA/class_structureH@W/class_structure@@@[C@@@[@@[@Y}A}EY}A}T@@YA+class_fieldI@X+class_field@@@[V@@@[@@[@Y}}Y}}@@YA0class_field_kindJ@X0class_field_kind@@@[i@@@[@@[@YmqYm@@YA&modexpK@X&+module_expr@@@[|@@@[@@[@Y/3Y/9@@YA$pathL@$Path!t@@@[@@@[@@[@YfjYfn@@Z A)structureM@XN)structure@@@[@@@[@@[@ZZ@@ZA.structure_itemN@Xa.structure_item@@@\ f@@@\ @@\@Z,Z,@@Z1A.module_bindingO@@Y?!t@@@\"@@@\!@X+module_expr@@@\#@@\ @@@\@@\@Z<e_cZ=e_q@@ZUA0open_declarationP@X0open_declaration@@@\/@@@\.@@\-@ZOvimZPvi}@@ZhA9recursive_module_bindingsQ@YϠ@Y?!t@@@\L@@@\K@X+module_expr@@@\M@@\J@@@\I@@@\H@@\G@Zx|Zy|@@ZA*class_exprR@X*class_expr@@@\Y*@@@\X@@\W@ZZ@@ZA5extension_constructorS@X5extension_constructor@@@\e=@@@\d@@\c@ZZ@@ZA.value_bindingsT@Y(rec_flag@@@\~@Z%Y-value_binding@@@\}@@@\| @@@\{@@\z@@\y@ZZ@@ZA$caseU@Y$case!k@\@@@\@2=@@@\@1!t@@@\@2M@@@\@@\@@\@@\@Z Z @@[A'patternV@YC/general_pattern!k@\@@@\@1!t@@@\2l@@@\@@\@@\@[@D[@K@@[A8is_destructuring_patternW@Yb/general_pattern!k@\@@@\Z@@@\@@\@[2RV[2Rn@@[6A@@@@@@ఐ⠐#exp[-:MM[.:MM@@@@]o@@@@V2@@@]x@]v3[6[5[5[6[6[6[6[6@ @@@(exp_desc[?:MM[@:MM@T@@T@@@]w @Ġ*Texp_ident[O;MM[P;MM@SGఠ#pthY[X;MM[Y;MM@[qA@@U@@@]3[\[[[[[\[\[\[\[\@&@@@@[c;MM[d;MM@@STSR@@@]@@@] @@[o;MM[p;MM@@SQ@@@]@@@&[u;MM@@T@@@]@@T@@@]@@@ఐ$path[<MM[<MM@@@@@@@_@@@_@@_3[[[[[[[[@X>7@8@9@@@@ఐE#pth[<MM[<MN@ @@@@@_P@_P@_@@# @@L@@@_@Ġ(Texp_let[=NN[=NN@Tఠ(rec_flagZ[=NN[=NN@[A@@U@@@]3[[[[[[[[@@@@ఠ(bindings[[=NN[=NN$@[A@@TU@@@]@@@]@ఠ$body\[=NN&[=NN*@[A@@V@@@]!@@@2[=NN+@@UB@@@]&@@UE@@@])@@@ఐ:">>[DNN[DNN@@@@T@@@_@S@@@_R@@@_@@_@@_3\\\\\\\\@QJ@K@LC<@=@>2+@,@-@@@@ఐv.value_bindings\DNN\DNN@z@@@z@@@_@xw@@@_@@@_t@@@_@@_@@_'@@ఐz(rec_flag\9DNN\:DNN@/@@@@@` R@` R@` ;@@ఐ(bindings\MDNN\NDNN@B@@@@@` @@@`R@`R@` S@@A@@@@@`W@@ఐa*expression\kDNN\lDNO@@@@w@@@`-t@@@`,@@`+n@@ఐ$body\DNO\DNO@t@@@@@`=R@`?R@`>@@  @@@@@`D@@t@@@Ġ*Texp_match\EO O\EO O@G@ఠ!e]\EO O\EO O@\A@@W@@@]3\\\\\\\\@p@@@ఠ%cases^\EO O\EO O#@\A@@GSGRGP@@@]@@@]@@@]@ఠ)eff_cases_\EO O%\EO O.@\A@@GXGhGW@@@]@@@]@@@]-@@\EO O0\EO O1@@GY@@@]5@@@F\EO O2@@V9@@@]:@@V<@@@]=@@@࣠@$modeA\LP"P-\LP"P1@] A@@@@@`V3\\\\\\\\@^W@X@YPI@J@K;4@5@6@@@@@@@@ఠ(pat_envs]MP5PA]MP5PI@](A@@VA@@@`Q@`d@@@`rQ@`[3]]]]]]]]@(7@@@`U@1@2@@@@ఠ)pat_modes]-MP5PK].MP5PT@]FA@@W W@@@`Q@`f@@@`sQ@`\@@/@@@/@@@`_%@డ[$List%split]QNPWPa]RNPWPe@ ]UNPWPf]VNPWPk@@@W3@!a@%t@!b@%v@@(@@@(@]@@@(@E@@@(@@(@@(@M&==M'==@@M%@@0+@@@(@q@U@@`h@@@`g@|{@@@`c@dc@@@`e@@`b@@`a3]]]]]]]]@|@@@@డ\$List#map]NPWPm]NPWPq@ ]NPWPr]NPWPu@@@@@@HT@@@`R@`@@@`R@`|@@@@`uR@`R@`R@`z@@`}@@@@`{@@@`y@@`x@@`w>@@࣠@!cA]NPWP{]NPWP|@^A@@3@@@@ఐ2$case]NPWP]NPWP@6@@@6A@@@`@/@@@`@.@@@`@+@@@`@@`@@`@@`3^ ^ ^ ^ ^ ^ ^ ^ @2[@)@*@@@@ఐ9!c^NPWP^NPWP@ @@h@@ఐ<$mode^*NPWP^+NPWP@ @@]@@@`U@`"@@=@@n#@^4NPWPv^5NPWP@@@y@@`S@`S@`@@ఐ%cases^FNPWP^GNPWP@K@@ 5@@@`S@`S@`@@^RNPWPl^SNPWP@@@@@`tR@`S@`=@@  @@@P@4@@`R@`qF@A@^fMP5P=@@@ఠ%env_e^qOPP^rOPP@^A@@@@@`Q@`3^y^x^x^y^y^y^y^y@_tm@n@oWP@Q@R@@@ఐ*expression^OPP^OPP@!@@@@@@`@@@`@@`@@ఐ!e^OPP^OPP@@@@@@`R@`R@`-@@డ]#$List)fold_left^OPP^OPP@ ^OPP^OPP@@C@@@@%@@@`R@`@R@`@@`@@`@ @X@@@`@@`@@`@@`Y@@డ<$join$Mode^OPP^OPP@ ^OPP^OPP@@"@@@&@@@`@@@`@@`v@@ภ&Ignore^OPP^OPP@%%@@@%@@@`@@ఐޠ)pat_modes_ OPP_ OPP@@@XI@@@`S@`S@`@@_OPP_OPP@@T@@@@@A@_OPP@@@@ఠ(eff_envs_*PPP_+PPP@_CA@@[@@@aKQ@a @@@aQ@a3_6_5_5_6_6_6_6_6@@@@@@@ఠ)eff_modes_DPPP_EPPQ@_]A@@m@@@aLQ@a@@@aQ@a@@*@@@*@@@a!@డ]$List%split_gQQ Q_hQQ Q@ _kQQ Q_lQQ Q@@@@@@E@-@@a@@@a@jO@@@a @R;@@@a@@a @@a 3________@P@@@@డ^$List#map_QQ Q_QQ Q#@ _QQ Q$_QQ Q'@@ @@@@J3@@@a]R@a>@@@aNR@a%@@p@@aR@a`R@aJR@a#@@a&@ @@@a$ @@@a"@@a!@@a >@@࣠@!cA_QQ Q-_QQ Q.@_A@@3@@@@ఐ $case_QQ Q2_QQ Q6@$@@@$A@@@a=@@@@a<@@@@a:@@@@a;@@a9@@a8@@a73________@2[@)@*@@@@ఐ9!c` QQ Q7` QQ Q8@ @@h@@ఐ*$mode`QQ Q9`QQ Q=@@@K@@@aSU@aR"@@=@@n#@`"QQ Q(`#QQ Q>@@@y@@a2S@aZS@aY@@ఐm)eff_cases`4QQ Q?`5QQ QH@8@@ #@@@a1S@a^S@a[@@`@QQ Q`AQQ QI@@@@@aR@a_S@a0@@ @@@#@ @@aaR@a@A@`TPPP@@@ఠ%eff_e`_RQMQY``RQMQ^@`xA@@@@@ayQ@ab3`g`f`f`g`g`g`g`g@3G@@A@B.'@(@)@@@ఐn*expression`xRQMQa`yRQMQk@@@@@@@af@@@ae@@ad@@ఐ렐!e`RQMQl`RQMQm@@@@@@avR@a|R@a{-@@డ_$List)fold_left`RQMQo`RQMQs@ `RQMQt`RQMQ}@@Ez@@@@'@@@aR@a@R@a@@a@@a@ @Z@@@a@@a@@a@@a~Y@@డ=$join$Mode`RQMQ~`RQMQ@ `RQMQ`RQMQ@@$@@@(@@@a@@@a@@av@@ภ&Ignore`RQMQ`RQMQ@'@@@'@@@a@@ఐ)eff_modes`RQMQ`RQMQ@@@ZؠI@@@aS@aS@a@@aRQMQnaRQMQ@@T@@@@@A@a RQMQU@@డ7)join_list#EnvaSQQaSQQ@ aSQQaSQQ@@ L@@@@@@a@@@a@@@a@@a3a(a'a'a(a(a(a(a(@@@@@@@ภ"::a7TQQa8TQQ@Vנడ8)join_list#EnvaGTQQaHTQQ@ aKTQQaLTQQ@@ |@@@@@@a@@@a@@@a@@a0@@ภ-acTQQadTQQ@Wఐ%env_eamTQQanTQQ@4@@@@@aR@aR@aR@aN@ఐr(pat_envsaTQQaTQQ@@@`@@@aR@aR@aa@@aTQQaTQQ@@0@@@aR@aj@@aTQQaTQQ@@@@@aQ@a@aR@av@ภqaTQQaTQQ@WGఐR%eff_eaTQQaTQQ@@@Q@aQ@aQ@a@ఐ(eff_envsaTQQaTQQ@W@@a*@@@aQ@aQ@a@@aTQQaTQQ@@a39@@@aQ@a@@aTQQaTQQ@@z@@@@aQ@a@@@@s@@@aQ@a@@@|@@@@@@l@@@ @aLP"P(aTQQ@@D@Ġ(Texp_foraUQRaUQR @T@aUQR aUQR @@T@@@]3aaaaaaaa@@@@@bUQRbUQR@@T@@@] @ఠ#low`bUQRbUQR@b)A@@]@@@]@ఠ$highabUQRbUQR@b7A@@]@@@]%@@b(UQRb)UQR@@T2@@@]-@ఠ$bodybb4UQRb5UQR#@bMA@@]4@@@];@@@Fb<UQR$@@[@@@]@@@[@@@]C@@@ఐ$joinbL]RRbM]RR@ T@@@*)@@@a@@@a(@@@a@@a3bXbWbWbXbXbXbXbX@%SL@M@NF?@@@A1*@+@,@@@@ภ"::bk^RRblaSbSiAX ఐ ."<<bw^RSbx^RS @ @@@ J@@@b$@ I@@@b# F@@@b"@@b!@@b ,@@ఐ *expression(b^RS@ )*@@@ @@@bB @@@bA@@b@B@@ఐ#lowb^RSb^RS@J@@ @@@bRT@bTT@bSV@@G @@ @@@bYZ@@ภ+Dereferenceb^RS b^RS@;9(@@@DE@@A9@@9@@@)@@@bhk@@\@@ @@@boo@ภfb_SS eAXoఐ "<<b_SS0b_SS2@ $@@@ @@@b@ @@@b @@@b@@b@@b@@ఐ *expression'b_SS*@ )@@@ @@@b @@@b@@b@@ఐ$highc _SS+c _SS/@@@ @@@bT@bT@b@@F @@ @@@b@@ภ+Dereferencec"_SS3c#_SS>@d@@@*@@@b@@Y@@ @@@b@ภȰc2`S@SHAXѠఐ "<<c=`S@SXc>`S@SZ@ @@@ @@@b@ @@@b @@@b@@b@@b@@ఐ O*expression'cY`S@SR@ )@@@ d@@@c a@@@c@@c@@ఐ9$bodycm`S@SScn`S@SW@@@ {@@@c"T@c$T@c#@@F @@ y@@@c) @@ภ%Guardc`S@S[c`S@S`@#@@@*~@@@c8/@@Y@@ M@@@c?3@ภ"[]caSbSh*AY@+A@bq@@@b@@@bP@cNE@@o5A@c{@@@b@@@bP@bO@@?A@c@@@b@@@bP@bY@@c]RRJ@@@@@b@@@bP@bd@@tT@@e@Ġ-Texp_constantcbSjSpcbSjS}@V)@cbSjS~cbSjS@@V+@@@]@@@ @@].@@@]@@]1@@@]@@@ఐ %emptyccSSccSS@ @@=@Ġ(Texp_newcdSScdSS@O^ఠ#pthccdSScdSS@dA@@Of@@@]3cccccccc@@@@@ddSSddSS@@OhOf@@@]@@@] @@ddSSddSS@@Og@@@]@@@&ddSS@@]o@@@]@@]r@@@]@@@ఐ ܠ"<<d%jTT#d&jTT%@ n@@@ @@@cf@ @@@ce @@@cd@@cc@@cb3d2d1d1d2d2d2d2d2@C<@=@>@@@@ఐ `$pathdDjTTdEjTT@ d@@@ d@@@c _@@@c@@c@@ఐa#pthdYjTTdZjTT"@$@@ {@@@cR@cR@c.@@  @@ w@@@c2@@ภ+DereferencedpjTT&dqjTT1@@@@+j@@@cA@@3@@B@Ġ,Texp_instvardkT2T8dkT2TD@Oఠ)self_pathddkT2TFdkT2TO@dA@@O@@@]3dddddddd@ X@@@ఠ#pthedkT2TQdkT2TT@dA@@O@@@]@ఠ)_inst_varfdkT2TVdkT2T_@dA@@OO@@@]@@@]!@@@2dkT2T`@@^ @@@]&@@^@@@])@@@ఐ$joindlTdTldlTdTp@˰@@@@@@c@@@c@@@c@@c3dddddddd@ PI@J@KB;@<@=5.@/@0@@@@ภwdlTdTrdlTdTAZఐ"<<dlTdTdlTdT@ 6@@@@@@c@@@@c@@@c@@c@@c+@@ఐ %$path(e lTdTv@ (*@@@ (@@@c #@@@c@@cA@@ఐ)self_pathelTdTwelTdT@I@@ ?@@@dT@dT@dU@@G @@ ;@@@d Y@@ภ+Dereferencee4lTdTe5lTdT@v@@@,.@@@dh@@Z@@@@@d#l@ภڰeDlTdTcAZఐ k$path eOlTdT@ n @@@ n@@@d> i@@@d=@@d<@@ఐʠ#ptheclTdTedlTdT@@@ @@@dNR@dPR@dO@@* @@ @@@dU@ภAZ@A@d۠R@@@d4@@@d5P@dd@@>A@d\@@@c@@@cP@d3@@elTdTq@@hg@@@c@@@cP@c@@@@ @Ġ*Texp_applyemTTemTT@Vqঠ(exp_descemTTemTT@_ Ġ*Texp_identemTTemTT@]@emTTemTT@@_r@@@]3eeeeeeee@ @@@@emTTemTT@@]]@@@]@@@] @ఠ"vdgemTTemTT@eA@@]@@@]@@@&emTT@@_4@@@] @@@emTTemTT@@`@@@]P@](@Ġ[emTTemTTA[@@ emTT@@V@@@^;@@Ġ#ArgfmTTfmTT@a ఠ#arghf mTTf mTT@f#A@@a @@@^ S@@@@@V@@@^W@@* @@@$@ @@^^@Ġ[5A[@@6A@e@V@@@^@V@@@^@@^@@@^u@@@f4mTTH@@V@V@@@^@V@@@^@@^@@@^@@@fFmTT@@_@@@^@@_@@@^@@ఐd&is_reffWnTTfXnTT@bK@@@d.@@@drd+@@@dq@@dp3f_f^f^f_f_f_f_f_@ +@@`Y@Z@[@@@@ఐ"vdfqnTTfrnTT@@@dJ@@@dyP@d{P@dz@@% @@V@@@d|P@dx@ఐA"<<ftUSUhftUSUj@Ӱ@@@]@@@d@\@@@dY@@@d@@d@@d~8@@ఐ *expressionftUSUYftUSUc@ =@@@ @@@d @@@d@@dO@@ఐ#argftUSUdftUSUg@W@@ @@@dR@dR@dc@@  @@ @@@dg@@ภ%GuardftUSUkftUSUp@&l@@@-@@@dv@@3@@ 1w@Ġ*Texp_applyfuUqUwfuUqU@Wఠ!eifuUqUfuUqU@gA@@a@@@^(3ffffffff@ @@@ఠ$argsjfuUqUfuUqU@gA@@WƠ@W@@@^+@W@@@^,@@^*@@@^)@@@-guUqU@@`j@@@^-!@@`m@@@^.$@@@Aఠ*split_argsg!X*X:g"X*XD@g:A@@/has_omitted_argWI@@@e0P@d@\Ϡ@@@d堠@b-N@eP@db@@@dP@d@@@dP@d@@dP@d@@@dP@d@fP@eB@@@eFP@dѠ@\P@e6@@@e9P@d@@d@@d@@d3gag`g`gagagagaga@ -x@y@zqj@k@l@@@࣠FFAJgsX*XFgtX*XU@gA@@N3gtgsgsgtgtgtgtgt@\WU@R@5@-@@dQ@d@@dQ@d@@dQ@d@f@g@@@@gX*XE@@Ġ"[]gXaXmgXaXo@]@@@@h3gggggggg@"-r@%@&@@@@@@ภgXaXsgXaXu@]*@@@]Dd@@@e@@ภgXaXwgXaXy@]8@@@]RtP@e@@@e "@@@@@l@d@@d)@Ġ"::gXzXgXzX@]i@@gXzXgXzX@@3gggggggg@<@@@@Ġ'OmittedgXzXgXzX@cPĠc5gXzXgXzX@c4@@@@@@@ @@@@gXzXgXzX@@@@@@d@ఠ$restgXzXgXzX@hA@@g^P@d@@@d.@@@ @@/@@@ఐ렐*split_argsh XzXh XzX@@@@@Ġ@@@e@@e @@e 3hhhhhhhh@&@ @!@@@ภdh$XzXh%XzX@d@@@P@eT@e@@ఐ;$resth4XzXh5XzX@@@P@e @@.@@!@ĠyhAXXhBXX@]@@hJXXhKXX@@P@d3hKhJhJhKhKhKhKhK@@@@@Ġ#ArghWXXhXXX@cbఠ#argh`XXhaXX@hyA@@ P@d@@@@@'P@d@@hiXXhjXX@@@#@ @@d#@ఠ$resthxXXhyXX@hA@@gݠJP@d@@@d4@@@ @@S5@@@@@ఠ'appliedhXXhXY@hA@@BT@e3hhhhhhhh@=6@7@8&@ @!@@@@ఠ'delayedhXYhXY @hA@@LP@e:T@e@@@@@@ @@e!@ఐ*split_argshXYhXY@C@@@@r@j@@e%@@e$@@e#1@ఐ`/has_omitted_arghXYhXY)@9@@>@@ఐf$resthXY*hXY.@F@@P@e.M@@*@@@U@E@@e/U@e-V@A@hXX@@ఐ/has_omitted_arghY2YAhY2YP@_@@3hhhhhhhh@fpi@j@k_X@Y@Z@@@@ఐy'appliedi YQYbi YQYi@@@x@@ภްiYQYoiYQYq@^ఐ#argiYQYkiYQYn@@@'@ఐ'delayedi)YQYri*YQYy@-@@2@@@@3@@$@@@@@@e<:@@ภi>YzYi?YzY@^ޠఐ蠐#argiHYzYiIYzY@@@Q@ఐ 'appliediSYzYiTYzY@X@@\@@@@P@eE_@@ఐ'delayedibYzYicYzY@f@@k@@@@:S@eHn@iiY2Y>@@<p@~@@@@AeimX*XX @@@ A@LJ@E@&@@@e@@e@@eP@e@@@i|X*X2@@@@ఠ'appliediYYiYY@i A@@hd@@@eP@e@@@eP@e3iiiiiiii@%@@@@ఠ'delayediYYiYY@i A@@_H@@@eP@e@@% @@@%@ @@e@ఐ*split_argsiYYiYY@H@@Y@@@e@_f@Z@@@eP@e@eFFe'@@@e@@@e@@e@@@e@iES@@@e@_Y@@@e@@e@@e@@eR@ɐภf9iYYiYY@f9@@@Z@@@eQ@eb@@ఐ $argsjYYj YY@@@_@F@eeh@@@e@@@e@@e@@@eQ@eQ@e@@c@@@@@@eQ@e@A@j+YY#@@@ఠ-function_modej6YZj7YZ@jO A@@13@@@eP@e3j<j;j;j<j<j<j<j<@@@@@@@@ఐ 'appliedjMZZ#jNZZ*@ @@ieO@@@e@@@e@Ġ̰j`Z0Z<jaZ0Z>@_@@@@iĠeb@@@e@@@e+@@iˠei@@@e@@@e2@@@ภ%GuardjwZ0ZBjxZ0ZG@*@@@@;@ĠjZHZVjZHZX@`#@jZHZTjZHZU@@e@@@eN@@jZHZYjZHZZ@@ie@@@e@@@eZ@@@ @@ie@@@e@@@eb@@je@@@e@@@ei@@@ภ+DereferencejZHZ^jZHZi@@@@wr@@@AjZZ@@yt@A@jYY@@ఐ$joinjZuZ}jZuZ@ư@@@@@@fZ@@@fY@@@fX@@fW3jjjjjjjj@@@@@@@ภnjZuZjZ[A`xఐ"<<jZuZjZuZ@-@@@@@@f@@@@f@@@f~@@f}@@f|'@@ఐ*expression(kZuZ@*@@@ @@@f@@@f@@f=@@ఐ(!ekZuZkZuZ@@@"@@@fT@fT@fQ@@G @@ @@@fU@@ఐ-function_modek,ZuZk-ZuZ@_@@2&@@@fe@@[@@@@@fi@ภҰk<ZZdA`۠ఐ"<<kGZZkHZZ@@@@@@@f@@@@f@@@f@@f@@f@@ఐ$list'kcZZ@)@@@@r@@@g/S@g@@@g@@g@ @@@gw@@@g@@g@@g@@ఐz*expressionkZZkZZ@@@@@@@g,@@@g+@@g*@@ఐ'appliedkZZkZZ@Y@@:@@@gT@g2T@g0@@i @@@@@g7@@ภ+DereferencekZZkZZ@@@@2@@@gF@@|@@z@@@gM@ภ WkZZAa`ఐ"<<kZZkZ[@@@@@@@gj@@@@gi@@@gh@@gg@@gf@@ఐ<$list'kZZ@ )@@@@@@@gS@g@@@g@@g@  @@@g@@@g@@g@@g2@@ఐ*expressionl ZZl ZZ@@@@@@@g@@@g@@gG@@ఐy'delayedlZZlZZ@ݰ@@::@@@gT@gT@g\@@i @@*@@@g`@@ภ%Guardl6Z[l7Z[@+@@@30@@@go@@|@@@@@gs@ภmAa@nA@k!@@@g^@@@g_P@g@@xA@k+@@@f@@@fP@g]@@A@k5@@@ft@@@fuP@f@@leZuZ@@A@@@@fl@@@fkP@fs@@@@@@@gP@fj@@@7@L@@@@@@Ġ*Texp_tuplel[[l[[@_ఠ%exprskl[[l[[@lA@@_@__@@@^:@@@^9@g@@@^;@@^8@@@^73llllllll@j@@@@@#@@e@@@^<@@f@@@^=@@@ఐk"<<l["[Ml["[O@@@@@@@g@@@@g@@@g@@g@@g3llllllll@?8@9@:@@@@ఐ'$listl["[(l["[,@ @@@@@@@h=Q@h@@@h@@h@ @@@h@@@h@@h@@h'@@ఐ렐*expressionl["[-l["[7@@@@@@@h:@@@h9@@h8<@@డkz$List#mapm["[9m["[=@ m["[>m["[A@@@@@@@`G`F@@@h\@@@h[R@hV@UR@h]R@hT@@hXR@hDR@hB@@hE@@@@hC @@@hA@@h@@@h?x@@డk#sndmF["[BmG["[E@@@!a@y@!b@w@@~@@}'%field1AAU@@@U nnU nn9@@U@@@@J5@@hQS@hW@@ఐ堐%exprsmp["[Fmq["[K@@@_^@@@hPS@h^S@hY@@m|["[8m}["[L@@@@@h)R@h_S@hO@@ @@@@@hd@@ภ%Guardm["[Pm["[U@--@@@4@@@hs@@@@@Ġ/Texp_atomic_locm[V[\m[V[k@`ఠ$exprlm[V[mm[V[q@mA@@h@@@^E3mmmmmmmm@{@@@@m[V[sm[V[t@@``@@@^G@@@^F @@m[V[vm[V[w@@`@@@^H@@@&m[V[x@@g$@@@^I@@g'@@@^J@@@ఐ"<<m[|[m[|[@#@@@@@@h|@@@@h{@@@hz@@hy@@hx3mmmmmmmm@C<@=@>@@@@ఐ*expressionm[|[m[|[@@@@@@@h@@@h@@h@@ఐa$exprn[|[n[|[@$@@@@@hR@hR@h.@@  @@@@@h2@@ภ%Guardn%[|[n&[|[@-@@@5@@@hA@@3@@B@Ġ*Texp_arrayn6[[n7[[@]/@n;[[n<[[@@]1@@@^Q3n=n<n<n=n=n=n=n=@@@@ఠ%exprsmnH[[nI[[@naA@@]:iK@@@^S@@@^R@@@nT[[@@g@@@^T@@g@@@^U@@@@ఠ*array_modene[[nf[[@n~ A@@5b@@@lP@h3nknjnjnknknknknk@6,%@&@'@@@డ\a*array_kind'Typeoptn[[n[[@ n[[n[[@@@\_*expression@@@)&Lambda*array_kind@@@)@@)@\D[\E[6@@\CN@@@@@@@h@@@h@@h7@@ఐd#expn[[n[[@@@,@@@lR@lR@lK@@: @@*@@@lO@Ġ&Lambdan[[n[\@+Pfloatarrayn[\n[\@@;+Pfloatarray&Lambda*array_kind@@@k @@@CD@@A1lambda/lambda.mli@@@ @@@@@R@@@lw@@U@@@lz@@@ภ+Dereferencen\N\Zn\N\e@ 0@@@@Ġ&Lambdan\f\pn\f\v@)Pgenarrayo\f\wo\f\@@;)Pgenarray4@@@@D@@A,-@@@4@@@ @@}@@@l@@@@@l@@@ภ+Dereferenceo]]*o]]5@ [@@@@Ġ&Lambdao*]6]@o+]6]F@*Paddrarrayo/]6]Go0]6]Q@@;*Paddrarraya@@@AD@@AYZ@@@a@@@ @@@@@l@@@Ġ&LambdaoG]6]ToH]6]Z@)PintarrayoL]6][oM]6]d@@;)Pintarray~@@@BD@@Avw@@@~@@@ @@@@@l@@@@1@@@@@l@@@ภ%Guardod]]oe]]@.@@@@@@Aoh[[@@@A@oj[[@@ఐ+"<<ot]]ou]]@@@@G@@@m@F@@@mC@@@m@@m@@m3oooooooo@%@@ @@@@ఐ!砐$listo]]o]]@̰@@@@@@@mPQ@m%!@@@m'@@m&@! @@@m$!@@@m#@@m"@@m!'@@ఐ*expressiono]]o]]@L@@@@@@mM@@@mL@@mK<@@ఐ%exprso]]o]]@\@@!:@@@m^^q?^^@@@g@@@m@m@(cstr_tagqJ^^qK^^@gװ@@g@@@m @Ġ,Cstr_unboxedqZ^^q[^^@g@@@@g@@@m0@@g@@@m3@@@ภ&Returnqi__ qj__@;H7@@@CE@@AH@@H@@@C>@Ġ-Cstr_constantq|__q}__)@;-Cstr_constantg;@g@@@"@A@AC@Agh"gh6@@@hT@@q__*q__+@@@@@mb@@@@@h@@@mf@@f@Ġ*Cstr_blockq__.q__8@;*Cstr_blockg]@g@@@"@AAAC@Ahijlhij@@@h0U@@q__9q__:@@@@@m@@@@@h6@@@m@@@@= @@h:@@@m@Ġ.Cstr_extensionq__=q__K@S@q__Lq__M@@U@@@m@@@Q@@@m@@@ @@hU@@@m@@@@\@@hY@@@m@@@ภ%Guardq_Q_[q_Q_`@1{@@@@@@Aq^^@@@A@q^^@@ఐ$joinq_j_pq_j_t@@@@Ϡ@@@n@@@n@@@n@@n3qqqqqqqq@@@@@@@ภr _w_r __Agఐڠ2access_constructor r_w_@ @@@@@n)@ภr __Agఐ⠐"<<r+__r,__@t@@@@@@nF@@@@nE@@@nD@@nC@@nB;@@ఐ$$list'rG__@")@@@@V@@@nS@nf$y@@@nh@@ng@$l @@@ne$[@@@nd@@nc@@nb^@@ఐ^*expressionrh__ri__@@@@t@@@nq@@@n@@ns@@ఐ_%exprsr}__r~__@7@@$:@@@n}T@nT@n@@i @@$@@@n@@ఐo"m'r__r__@@@9@@@n@@}@@_@@@n@ภr__Ah+@A@r @@@n:@@@n;P@n@@A@r@@@n@@@nP@n9@@r_j_u@@@@@n@@@nP@n@@@@!@@@nP@n@@@@@@&@Ġ,Texp_variantr__r__@f=@r__r__@@f?@@@^k3rrrrrrrr@@@@ఠ"eopr__r__@sA@@fHm@@@^m@@@^l@@@r__@@lP@@@^n@@lS@@@^o@@@ఐ"<<s`Z`us`Z`w@O@@@@@@n@@@@n@@@n@@n@@n3ssssssss@2+@,@-@@@@ఐ'&options%`Z``s&`Z`f@%d@@@@5@@@oQ@n&@@@n@@n@& @@@n&@@@n@@n@@n'@@ఐ=*expressionsG`Z`gsH`Z`q@ް@@@S@@@oP@@@o@@o<@@ఐr"eos\`Z`rs]`Z`t@F@@':@@@oR@oR@oQ@@C @@'@@@oU@@ภ%Guardst`Z`xsu`Z`}@3@@@:n@@@o,d@@V@@e@Ġ+Texp_records`~`s`~`@hkঠ&fieldss`~`s`~`@3heht@@@^vhg@@@3hJhI@@Ah-AhC@h@3h=h<@@Bh.Ah2@h/h.AhR@hOఠ"esqs`~`s`~`@sA@@ht@hq@@@^@hn@@@^@@^@@@^3ssssssss@z@@@.representations``s``@3hoh@@@^zhq@@A3hh@@@hWAh{@hx3hghf@@BhXAh\@hYhXAhn@hkఠ#reprs``s``@sA@@h~@@@^@3extended_expressions`~`s`~`@3h}h@@@^xh@@B3hh@@@hsAh@h3hh@@AhtAh@hhtAhx@huఠ"eoss`~`s`~`@sA@@hn@@@^@@@^=@@@s`~`s``@@h@@@^P@^E@@@t@@mR@@@^I@@mU@@@^L@@@@ఠ*field_modet ``t ``@t"A@@;@@@oRP@o03tttttttt@{t@u@vRK@L@M70@1@2@@@ఐY#rept"`at#`a @ @@h@@@o2@Ġ,Record_floatt2aat3aa'@;,Record_floath0@@@ABC@AqDSSqDSS@@@q@@@  @@h@@@o6-@@h@@@o70@@@ภ+DereferencetHaa+tIaa6@@@@>9@Ġ.Record_unboxedtUa7aCtVa7aQ@hS@tZa7aRt[a7aS@@hP@@@o<M@@@ @@i@@@o=Q@@i@@@o>T@@@ภ&Returntla7aWtma7a]@@@@b]@Ġ.Record_regulart}a^ajt~a^ax@;.Record_regularh{@@@@BC@AqCS;S?qCS;SM@@@q@@@  @@i8@@@oBx@@x@Ġ.Record_inlinedta^a{ta^a@;.Record_inlinedh@#intA@@@@AABC@AqFTTqFTT4@@@r @@ta^ata^a@@@@@oF@@@@@i\@@@oG@@@@2 @@i`@@@oH@Ġ0Record_extensiontaataa@;0Record_extensionh@$Path!t@@@@ABBC@Ar#GTXTZr$GTXTv@@@r7@@taataa@@@@@oL@@@@@i@@@oM@@@@\ @@i@@@oO@@@ภ%Guardtaataa@4|@@@@@@At`a@@@A@t``@@@ఠ%fieldtaataa@u A@@@@@@og@i@@@opP@oh@@oiP@od @@@oP@oe@@ofP@oc3u u u u u u u u @ @@@@@࣠@A@ఠ&_labelu"aau#aa@u;A@@%3u#u"u"u#u#u#u#u#@8u*aau+bbE@@@@@ఠ)field_defu4aau5aa@uMA@@3@@u9aau:aa@@@>@<@@ok@@ @@ఐ)field_defuLaauMaa@J@@@@K3uMuLuLuMuMuMuMuM@,5S@/@0$@@@Ġ$Keptu^abu_ab @;$Kepti@n)type_expr@@@ ҠoY,mutable_flag@@@ @B@@B@Apl44pl44@@@p@@uwab uxab@@@@@os3uyuxuxuyuyuyuyuy@,@@@@ @@@@ot@@@% @@~@@~@@@ఐ%emptyuabuab@H@@@Ġ*Overriddenubb$ubb.@j@ubb0ubb1@@ii@@@oz@@@oyU@ఠ!eubb3ubb4@uA@@p@@@o{c@@@ubb5@@e@@e@@@ఐ*expressionubb9ubbC@U@@@@@@o@@@o@@o3uuuuuuuu@z#@@@@@@ఐ*!eubbD@ @@@@@oT@oT@o@@"@@@@@Auaa@@f@A@P@pA@A@@ఐ!$joinubQbYubQb]@@@@!̠!@@@pF@@@pE!@@@pD@@pC3uuuuuuuu@ @ @ @@@@ภvb`bjv bbAkఐˠ"<<vb`byvb`b{@]@@@@@@pl@@@@pk@@@pj@@pi@@ph'@@ఐ&~%array(v0b`bo@$Y*@@@@@k@@@pS@p@k@@@p@@pS@p&g@@@p@@p@&Z@@@p&I@@@p@@p@@pU@@ఐi%fieldv\b`bpv]b`bu@_@@@@)@k&@@@p@@pk@@@p@@pp@@ఐؠ"esvwb`bvvxb`bx@c@@&K@@@pT@pT@p@@{ @@&}@@@p@@ఐ*field_modevb`b|vb`b@@@=@@@p@@@@ Y@@@p@ภ6vbbAl?ఐ b"<<vbbvbb@@@@ ~@@@p@ }@@@p z@@@p@@p@@p@@ఐ*&option'vbb@))@@@@@@@q?S@q*@@@q@@q@* @@@q*y@@@q@@q@@q@@ఐޠ*expressionvbbvbb@@@@@@@q<@@@q;@@q:@@ఐ"eovbbvbb@@@*:@@@q+T@qBT@q@ @@i @@*@@@qG@@ภ+Dereferencewbbwbb@W@@@>@@@qV@@|@@ @@@q]"@ภw%bbAl@A@v#@@@p@@@pP@ql3@@(A@v# @@@p`@@@paP@p=@@w;bQb^3@@##@@@pX@@@pWP@p_H@@X=@@@@@qvP@pVN@"C@@=@eD@@;@Ġ/Texp_ifthenelsewWbbwXbb@aఠ$condtw`bbwabb@wyA@@r`@@@^3wdwcwcwdwdwdwdwd@.@@@ఠ$ifsouwobbwpbb@wA@@ro@@@^@ఠ%ifnotvw}bbw~bb@wA@@ar@@@^@@@^!@@@2wbb@@p@@@^&@@p@@@^)@@@ఐ#^$joinwccwcc@!@@@#w#v@@@q{@@@qz#u@@@qy@@qx3wwwwwwww@rPI@J@KB;@<@=5.@/@0@@@@ภMwddwdbdiAmWఐ!z"<<wddwdd@ @@@!@@@q@!@@@q!@@@q@@q@@q+@@ఐՠ*expression(wdd@u*@@@@@@q@@@q@@qA@@ఐ$condwddwdd@I@@@@@qT@qT@qU@@G @@@@@qY@@ภ+Dereferencex ddx dd&@L@@@?@@@qh@@Z@@!@@@ql@ภxd(d0cAmఐ*expression x%d(d:@ @@@0@@@r-@@@r@@r@@ఐʠ$ifsox9d(d;x:d(d?@@@G@@@rR@rR@r@@* @@E@@@r@ภxMdAdIAmఐ,7&option xXdAdO@* @@@@g@@@rfQ@r;,(@@@r=@@r<@, @@@r:, @@@r9@@r8@@r7@@ఐo*expressionxydAdPxzdAdZ@@@@@@@rc@@@rb@@ra@@ఐ%ifnotxdAd[xdAd`@@@,H:@@@rRR@riR@rg@@M @@,8@@@rn@ภxdbdhAn(@A@x$@@@r/@@@r0P@r}@@bA@x$@@@q@@@qP@r.@@A@x$@@@q@@@qP@q@@xcc @@$$@@@q@@@qP@q%@@5@@&&@Ġ-Texp_setfieldxdjdpxdjd}@jఠ"e1wxdjdxdjd@xA@@s@@@^3xxxxxxxx@@@@@xdjdxdjd@@jj@@@^@@@^ @@xdjdxdjd@@j@@@^@ఠ"e2xydjdydjd@yA@@t@@@^#@@@4y djd@@rf@@@^(@@ri@@@^+@@@ఐ$᠐$joinyeeyee@#$@@@$$@@@r@@@r$@@@r@@r3y(y'y'y(y(y(y(y(@QJ@K@L/(@)@*@@@@ภΰy8eey9f)f0Anؠఐ""<<yDeeyEee@!@@@#@@@r@#@@@r#@@@r@@r@@r)@@ఐ V*expression(y`ee@*@@@ k@@@r h@@@r@@r?@@ఐ"e1yteeyuee@H@@ @@@rT@rT@rS@@G @@ @@@rW@@ภ+Dereferenceyeeyef@@@@@@@@rf@@Z@@#T@@@rj@ภ1yff cAo:ఐ#]"<<yffyff@!@@@#y@@@s@#x@@@s#u@@@s@@s@@s@@ఐ *expression'yff@ X)@@@ @@@s8 @@@s7@@s6@@ఐҠ"e2yffyff@@@ @@@sHT@sJT@sI@@F @@ @@@sO@@ภ+Dereferenceyffyff'@/@@@@@@@s^@@Y@@#@@@se@ภiyf)f/Ao@A@yb%@@@s@@@sP@st@@nA@yl%@@@r@@@rP@s @@zee@@%%@@@r@@@rP@r@@@@v@Ġ-Texp_sequencez(f1f7z)f1fD@qఠ"e1yz1f1fFz2f1fH@zJA@@u1@@@^3z5z4z4z5z5z5z5z5@@@@ఠ"e2zz@f1fJzAf1fL@zYA@@u@@@@^@@@ zHf1fM@@s@@@^@@s@@@^@@@ఐ&$joinzXggzYgg@$`@@@&6&5@@@s@@@s&4@@@s@@s3zdzczczdzdzdzdzd@0=6@7@8/(@)@*@@@@ภ ztg"g*zugYg`Apఐ$7"<<zg"g8zg"g:@"ɰ@@@$S@@@s@$R@@@s$O@@@s@@s@@s)@@ఐ!*expression(zg"g4@!2*@@@!@@@s!@@@s@@s?@@ఐ"e1zg"g5zg"g7@H@@!@@@sT@sT@sS@@G @@!@@@sW@@ภ%Guardzg"g;zg"g@@:a@@@A@@@sf@@Z@@$@@@sj@ภmzgBgJcApvఐ!ؠ*expression zgBgT@!x @@@!@@@t!@@@t@@t @@ఐ"e2zgBgUzgBgW@@@"@@@tR@t!R@t @@* @@"@@@t&@ภv{ gYg_Ap@A@zo&@@@t@@@tP@t5@@?A@zy&@@@s@@@sP@t@@{ gg @@&&@@@s@@@sP@s@@@@@Ġ*Texp_while{5gagg{6gagq@lఠ$cond{{>gags{?gagw@{WA@@v>@@@^3{B{A{A{B{B{B{B{B@ @@@ఠ$body|{Mgagy{Ngag}@{fA@@vM@@@^@@@ {Ugag~@@t@@@^@@t@@@^@@@ఐ'*$join{eh,h2{fh,h6@%m@@@'C'B@@@tD@@@tC'A@@@tB@@tA3{q{p{p{q{q{q{q{q@ ==6@7@8/(@)@*@@@@ภ{h9hA{hhAq!ఐ%D"<<{h9hQ{h9hS@#ְ@@@%`@@@tj@%_@@@ti%\@@@th@@tg@@tf)@@ఐ"*expression({h9hK@"?*@@@"@@@t"@@@t@@t?@@ఐ$cond{h9hL{h9hP@H@@"@@@tT@tT@tS@@G @@"@@@tW@@ภ+Dereference{h9hT{h9h_@@@@B@@@tf@@Z@@%@@@tj@ภz{hahicAqఐ%"<<{hahy{hah{@$8@@@%@@@t@%@@@t%@@@t@@t@@t@@ఐ#*expression'| hahs@")@@@#@@@t#@@@t@@t@@ఐҠ$body|haht| hahx@@@#-@@@uT@uT@u@@F @@#+@@@u@@ภ%Guard|6hah||7hah@;@@@C0@@@u@@Y@@%@@@u@ภ|FhhAq@A@{("@@@t@@@tP@u,@@nA@{(,@@@t^@@@t_P@t@@|\h,h7@@(8(7@@@tV@@@tUP@t]@@@@ @Ġ)Texp_send|qhh|rhh@fnఠ"e1}|zhh|{hh@|A@@wz@@@^3|~|}|}|~|~|~|~|~@!H@@@@|hh|hh@@f{@@@^ @@@|hh@@u@@@^@@u@@@^@@@ఐ(`$join|i#i)|i#i-@&@@@(y(x@@@u;@@@u:(w@@@u9@@u83||||||||@!r6/@0@1@@@@ภK| i0i8| iUi\ArUఐ&x"<<| i0iF| i0iH@% @@@&@@@ua@&@@@u`&@@@u_@@u^@@u]'@@ఐ#Ӡ*expression(| i0iB@#s*@@@#@@@u#@@@u~@@u}=@@ఐw"e1| i0iC| i0iE@G@@#@@@uT@uT@uQ@@G @@#@@@uU@@ภ+Dereference} i0iI}  i0iT@J@@@D@@@ud@@Z@@&@@@uh@ภ} iUi[cAr@dA@|}(@@@uU@@@uVP@uy@@}$i#i.o@@)(@@@uM@@@uLP@uT@@y@@!@Ġ*Texp_field}9 i]ic}: i]im@gఠ!e~}B i]io}C i]ip@}[A@@xB@@@^3}F}E}E}F}F}F}F}F@"@@@@}M i]ir}N i]is@@gg@@@^@@@^ @@}Y i]iu}Z i]iv@@g@@@^@@@&}_ i]iw@@v@@@^@@v@@@^@@@ఐ'&"<<}oii}pii@%@@@'B@@@u@'A@@@u'>@@@u@@u@@u3}|}{}{}|}|}|}|}|@"GC<@=@>@@@@ఐ$*expression}ii}ii@$%@@@$@@@u$@@@u@@u@@ఐa!e}ii}ii@$@@$@@@uR@uR@u.@@  @@$@@@v2@@ภ+Dereference}ii}ij@@@@D@@@vA@@3@@"B@Ġ/Texp_setinstvar}jj}jj@oఠ#pth}jj}jj@}A@@o"@@@^3}}}}}}}}@"@@@@}jj}jj@@o$@@@^ @@}jj}jj @@o%o#@@@^@@@^@ఠ!e}jj!}jj"@~A@@x@@@^#@@@4}jj#@@wY@@@^(@@w\@@@^+@@@ఐ)Ԡ$join~jj~jj@(@@@))@@@v@@@v)@@@v@@v3~~~~~~~~@"QJ@K@L/(@)@*@@@@ภ~+jj~,jjAsˠఐ'"<<~7jj~8jj@&@@@( @@@v=@( @@@v<(@@@v;@@v:@@v9)@@ఐ$o$path(~Sjj@$r*@@@$r@@@v[$m@@@vZ@@vY?@@ఐ#pth~gjj~hjj@H@@$@@@vkT@vmT@vlS@@G @@$@@@vrW@@ภ+Dereference~~jj~jj@@@@Ex@@@vf@@Z@@(G@@@vj@ภ$~jjcAt-ఐ(P"<<~jj~jj@&@@@(l@@@v@(k@@@v(h@@@v@@v@@v@@ఐ%*expression'~jj@%K)@@@%@@@v%@@@v@@v@@ఐҠ!e~jj~jj@@@%@@@vT@vT@v@@F @@%@@@v@@ภ+Dereference~jj~jj@"@@@E@@@v@@Y@@(@@@v@ภ\~jjAtu@A@~U*@@@v@@@vP@v@@nA@~_*@@@v1@@@v2P@v@@jj@@**@@@v)@@@v(P@v0@@@@#i@Ġ+Texp_assertjjjj@hఠ!e$jj%jj@=A@@z$@@@^3(''(((((@#@@@@/jj0jk@@h@@@^ @@@5jk@@x@@@^@@x@@@^@@@ఐ("<<E$kkF$kk@'@@@)@@@w@)@@@w)@@@w @@w @@w 3RQQRRRRR@$70@1@2@@@@ఐ&Z*expressiond$kke$kk@%@@@&p@@@w-&m@@@w,@@w+@@ఐU!ey$kkz$kk@$@@&@@@w=R@w?R@w>.@@  @@&@@@wD2@@ภ+Dereference$kk$kk@@@@F@@@wSA@@3@@#B@Ġ)Texp_pack%kk%kk@nWఠ$mexp%kk%kk@A@@yE@@@^3@$x@@@@@@@y @@@^@@y@@@^@@@ఐ%&modexp+lHlN+lHlT@%@@@%@@@wZ%@@@wY@@wX3@$)"@#@$@@@@ఐ0$mexp+lHlU+lHlY@ @@&@@@wjP@wlP@wk@@# @@$=@Ġ+Texp_object,lZl`,lZlk@jРఠ(clsstrct,lZlm,lZlu@A@@j@@@^3@$@@@@,lZlw,lZlx@@j۠j@@@^@@@^ @@@ ,lZly@@yg@@@_@@yj@@@_@@@ఐ&/class_structure-l}l-l}l@&@@@&@@@wq&@@@wp@@wo3%$$%%%%%@$6/@0@1@@@@ఐ=(clsstrct5-l}l6-l}l@ @@&@@@wP@wP@w@@# @@$@Ġ(Texp_tryJ.llK.ll@iఠ!eS.llT.ll@lA@@{S@@@_ 3WVVWWWWW@%!@@@ఠ%casesb.llc.ll@{A@@ikj@@@_@@@_@@@_ @ఠ)eff_casesx.lly.ll@A@@ikk@@@_@@@_@@@_-@@@>.ll@@y@@@_2@@y@@@_5@@@@ఠ(case_env8mn8mn@A@@@%ޠF@w@@@wP@w@%@@@wP@w%@@@wP@w@@wP@w@@wP@w3@%kd@e@f]V@W@XHA@B@C@@@࣠@!c A8mn8mn@A@@+3@88mn8mn$@@@@@  @@!m A8mn8mn@A@@43@!B@@@@@@@@డ[#fst8mn8mn@@@!a@{@!b@}@@| @@{'%field0AAh@@@hmmhmm@@h~@@@@@_R@w@&4@@@wR@w@@w @@w3@:Fp@=@>@@@@ఐ&d$case(8mn)8mn@&h@@@&h@@@w@&a@@@w@&`@@@w@&]@@@w@@w@@w@@w)@@ఐ!cL8mn M8mn!@l@@6@@ఐ!mY8mn"Z8mn#@@@@C@@]8mn@@@V@T@@wS@wT@wO@@{@@YP@A@P@w@A@@ఐ-:$joinu9n(n.v9n(n2@+}@@@-S-R@@@w@@@w-Q@@@w@@w3@@@@@@@ภ%:n5n==nnAw/ఐ(*expression :n5nG@(1@@@(@@@w(@@@w@@w!@@ఐ\!e:n5nH:n5nI@@@(@@@wR@wR@w5@@+ @@(@@@w9@ภY;nKnS4Awbఐ4"$list ;nKnW@2 @@@@'la@@@xOQ@x<@@@xFQ@x4@@@x@@x@3@@@x3@@@x@@x@@xg@@ఐ\(case_env;nKnX;nKn`@q@@@'5$@@@xA@'.@@@x@')@@@x?@@x>@@x=@@ఐ%cases;nKna;nKnf@W@@4,F@@@x/R@xPR@xM@@Y @@4@@@xU@ภ%<nhnpAwĠఐ4$list 0<nhnt@2h @@@@'sl@@@xQ@x@@@xQ@xr4h@@@xt@@xs@4[@@@xq4J@@@xp@@xo@@xn@@ఐ(case_envW<nhnuX<nhn}@Ӱ@@@'$@@@x@'@@@x'@@@x@@x@@x@@ఐ)eff_casesr<nhn~s<nhn@@@4F@@@xR@xR@x@@Y @@4~@@@x@ภ=nnAx @A@.c@@@xf@@@xgP@x@@nA@.m@@@x @@@x P@xe@@ A@.w@@@w@@@wP@x "@@9n(n3@@..@@@w@@@wP@w-@@="@@' @@@xP@w3@(@@'@Ġ-Texp_override>nn>nn@kఠ#pth>nn>nn@A@@k@@@_3@'@@@ఠ&fields>nn>nn@A@@kΠ@k@@@_"@kʠk@@@_$@@@_#@}@@@_%@@_!@@@_ %@@@6>nn@@|R@@@_&*@@|U@@@_'-@@@@ఠ%field  Ipp Ipp@"A@@@@@@x͠@@@xΠ@*(@@@xP@x@@xP@x*'@@@xP@x@@xP@x3&%%&&&&&@'e^@_@`WP@Q@R@@@࣠@-3A@@:Ipp;Ipp@@%398899999@8@IppAIpp@@@@@@FIppGIpp@@- @@ఠ#arg PIppQIpp@iA@@5@@UIppVIpp@@@D@B@@@@x#@@  @@ఐ*`*expressionjIppkIpp@*@@@*v@@@x*s@@@x@@x3rqqrrrrr@:+Y@%@&@@@@ఐ2#argIppB@ C@@e@@D@@_@1EA@yP@xL@A@I@ఐ/V$joinJppJpp@-@@@/o/n@@@x@@@x/m@@@x@@x3@x@@@@@@ภ!AKppMq)q0AyKఐ-n"<<KppKpp@,@@@-@@@y@-@@@y-@@@y@@y@@y'@@ఐ)$path(Kpp@)*@@@)@@@y4)@@@y3@@y2=@@ఐ#pthKppKpp@@@* @@@yDT@yFT@yEQ@@G @@*@@@yKU@@ภ+DereferenceKppKpp@!@@@@J@@@yZd@@Z@@-@@@yah@ภ!LpqcAyఐ-Р"<<LpqLpq@,b@@@-@@@y~@-@@@y}-@@@y|@@y{@@yz@@ఐ6$list'5Lpq @4m)@@@@@m+@@@yS@y@m*m(@@@y@@@yS@y@+Z@@@y@@yS@y6}@@@y@@y@6p#@@@y6_@@@y@@y@@y@@ఐc%fieldlLpq mLpq@̰@@@@4@/@+@@@y@@y+}@@@y@@y@@ఐ&fieldsLpqLpq@^@@6X@@@yT@yT@y@@ @@6@@@y@@ภ+DereferenceLpqLpq'@!@@@K@@@y@@@@.j@@@y @ภ!Mq)q/Az6@A@0@@@yr@@@ysP@y@@A@ 0@@@y @@@y P@yq&@@Jpp@@00@@@y@@@yP@y 1@@A&@@),@@@z P@y7@,@@)0@Ġ-Texp_functionNq1q7Nq1qD@s9ఠ¶msNq1qFNq1qL@A@@sAs@@@@_/@@@_.3@)@@@ఠ$bodyNq1qNNq1qR@A@@sI@@@_0@@@$Nq1qS@@~`@@@_1@@~c@@@_2@@@@ఠ)param_patWrIrSWrIr\@0A@@@so@@@zP@z l@@@z'P@z @@z P@z 3&%%&&&&&@)E>@?@@3,@-@.@@@࣠@%paramA9WrIr]:WrIrb@RA@@3:99:::::@+AWrIrOBbsXs@@@@@  @@ఐ%paramP`ss%Q`ss*@4@@@@53QPPQQQQQ@$@@@'fp_kindZ`ss+[`ss2@3'fp_kinds@@@ 3function_param_kind@@@ @@C3,fp_arg_label X)arg_label@@@ @@@@A=.*..=.*.F@@@3(fp_paramw!t@@@ @@A@A>.G.K>.G.]@@@3*fp_partial"o@@@ @@B@AB..B..@@@+3+fp_newtypes+~̠|#locx@@@ @@@ @@@ @@D2@AI/w/{I/w/@@@3&fp_loc@~!t@@@ @@E>@AN00N00@@@@AH/U/YH/U/v@@@]R@@L@@@z\@Ġ*Tparam_patas8sBas8sL@;*Tparam_pat]@@@ @l@@@ @A@@B@A!U1H1J"U1H1a@@@4@ఠ#patas8sMas8sP@A@@l@@@z3@@@@@@ @@y@@@z@@|@@@z@@@ఐ#patas8sTas8sW@@@@@3@ @@@Ġ7Tparam_optional_defaultbsXsbbsXsy@;7Tparam_optional_default=@l@@@  @@@ @BA@B@A_W11`W11@@@r@ఠ#patbsXs{bsXs~@(A@@m@@@z @@bsXsbsXs@@@@@z!@@@(bsXs@@@@@z"@@@@@z#@@@ఐ#pat-bsXs@@@@@ 3-,,-----@'@@@@@A3`ss@@310011111@@@@A@P@{@A@@@ఠ-param_defaultBhssChss@[ A@@@t@@@{!P@{-R@@@{FP@{@@{P@{3QPPQQQQQ@,C<@=@>@@@࣠@%paramAbhsschss@{!A@@3cbbccccc@)jhsskvuXui@@@@@  @@ఐ%paramyist zist@2@@@@33zyyzzzzz@$@@@'fp_kindistist@) @@%@@@{  @Ġ7Tparam_optional_defaultjtt'jtt>@@jtt@jttA@@m@@@{' @ఠ'defaultjttCjttJ@"A@@@@@{(.@@@jttK@@L@@@{)3@@O@@@{*6@@@ఐ-*expressionpttptt@-S@@@-@@@{7-@@@{6@@{53@K)"@#@$@@@@ఐ0'defaultpttptt@ @@-@@@{GT@{IT@{H@@# @@@Ġ*Tparam_patqttqtt@/@qttqtt@@m@@@{/v@@@ @@@@@{0z@@@@@{1}@@@ఐ1%emptyvuXud@0@@@@@Aist@@3@@@@A@P@{@A@@@ఠ(patternsxusu}xusu@,#A@@1n@@@|P@{@@@{P@{3@@@@@@డ$List#map2xusu3xusu@ 6xusu7xusu@@20@@@@u@@@|P@{'@@{@2- @@@{2,0@@@{@@{@@{+@@ఐ@)param_patWxusuXxusu@@@@u@@@| nS@@@| @@| @@@ఐ¶mslxusumxusu@B@@2[8@@@{Q@|Q@|U@@F @@_V@A@yxusuy @@@ఠ(defaultsyuuyuu@$A@@2m.@@@|5P@|@@@|&P@|3@r@@@@@డ $List#mapyuuyuu@ yuuyuu@@2@@@@u@@@|6P@|'@@|@2 @@@|20@@@|@@|@@|+@@ఐ-param_defaultyuuyuu@@@@v@@@|3.@@@|2@@|1@@@ఐ¶msyuuyuu@@@2̠8@@@|'Q@|9Q@|7U@@F @@_V@A@yuu @@@ఠ$bodyzuuzuu@%A@@.L@|L@|:3@j~w@x@y@@@ఐ.-function_bodyzuu zuu@.@@@..@@|<@@ఐ$bodyzuuzuu@@@.@@@@.@A@zuu@@@ఠ!f'{vv ({vv @@&A@@1@@@|ZP@|A3-,,-----@5A:@;@<@@@ఐ1"<<<{vv(={vv*@0@@@2@@@|G@2@@@|F2 @@@|E@@|D@@|C@@ఐ4$joinX{vvY{vv@2`@@@4645@@@|f@@@|e44@@@|d@@|c7@@ภ'9o{vvp{vv@~ఐ$bodyy{vvz{vv@I@@L@ఐ(defaults{vv{vv&@@@/@@@|S@|S@|_@@{vv{vv'@@4m4l@@@|x@@@|wS@|k@@D @@4l@@@|o@@ภ%Delay{vv+{vv0@;_N@@@AE@@A_@@_@@@O@@@|@@Y@@@A@{vv @@࣠@!mA|v4v?|v4v@@'A@@=Y@@@|3@@@@@@@  @@@ఠ#env}vDvQ}vDvT@(A@@=k@@@|Q@|3@*=y@@@|@$@%@@@ఐǠ!f}vDvW}vDvX@)@@2@@@|@@ఐC!m}vDvY}vDvZ@@@=@+@|R@|R@|*@@ @@0+@A@ }vDvM @@ఐ>.remove_patlist~v^vg~v^vu@=@@@>~?s@@@|P@|@@@|@@@|@?@@@|@@|@@|3+**+++++@P`Y@Z@[@@@@ఐ((patterns;~v^vv<~v^v~@@@>?(@@@|@@@|Q@|Q@|@@ఐ#envT~v^vU~v^v@&@@=@@@|Q@|Q@|Q@|2@@L @@3@W @@@c|v4v:d~v^v@@-@@@|O@|@@@;@P@@p@ @@@ @@ L@ @@ @/ @@-G@Ġ)Texp_lazyzvv{vv@wఠ!evvvv@A@@@@@_73@.Q@@@@@@@@@@_8@@@@@_9@@@@ఠ)lazy_modew!w+w!w4@)A@@P@@@}wP@|3@.m(!@"@#@@@డw6classify_lazy_argument'Typeoptw!w=w!wD@ w!wEw!w[@@w@@@w@@@}Рw@w@w@wРw@w@@@@}A@@@}@@@}A@@@}@@}:@@ఐf!ew!w\w!w]@D@@w@@@}R@}R@}N@@= @@Рw@w@w@wРw@w@@@@}A@@@}@@@}A@@@}j@4Constant_or_function@Рw@w@w@w㐐Рw@w@@@@}'A@@@}&@@@}%A@@5wcwm6wcw@@@}$@@@*Identifier@AwwBww@@Рw@w@@@@}:A@@@}9@Рx@x@x@xРx@x@@@@}7A@@@}6@@@}5A@@hww'@@@}4@@@@7*@@Рx9@x8@x7@x6Рx5@x4@@@@}>A@@@}=@@@}@@BtAt8@t53t#t"@@DtAt@ttAt*@t'ఠ@A@vyvh@@@_U@@@_T=@@A\x%xJ@@t}@@@_WP@_VD@@@d@@G@@@_XH@@J@@@_YK@@@@ఠ(case_envxNxZxNxb@*A@@@1CR@}@@@}P@}@1A@@@}P@}1>@@@}P@}@@}P@}@@}P@}3@0}z@|@{c`@b@aFC@E@D@@@࣠@!c!A-xNxc.xNxd@F+A@@+3.--.....@85xNxV6xNxw@@@@@  @@!m"AAxNxeBxNxf@Z,A@@43BAABBBBB@!B@@@@@@@@డ#fstSxNxiTxNxl@ e@@@@FR@}Ҡ@1@@@}R@}@@} @@}3baabbbbb@!-W@$@%@@@@ఐ1$casetxNxnuxNxr@1@@@1q@@@}@1@@@}@1@@@}ޠ@1@@@}@@}@@}@@})@@ఐn!cxNxsxNxt@S@@6@@ఐg!mxNxuxNxv@@@@C@@xNxmt@@@V@T@@}S@}T@}O@@b@@YP@A@P@}@A@@ఐ8$joinx{xx{x@6ɰ@@@88@@@~@@@}8@@@}@@}3@@@@@@@ภ*qxxxxA{ఐ6"<<xxxx@50@@@6@@@~&@6@@@~%6@@@~$@@~#@@~"'@@ఐ?W$list(xx@=;*@@@@3@@@~qS@~F?5@@@~H@@~G@?( @@@~E?@@@~D@@~C@@~BJ@@ఐ3*binding_op$xx%xx@3@@@3@@@~n3@@@~m@@~l_@@ภ,7xx8xx@נఐ$let_AxxBxx@$@@;T@~yv@ఐ$andsNxxOxx@0@@OU@~s@@@~xT@~|T@~z@@\xx]xx@@?uZ@@@~]T@~w@@@@?e@@@~@@ภ+Dereferenceqxxrxx@*@@@Tk@@@~@@@@7:@@@~@ภ+xxA ఐ7C"<<xxxx@5հ@@@7_@@@~@7^@@@~7[@@@~@@~@@~@@ఐ(case_env'xx@װ)@@@2x7@@@~S@~@@@~@2@@@~2@@@~@@~@@~@@ఐ蠐$bodyxxxx@@@3 "@@@~T@~T@~@@R @@@3@@@~2@@@~@@~ @@ภ%Delayxxxx@<@@@T@@@~@@j@@7@@@~@ภ*`xxAy@A@Y9@@@~@@@~P@ /@@$A@c9@@@~@@@~P@~9@@ x{x/@@99@@@~@@@~P@~D@@T9@@2o@@@P@~J@?@@2s@Ġ0Texp_unreachable%xx&xy@@@@@@@@_]@@@@@_^@@@ఐ8N%empty5y@yF6y@yK@7@@2@Ġ:Texp_extension_constructorByLyRCyLyl@ߠఠ$_lidKyLynLyLyr@dA@@@@@_f@@@_e3SRRSSSSS@3@@@ఠ#pth^yLyt_yLyw@wA@@@@@_g@@@$fyLyx@@@@@_h@@@@@_i@@@ఐ8-"<<vy|ywy|y@6@@@8I@@@$@8H@@@#8E@@@"@@!@@ 3@3OB;@<@=0)@*@+@@@@ఐ4$pathy|yy|y@4@@@4@@@B4@@@A@@@@@ఐN#pthy|yy|y@$@@4@@@RR@TR@S0@@  @@4@@@Y4@@ภ+Dereferencey|yy|y@,@@@U@@@hC@@3@@3"D@Ġ0Texp_struct_itemyyyy@ ఠ"siyyyy@A@@@@@_o3@ఠ!eyyyy@A@@@@@_p3@@@yy@@M@@@_q3@@P@@@_r3@@@ఐ7E">>yyyy@6@@@7_@@@q@7^@@@p7]@@@o@@n@@m3@3=6@7@80)@*@+@@@@ఐ5.structure_item$yy%yy@5@@@5@@@5@@@@@@@ఐ\"si9yy:yy@%@@53@@@R@R@0@@  @@51@@@4@@ఐ6I*expressionSyyTyy@5@@@6_@@@6\@@@@@K@@ఐ}!ehyyiyy@S@@6v@@@R@R@_@@  @@6t@@@c@@S@@3d@@@Ax:MM@@3@@@o3yxxyyyyy@4C@@@~:MM@б@г626l6k66h6e@69@@@]e676d@г3栐6c6b@3@@@]f6>6_@@ @@]g6@6^@/A@@@6@@@|6@@@{@@zL@w6K@@@9MuMu;@6<6<6,6+@6*6-@@6964@@]3@6@@@࣠@$bodyAzz$zz(@-A@@6I3@6e@@@@@@ఐ$bodyz+z3z+z7@6X@@@@6Y3@6v@@@Ġ.Tfunction_bodyz=zAz=zO@;.Tfunction_body~#@@@ @@@@ @A@@B@A?]22@]22@@@R@ఠ$bodyz=zPz=zT@.A@@@@@3@*@@@@@ @@6@@6@@@ఐ6*expression{{{{#@6@@@7 @@@7 @@@@@3      @A#@@@@@@ఐ*$body{{${{(@ @@7'@@@P@P@@@# @@6@Ġ/Tfunction_cases.{){-/{){<@;/Tfunction_casesV@~{@@@ @AA@B@A^22f33@@;@@%cases@@zz@@@ @@@ @@@ ư_23_23@@@'partial@@z@@@ ɰ`33!`332@@@%param@@!t@@@ ʰa333;a333J@@@#loc@@!t@@@ ˰b3K3Sb3K3c@@@)exp_extra@@!@@@ @@@ ̰c3d3lc3d3@@@*attributes@@@@@ ΰd33d33@@@@AA@@@@@@@@BA@ঠ%cases{){?{){DA3bq@@@d@@@3SR@@AAO@L3IH@@BAB@?3<;@@CA5@23/.@@DA&@#3  @@EA@A^@[ఠ@/A@p{P{?@@@@@@@@@@@A{){={){I@@@@@P@@@@@@7T@@7T@@@ఐ<$join||||@:ذ@@@<<@@@@@@<@@@@@3@2/@1@0@@@@డ\$List#map||||@ ||||@@;@@@@6;{@@@P@@@@ P@<@@@P@P@@@@;@@@;@@@@@@@;@@࣠@!cA(||)||@A0A@@.3)(()))))@M@@@@@@$modeA7||8||@P1A@@6k@@@ P@3=<<=====@b!E@@@@@@  @@డ#fstN||O||@`@@@@E@@@&P@ P@ S@@6@@@ S@@@@@3feefffff@*;1@2@3@@@@ఐ6$casex||y||@6@@@6}@@@@6@@@@6@@@@6@@@@@@@@@)@@ఐw!c||||@\@@6@@ఐu$mode||||@@@@qC@@||||@@@`@U@@T@U@ P@@l @@cQ@||||@@@@@Q@Q@@@ఐ%cases||||@@@<@@@Q@Q@@@ @@==@@@@@P@Q@@@@@8l@@@Az+z-@@8n3@@@@0A@@8y8t@@9L@80@@@zz@@8c@8o3@8@@@8s8s8e8d@8c@8r@@@[8o@@@[@@[8nб@г8})Typedtree || ||@8||||@@@8@@@[" @@г8)term_judg||||@@8@@@[.@@@@@[1@@88A@@@8@@@]8@@@]@@];@࣠@#bopA9|}:|}@R2A@@8@@@E3?>>?????@8@@@@  @@ఐ>$joinN}} O}}@,>+@@@M@@@L>*@@@K@@J3ZYYZZZZZ@9-#@@@D@'@(@@@@ภ0k}}l}}?A ఐ8$path w}}@8@@@8@@@q8@@@p@@o$@@ఐW#bop}}}}@0@@{@@@@8@+bop_op_path}}}}&@3+bop_op_path{ @@@ W!t@@@ @@@ 3+bop_op_name #loc@@@ @@@ @@A @Ar55r550@@!@3*bop_op_val1value_description@@@ @@B@As5155s515Z@@-@3+bop_op_type()type_expr@@@ @@C%@A&t5[5_'t5[5}@@9@3'bop_exp4@@@ @@D.@A/w550w56 @@B@3'bop_loc=+!t@@@ @@E:@A;x6 6<x6 6%@@N@@A?q44@q45@@R@\O@@9@@@P@P@@@W@@9@@@@ภ0}}(Aఐ9*expression }}2@9 @@@:@@@: @@@@@@@ఐ堐#bop}}3}}6@@@{@@@@@'bop_exp'}}7(}}>@Z@@:5@@@P@P@@@8 @@:3@@@@ภ/A@A@?@@@@@@N@@@LA@? @@@g@@@hN@@@P}}@@?,?+@@@_@@@^N@f@@ @@H@@@N@]@b||@б@г+ed9a^@2@@@:0]@г\[@@@@;7X@@ @@<9W@A@@@9@@@9@@@@@L@D@@@||@@9@93@:@@@9999@9@9@@@[9@@@[@@[9б@г:)Typedtree}A}W}A}`@: }A}a}A}p@@@:@@@[" @@г:)term_judg}A}t}A}}@@:@@@[.@@@@@[1@@::A@@@:)@@@]!:&@@@] @@];@࣠@"csA}}}}@3A@@+:>@@@3@:@@@@  @@ఐF<$list}}}}@D!@@@@:E@@@&M@F@@@@@@F @@@E@@@@@@@3@:6,@@@@0@1@@@@ఐ:e+class_field}}}}@:i@@@:i@@@#:f@@@"@@!@@ఐW"cs'}}(}}@'@@@@@+@(/@+cstr_fields3}}4}}@3+cstr_fields@@@ }+class_field@@@ @@@ @@A3)cstr_self{;@@@ @@@@A999:@@@3)cstr_typen/class_signature@@@ @@B@A:(:+:(:L@@@3*cstr_meths%{%Meths!t!t@@@ @@@ @@C'@A:M:P:M:r@@@@A:: ::'@@@M@@@F@@@N@,N@)|@@I@@I#@@@-N@@}}Q@б@г:@@@@@г@@@@@@ @@@jA@@@; @@@:;@@@9@@8L@5@@@}A}Av@@:@;3@;@@@; ; ::@:@;@@@[;@@@[@@[;б@г;)Typedtree}}}}@;}}}}@@@;"@@@[" @@г; )term_judg}}}}@@;(@@@[.@@@@@[1@@;+;*A@@@;8@@@]$;5@@@]#@@]";@࣠@"cfA}}}}@4A@@M;M@@@F3@;@@@@  @@ఐ"cf }} }}@@@@E@@@@@@@N@L3@;, @@@'cf_desc}}}~@3'cf_desc@@@ 0class_field_desc@@@ @@@ 3&cf_loc ~!t@@@ @@A @A::::@@@3-cf_attributesc@@@ @@B@A::::@@@@A::::@@@9&@@ @@@M0@Ġ+Tcf_inheritR~~ S~~@;+Tcf_inherit1@@@ 9@I-override_flag@@@ *class_expr@@@  @@@ "@@@ !@@@@ %@!t@@@ &@@ $@@@ #ɠ@@@@ )@!t@@@ *@@ (@@@ '@E@@F@A;g;k;;@@@ @@~~~~@@K@@@^3@@@@ఠ"ce~~~~@5A@@T@@@_@ఠ&_super~~ ~~&@6A@@\[@@@a@@@`!@ఠ)_inh_vars~~(~~1@7A@@d@c@@@d@b@@@e@@c@@@b<@ఠ*_inh_meths~~3~~=@8A@@i@h@@@h@g@@@i@@g@@@fW@@@~~>@@@@@j\@@@@@k_@@@ఐ?Ǡ"<<~B~V~B~X@>Y@@@?@@@@?@@@?@@@@@@@3@ yr@s@tle@f@g[T@U@VA:@;@<@@@@ఐ;*class_expr5~B~H6~B~R@;@@@;@@@;@@@@@ @@ఐ"ceJ~B~SK~B~U@'@@;@@@R@R@4@@  @@;@@@8@@ภ+Dereferencea~B~Yb~B~d@3@@@][@@@G@@3@@K @@@L@Ġ'Tcf_valv~e~kw~e~r@;'Tcf_val$@j#loc@@@ ,@@@ +u,mutable_flag@@@ -!t@@@ .0class_field_kind@@@ /$boolE@@@ 0@EA@F@A<#<%<#@@@x@ఠ#cfk~e~~e~@;A@@E@@@y%@@~e~~e~@@G@@@z-@@@n~e~@@@@@{2@@@@@|5@@@ఐ=60class_field_kind~~~~@=:@@@=:@@@=7@@@@@3@\U@V@WJC@D@E5.@/@0@@@@ఐ<#cfk~~~~@ @@=X@@@ P@P@ @@' @@@Ġ*Tcf_method%~~&~~@;*Tcf_method@#locN@@@ 2@@@ 1$,private_flag@@@ 3@@@ 4@CB@F@A@@@?5@@@R?2@@@Q@@P@@ఐK!e>%6?%7@$@@?L@@@bR@dR@c.@@  @@?J@@@i2@@ภ+DereferenceU%;V%F@5@@@_O@@@xA@@3@@B@Ġ-Tcf_attributefGMgGZ@;-Tcf_attribute@)attribute@@@ 8@AE@F@A<<<=@@@@@xG[yG\@@@@@e@@@@@Y@@@i@@\@@@l@@@ఐB%empty`f`k@BI@@&v@@@A}}@@(@@@3@{@@@}} @б@г۠>@@@@;@г=@A@@@<@@ @@=@#A@@@?@@@?@@@@@L@@@@}}/@@>@?3@?@@@??>>@>@?@@@[?@@@[@@[?б@г?)Typedtreemm@?mm@@@? @@@[" @@г?)term_judgmm@@?&@@@[.@@@@@[1@@?)?(A@@@?6@@@]'?3@@@]&@@]%;@࣠@#cfkA@>A@@^?K@@@3        @?@@@@  @@ఐ#cfk@@@@@@@@@@@3"!!"""""@?( @@@Ġ,Tcfk_virtual12@;,Tcfk_virtual@@@ @@@@ @A@@B@A;;;;@@@@@DE@@@@@3FEEFFFFF@$@@@@@@@A@@@@@D@@@@@@ఐCq%emptyXY@C@@M@@@@Ġ-Tcfk_concreteij@;-Tcfk_concrete8@]-override_flag@@@ p@@@ @BA@B@A;;!;;N@@@@@@@@@@_@ఠ!e@?A@@@@@m@@@*@@@@@r@@@@@u@@@ఐCZ"<<  !@A@@@Cv@@@@Cu@@@Cr@@@@@@@3@.'@(@)@@@@ఐ@*expression  @@Y@@@@@@@ @@@@ @@ @@ఐL!e  @$@@@@@@R@R@.@@  @@@@@@#2@@ภ+Dereference " -@70@@@`@@@2A@@3@@B@@@A@@@@@@ @б@г10@E-*@@@@)@г('@@@@$@@ @@#@&A@@@@Z@@@@W@@@@@L@@@@ mm2@@@J@@V3#""#####@A#@@@@Z@Z@L@K@@J@@Y@@@[@V@@@[@@[@Uб@г@d)Typedtree>/<?/E@@kB/FC/Q@@@@s@@@[" @@г@q)term_judgO/UP/^@@@y@@@[.@@@@@[1@@@|@{A@@@@@@@]*@@@@])@@](;@࣠@$mexpAlagmak@@A@@@@@@3rqqrrrrr@A@@@@  @@ఐ$mexpauay@@@@@@@@#@@@@3@A9, @@@(mod_descaza@|@@|@@@ @Ġ*Tmod_ident@|ఠ#pth@AA@@|@@@3@&@@@@@@||@@@@@@ @@@@@}@@@@@}@@@@@@ఐ@$path@@@@@@@@@@@@@@@3@P6/@0@1@@@@ఐ=#pth@ @@A @@@P@P@@@# @@O@@@@Ġ.Tmod_structure@|ఠ!s @&BA@@|@@@3@@@@@@@@}f@@@@@}i@@@@@@ఐA,)structure%&@A0@@@A0@@@A-@@@@@3-,,-----@)"@#@$@@@@ఐ0!s=>@ @@AJ@@@+P@-P@,@@# @@R@Ġ,Tmod_functorRS@|@WX@@|@@@3YXXYYYYY@@@@ఠ!ede@}CA@@@@@@@@l@@}@@@@@}@@@@@@ఐE3"<<| }@CŰ@@@EO@@@4@EN@@@3EK@@@2@@1@@03@.'@(@)@@@@ఐAʠ&modexp @Aΰ@@@A@@@RA@@@Q@@P@@ఐL!e  @$@@A@@@bR@dR@c.@@  @@A@@@i2@@ภ%Delay@@@@b@@@xA@@3@@B@Ġ*Tmod_apply%@|ఠ!f'(@DA@@|@@@3@Y@@@ఠ!p*+@ EA@@@@@@@-.@@} @@@@@@(/@@~Q@@@@@~T@@@@@@ఐGՠ$join393=@F@@@GG@@@@@@G@@@~@@}3@E>@?@@70@1@2@@@@ภ9°,@H-A̠ఐE"<<8@Q9@S@D@@@F @@@@F @@@F@@@@@@@)@@ఐB&modexp(T@N@B*@@@B@@@B@@@@@?@@ఐ!fh@Oi@P@H@@B@@@T@T@S@@G @@B@@@W@@ภ+Dereference@T@_@9@@@cy@@@f@@Z@@FH@@@j@ภ:%aicA.ఐFQ"<<arat@D@@@Fm@@@@Fl@@@ Fi@@@ @@ @@ @@ఐB堐&modexp'ao@B)@@@B@@@,B@@@+@@*@@ఐڠ!papaq@@@B@@@T@=@@F @@B@@@C@@ภ+Dereferenceaua@:#@@@c@@@R@@Y@@F@@@Y@ภ9]Av@A@VH@@@@@@P@h@@nA@`H@@@@@@P@@@3>@@HH@@@@@@P@@@@@@Ġ/Tmod_apply_unit@}ఠ!f%&@>FA@@@@@3)(()))))@@@@@@@@~@@@@@@@@@@@ఐF"<<=>@E@@@G@@@x@G@@@wG @@@v@@u@@t3JIIJJJJJ@.'@(@)@@@@ఐC&modexp\]@C@@@C@@@C@@@@@@@ఐL!fqr@$@@C@@@R@R@.@@  @@C@@@2@@ภ+Dereference@:@@@d@@@A@@3@@B@Ġ/Tmod_constraint@~Cఠ$mexp@GA@@=@@@3@@@@@@@~P@@@ @@@@~Q@@@@ఠ#coe@HA@@~@@@@@@0@@@@@$@@@@@'@@@Aఠ(coercion@JA@@@~@@@P@@@d@@@P@G@@@-P@@@P@P@@@@@3@j\U@V@W>7@8@9@@@࣠@#coeA@ KA@@+3@7@2@/ @@Q@@@Q@@9@:@@@@@@!kA  ! @9LA@@=3!  !!!!!@&G@@@@@@@@ఐ.#coe23@@@U321122222@Q@@@@@Ġ,Tcoerce_noneB&C2@~{@@@@e3BAABBBBB@@@@@f@@@ఐ2!kO6@P6A@@@k @@ภ&Return[6B\6H@,@@@eU@@@@@@@l@Ġ1Tcoerce_structurenISoId@~W@sIetIf@@~Y@~X@@@ߠ@@@@@@@@@@@@@~V@~U@@@㠠@~R@@@䠠@@@@@@@@@W@@@/)@@X@@X@Ġ/Tcoerce_functorgqg@~@gg@@@@@j@@@@@@o@@@ @@p@@p@@H @@q@@@ఐ!kLWLX@@@}@@ภ+DereferenceLYLd@< @@@e@@@@@@@@Ġ1Tcoerce_primitiveeoe@~@ee@@~@@@@@@ @@@@@@@ఐӠ!k@@@ @@ภ&Ignore@e&@@@e@@@@@@@ @Ġ-Tcoerce_alias    @}Π@ " #@@}@@@@ఠ#pth % (@7MA@@}@@@@ఠ#coe, *- -@ENA@@?@@@@@@'4 .@@U@@U@@@ఐd(coercion>?@3@@@c@^O@@ @@ 3BAABBBBB@.'@(@)!@@@@@@ఐ(#coeTU@ @@wU@3VUUVVVVV@@@@@࣠@!mAhi@OA@@@@@@ఐI."<<wx@G@@@IJ@@@@II@@@IF@@@@@@@3@C(@@ @@@@ఐE$path@E@@@E@@@8E@@@7@@6@@ఐ#pth@e@@E@@@HY@JY@I.@@  @@E@@@O2@@ఐ^!m@<@@?@@1@@@@@@P@]s@@@@t@@@A @@@A@@@@@@@P@@@@@@ఐ(coercion@ְ@@@@@@@@f@@@I@@@@@@@@@3@@@@@ఐ=#coe@@@@@@P@P@3@@@@@࣠@!mA  @0PA@@g@@@ @@@@ఐIࠐ"<<)*@Hr@@@I@@@@I@@@I@@@@@@@365566666@/+g3@@@ @%@&@@@@ఐFz&modexpKL@F~@@@F~@@@1F{@@@0@@/@@ఐ$mexp`a@h@@F@@@AT@CT@B1@@  @@F@@@H5@@ఐd!mxy @?@@gr@@@RE@@4@@JC@@@VR@&K@!@@@g@@@@@@^P@@@P@[P@X@@@@@@@@Ġ+Tmod_unpack"("3@~ఠ!e"5"6@IA@@@@@"@@"8"9@@~@@@*@@@":@@ @@@/@@@@@2@@@ఐG*expression>D>N@Ga@@@G@@@bG@@@a@@`3@G1*@+@,@@@@ఐ8!e>O>P@ @@G@@@rP@tP@s@@# @@@@@Aao @@@@@k3@c@@@ac@б@гàG+@@@@@г@@@@@@ @@@+A@@@G@@@@xG=@@@w@@vL@s@@@//7@@G.@G<3@H@@@G@G@G0G/@G.@G?@@@[G:@@@[@@[G9б@гGJ$Path7fq8fu@GO;fv<fw@@@GY@@@[" @@гGU)term_judgHf{If@@G]@@@[.@@@@@[1@@G`G_A@@@Go@@@]-Gj@@@],@@]+;@࣠@#pthAef@~QA@@GG@@@3kjjkkkkk@H@@@@  @@ఐ#pthz{@@@@@@@@@@@3@H.( @@@Ġ$Path@&Pident@@ఠ!x@RA@@@@@3@$@@@@@@@A@@@@@D@@@@@@ఐOʠ&single@O#@@@O@@@O@@@@@3@A)"@#@$@@@@ఐ0!x@ @@P @@@P@P@@@# @@V@@@@Ġ$Path@$Pdot@@Iఠ!t@SA@@$@@@3@~@@@@@@V@@@ @@@  @@@@@@@@@@@@@ఐKӠ"<<@Je@@@K@@@@K@@@K@@@@@@@3)(()))))@70@1@2@@@@ఐHW$path;<@H[@@@H[@@@HV@@@@@@@ఐU!tPQ@$@@Hr@@@R@R@.@@  @@Hn@@@2@@ภ+Dereferencegh@?@@@ia@@@A@@3@@B@Ġ$Pathz{@&Papply @@ఠ!f@TA@@@@@3@ @@@ఠ!p@UA@@@@@@@@&@@8@@@@@;@@@@@@ఐNu$join"&@L@@@NN@@@@@@N@@@@@3@==6@7@8/(@)@*@@@@ภ@b)3ktAlఐL"<<):)<@K!@@@L@@@B@L@@@AL@@@@@@?@@>)@@ఐI$path()7@I*@@@I@@@`I@@@_@@^?@@ఐ!f)8 )9@H@@I*@@@pT@rT@qS@@G @@I&@@@wW@@ภ+Dereference)= )H@@a@@@j@@@f@@Z@@L@@@j@ภ@Ű/JTcAΠఐL"<<:J[;J]@K@@@M @@@@M @@@M @@@@@@@@@ఐIr$path'VJX@Iu)@@@Iu@@@Ip@@@@@@@ఐҠ!pjJYkJZ@@@I@@@T@T@@@F @@I@@@@@ภ+DereferenceJ^Ji@@@@@j{@@@@@Y@@MJ@@@@ภ?ksA@A@Om@@@@@@P@@@nA@Ow@@@6@@@7P@@@'@@OO@@@.@@@-P@5@@@@@Ġ$Pathu{u@)Pextra_tyuu@@ఠ!puu@VA@@@@@P@ఠ&_extrauu@WA@@@@@^@@@%u@@{@@@c@@~@@@f@@@ఐJ$path@J@@@J@@@J@@@@@3@|81@2@3+$@%@&@@@@ఐ@!p @@@J/@@@"P@$P@#@@% @@<@@@A @@>@@@<3@@@@@б@гJA@@@@y@гS@W@@@z@@ @@{@+A@@@JX@@@IJS@@@H@@GL@D@@@Dff7@@JF@JR3GFFGGGGG@KG@@@JVJVJHJG@JF@JU@@@[JR@@@[@@[JQб@гJ`)Typedtreebc@Jgfg@@@Jo@@@[" @@гJm)term_judgst@@Ju@@@[.@@@@@[1@@JxJwA@@@J@@@]0J@@@]/@@].;@࣠@!sA&&@XA@@J@@@U3@KB@@@@  @@!mA&&@YA@@Y?@@@`3@KU$@@@T@@@@@@ @@డ*$List*fold_right''@ ' '@@Yհ@@@@J@@@N@j@Yh@@@N@N@h@@l@@k@Z@@@@i@@@g@@f@@e3@8GY|@@@_@A@B@@@@࣠@"itA''@ZA@@.3@@@@@@@#envA''@[A@@63@(@@@@@@@@@ఐK .structure_item'#'1@K@@@K@@@K @@@@@3@&R@@@@@@ఐ<"it/'20'4@&@@f@@ఐ!m<'5='6@Z@@Y@@@R@R@&@@ఐP#envR'7S':@0@@3@@?@@R@6@Y'Z';@@@@@@{@@zO@O@i@@ఐ⠐!so(<Bp(<C@İ@@@@@@@)str_items{(<D|(<M@3)str_items@@@ ^Š@@@ [@@@ Z@@@3(str_type)signature@@@ \@@A @AAAAA@@@3-str_final_env!t@@@ ]@@B@AAAAA@@ @@AAoAqAoA@@@9,@@[@@@yO@O@@@డ|%empty#Env(<N(<Q@ (<R(<W@@X@@O@@@ @@@&@б@г<vuKro@C@@@JAn@гZ~nm@@@@KIj@@ @@LKi@"A@@@K@@@K@@@@@L@V@@@.@@K@K3@L@@@KKKK@K@K@@@\K@@@\@@\K꠰б@гK)Typedtree,,@L,,@@@L@@@[" @@гL)bind_judg, ,@@L@@@\.@@@@@\1@@LLA@@@L@@@]3L@@@]2@@]1;@࣠@!sA<-=-@U\A@@L3@@@3BAABBBBB@L@@@@  @@!mAP-Q-@i]A@@Z@@@3TSSTTTTT@M$@@@@@@@@@ @@#envAg-h-@^A@@Z@@@3kjjkkkkk@'Z@@@@!@"@@@@ @@ఐH!s--@*@@@@@@3@+Z@@@@%@&@@@(str_desc-- @3(str_desc@@@ b 3structure_item_desc@@@ _@@@ 3'str_loc !t@@@ `@@A @ABB BB@@@3'str_env!t@@@ a@@B@ABB#BB2@@"@@AAAAB@@&@<)@@#@@@7@Ġ)Tstr_eval..@;)Tstr_eval4@@@ @@@@ c@@@ d@B@@N@A5BRBV6BRBz@@@H@ఠ!e.!."@_A@@@@@3@c@@@@.$.%@@@@@ @@@,.&@@]@@@@@`@@@@@@@ఠ&judg_e77@ kA@@P@@@R@3        @1*@+@,@@@ఐPӠ"<<7'7)@Oe@@@P@@@@P@@@P@@@@@@@@@ఐN.*expression8797$@Mϰ@@@ND@@@NA@@@@@3@@ఐh!eM7%N7&@=@@N[@@@U@U@G@@  @@NY@@@K@@ภ%Guardd7*e7/@f@@@n^@@@Z@@3@@^[@A@l7 @@డ~N$join#Envz839{83<@ ~83=83A@@X@@@]@@@@]@@@]@@@@@@@3@@@@@@@ఐ&judg_e83C83I@@@Qc@@@@@ఐa!m83J83K@@@@\L@@@"S@$S@#+@@83B83L@@^(@@@@%S@!5@@ఐj#env83M83P@E@@^<@@@R@'R@&I@@_ @@\@@@(R@O@s@@\@@@@Ġ*Tstr_value9QW9Qa@;*Tstr_value"@(rec_flag@@@ e:@@@ g@@@ f@BA@N@A[B{B}\B{B@@@n@ఠ(rec_flag 9Qc 9Qk@$`A@@@@@3@@@@ఠ(bindings9Qm9Qu@3aA@@'@@@ @@@ @@@:&9Qv@@@@@ @@@@@ @@@ఐM.value_bindings6:z7:z@M@@@M@@@/@MM@@@.@@@-M@@@,@@+@@*3GFFGGGGG@F?@@@A81@2@3@@@@ఐN(rec_flagY:zZ:z@@@M@@@KR@SR@R@@ఐS(bindingsm:zn:z@!@@MǠM@@@J@@@IR@VR@T1@@ఐ8!m:z:z@@@\@@@QR@YR@XG@@ఐ7#env:z:z@@@\@@PR@[R@Z\@@q @@]@Ġ+Tstr_module;;@;+Tstr_module@%.module_binding@@@ n@AF@N@ACLCNCLCm@@@*@ঠ%mb_id;;A3%mb_id@@@ s!t@@@ @@@ @@@3'mb_name#loc@@@ @@@ @@@ @@A@AHEEIEE9@@[ @3&mb_uid&!t@@@ @@B@ASE:E?TE:EM@@f @3+mb_presence1/module_presence@@@ @@C)@A_ENES`ENEv@@r @3'mb_expr=@@@ @@D2@AhEwE|iEwE@@{ @3-mb_attributesF=@@@ @@E;@AqEErEE@@@3&mb_locOm!t@@@ @@FG@A}EE~EE@@@@ADDDD@@ @ఠfgfe@FbA@`_@@@@@@343344444@@@@'mb_expr>;?;A8ఠ@\cA@@@@@@@J;K;@@@@@R@@@@@@@@@@@@@@!@@@ఐOB.module_bindinga<b<@OF@@@@OFOE@@@b@@@a@OB@@@c@@`O?@@@_@@^3vuuvvvvv@PM@O@N;8@:@9@@@@@ఐ\%mb_id<<@@@OoOn@@@}@@@|R@R@!@@ఐ]'mb_expr<<@(@@Oy@@@~R@R@4@@<<@@@#@@@{R@?@@ఐu!m<<@T@@^@@@R@R@U@@ఐt#env<<@O@@^@@R@R@j@@ @@k@Ġ.Tstr_recmodule== @;.Tstr_recmodule$@6A@@@ p@@@ o@AG@N@AWCnCpXCnC@@@j@ఠ#mbs==@ dA@@X@@@&@@@%3@@@@@@& @@z@@@'@@}@@@(@@@@ఠ(bindings$>%>'@=lA@@U @ed@@@@@@R@@@@@R@@@R@@@@R@3A@@AAAAA@C<@=@>@@@డ$List#mapT>*U>.@ X>/Y>2@@UR@@@@@@@R@8@@@UO @@@UNA@@@@@@@3lkklllll@+@@@@࣠@TxAঠ%mb_id>9>>Aఠ@mA@@@@@@@L@'mb_expr>@>GAఠ@nA@5@@@]@@@>8>H@@DU@b@@@@@ఐ*%mb_id>M>R@-@/@.@@3@u5 @@@@@@ఐ&'mb_expr>T>[@ @@@@>L>\@@@@@@@>3>]@@@y@@S@S@@@ఐܠ#mbs>^>a@@@UҠ@@@S@S@@@ @@@A@> @@ఐP9recursive_module_bindings?ek?e@P@@@P@PP@@@@@@̠@P@@@@@@@@P@@@@@3@@@@@@@ఐ(bindings#?e$?e@ @@PӠ@PҠP@@@@@@頠@P@@@@@@@@R@R@(@@ఐ!mH?eI?e@ڰ@@_@@@R@R@>@@ఐ#env^?e_?e@հ@@_@@R@R@S@@p @@_@@@R@Y@@@,@Ġ.Tstr_primitivez@{@@;.Tstr_primitive@1value_description@@@ h@AB@N@ABBBB@@@@@@@@@@@@-@@@@@@@@.@@@@@/@@@ఐ;#envAA@@@@Ġ)Tstr_typeBB@;)Tstr_type@(rec_flag@@@ i*0type_declaration@@@ k@@@ j@BC@N@ABBBC@@@0@@BB@@@@@6@@@@@@8@@@7@@@,@@>@@@9@@A@@@:@@@ఐ#envGG @\@@ @Ġ+Tstr_typextH!'H!2@;+Tstr_typext(@f.type_extension@@@ l@AD@N@AXCCYCC&@@@k@ঠ2tyext_constructors H!4 H!F@32tyext_constructors@@@ T5extension_constructor@@@ @@@ @@C3*tyext_path!t@@@ @@@ @A````@@@3)tyext_txt#loc!t@@@ @@@ @@A@A````@@@3,tyext_params.@@@@ @@<(variance@@@ @C+injectivity@@@ @@ @@ @@@ @@B?@A````@@@R3-tyext_privateRO,private_flag@@@ @@DJ@A a0a4 a0aP@@@3)tyext_loc]!t@@@ @@EV@A aQaU aQak@@@30tyext_attributesi@@@ @@F_@A alap ala@@@@A `a `a/@@@ఠ$extsH!IH!M@eA@@{z@@@E@@@D3@ @@@@AH!3H!Q@@@@@GR@F @@@@@@@@H @@@@@I@@@@ఠ'ext_ids IU_IUf@oA@@W!t@@@!R@ @@@R@3@7=6@7@8@@@డ9$List#mapIUiIUm@ IUnIUq@@WͰ@@@@@@@R@ *@@ @Wʠ @@@ Wɠ3@@@ @@@@3@+@@@@࣠@VAঠ&ext_idIUxIU~@3&ext_id@@@ K@@@ @@@ 3(ext_name #loc-@@@ @@@ @@A @AnbUbYobUbn@@@3(ext_type75extension_constructor@@@ @@B@Azbobs{bob@@@3(ext_kind%:extension_constructor_kind@@@ @@C$@Abbbb@@@3'ext_loc0!t@@@ @@D0@Abbbb@@@3.ext_attributes<f@@@ @@E9@Abbbb@@@@Ab@bDb@bT@@@ఠ"idàMIUNIU@fpA@@@@@@@AUIUwVIU@@|U@@@@@ఐ"idbIUcIU@@@@@3cbbccccc@@@@iIUrjIU@@@@@S@$S@#@@ఐ$exts{IU|IU@@@Xj@@@S@'S@%@@ @@@A@IU[ @@డj$join#EnvJJ@ JJ@@^@@@d@@@-@d @@@,d@@@+@@*@@)3@@@@@@@ఐ`$listKK@]@@@@S0@@@nR@?_@@@A@@@@_ @@@>_@@@=@@<@@;'@@ఐSJ5extension_constructorKK@SN@@@SN@@@kSK@@@j@@i<@@ఐi$extsKK@2@@` :@@@VS@qS@oQ@@ఐ!mKK@@@b@@@\S@sS@rg@@KK@@d@@@9@tS@[q@@డ+remove_list#Env,L-L@ 0L1L@@d6@@@h(d6@@@{@@@z@d@@@yd@@@x@@w@@v@@ఐ'ext_idsOLPL@@@hHdV@@@@@@S@S@@@ఐ#envgLhL@ް@@d@@@S@S@@@rLsL@@d@@@8@S@@@ @@b@@@R@7@@@@Ġ.Tstr_exceptionMM @;.Tstr_exception@.type_exception@@@ m@AE@N@AC'C)C'CK@@@@ঠ1tyexn_constructorMM@31tyexn_constructor@@@ @@@ @@@ 3)tyexn_loc !t@@@ @@A @Aaaaa@@%@30tyexn_attributesV@@@ @@@ @@B@A aa!ab@@3@@A$aa%aa@@7@ఠ#extM"M%@fA@@@@@R3@Q@@@@AM M)@@O@@@TR@S @@@X@@J@@@U @@M@@@V@@@డ$join#EnvN-3N-6@ N-7N-;@@`@@@eh@@@@em@@@ep@@@@@@@3      @?8@9@:@@@@ఐT5extension_constructorO<EO<Z@T@@@T@@@T@@@@@@@ఐ]#ext0O<[1O<^@$@@T@@@S@S@.@@ఐ!mDO<_EO<`@ְ@@c@@@S@S@D@@QO<DRO<a@@e@@@@S@N@@డ>&remove#EnvjPbkkPbn@ nPbooPbu@@@ii@@@S.@e@@@S-e@@@S,@@S+@@S*@iii@@@@@@@e@@@e@@@@@@@@@ఐǠ#extPbvPby@@@@@@@@&ext_idPbzPb@@@9@@@S@S@@@ఐ V#envPbPb@ 1@@f(@@@S@S@@@PbjPb@@f2@@@@S@@@ @@@Ġ,Tstr_modtypeQQ@;,Tstr_modtype @Q7module_type_declaration@@@ q@AH@N@ACCCDCC@@@V@@QQ@@@@@[@@@@@ [@@@\@@@Ġ/Tstr_class_typeRR@;/Tstr_class_type 6@H@/!t@@@ z@#loc9@@@ |@@@ {@6class_type_declaration@@@ }@@ y@@@ x@AK@N@ADD!DDj@@@@@/R0R@@,@+@@@g@(&@@@i@@@h@%@@@j@@f@@@ep@@@K@@ @@@kt@@t@@r@@ @@@lx@Ġ.Tstr_attributeZS[S@;.Tstr_attribute @@@@ @AM@N@ADDDD@@@@@jSkS@@@@@p@@@@@ @@@q@@@@ @@ @@@s@@@ఐ #env~TT@ @@@Ġ)Tstr_openUU@;)Tstr_open @0open_declaration@@@ r@AI@N@ACCCC@@@@ఠ"odUU@gA@@@@@x3@ @@@@@@@ @@@y@@ @@@z@@@ఐVv0open_declarationVV@Vz@@@Vz@@@Vw@@@@@3@ <)"@#@$@@@@ఐ0"odVV@ @@V@@@R@R@@@ఐ !mVV@ w@@e2@@@R@R@-@@ఐ #envV V @ r@@e@@@R@R@B@@N @@ (C@Ġ*Tstr_classW W @;*Tstr_class G@Y@1class_declaration@@@ u@hH@@@ w@@@ v@@ t@@@ s@AJ@N@ACCCD@@@@ఠ'classes;W <W %@ThA@@)@(@@@@&%@@@@@@@@@@@3POOPPPPP@ @@@@@D@@ @@@@@ @@@@@@@ఠ)class_idsŠeX)5fX)>@~qA@@\N!t@@@;R@@@@,R@3tssttttt@ B;@<@=@@@@ఠ(class_idƠYAOYAW@rA@@@@+class_infosw@@@@S@ @@@ @@S@ 1@@@S@ @@ S@-@࣠@[A@ঠ+ci_id_classYAZYAe@3+ci_id_class&!a@m@@@ R@@@ @@C/3'ci_virt,virtual_flag@@@ @@@@A(Pgh)Pgh@@;@3)ci_params@2@@@ @@(variance@@@ @+injectivity@@@ @@ @@ @@@ @@A,@ALQhhMQhhT@@_@3*ci_id_name=#loc@@@ @@@ @@B<@A\RhUhY]RhUhq@@o@M30ci_id_class_typeM)!t@@@ @@DH@AhThhiThh@@{@3,ci_id_objectY5!t@@@ @@ET@AtUhhuUhh@@@3'ci_expreb@@FZ@AzVhh{Vhh@@@3'ci_declkC1class_declaration@@@ @@Gf@AWhhWhh@@@3,ci_type_declwO6class_type_declaration@@@ @@Hr@AXhiXhi/@@@3&ci_loc!t@@@ @@I~@AYi0i4Yi0iG@@@3-ci_attributess@@@ @@J@AZiHiLZiHif@@@@AShrhvShrh@@@ఠ"idȠZYAh[YAj@ssA@@@@@3^]]^^^^^@␰eYAKfYAw@@@@@AhYAYiYAn@@U@ @@@pYApqYAq@@@@sYAXtYAr@@@@@@@@ @@ఐ*"idYAu@(@)@*!@@3@'3@@@$A@S@+@A@(@డ$List#mapZ{Z{@ Z{Z{@@]@@@@@@@@@R@=@@@@B@@@AR@5@@:@@g @@;@ @@@A@X)1@@@ఠ1class_declarationʠ [[@&tA@@@@X@@@R@O@@@PR@K@@@L@@MR@H@g@@@R@Ui@@@kR@V@@WR@I@@JR@G376677777@@@@@@࣠@]BA@ঠ'ci_exprO[P[A4ఠ̠@muA@73TSSTTTTT@O[[\\@@@@@A^[_[@@ET@N @@@f[g[@@@@@i[j[@@@@I@@R@@ @@!mA{[|[@vA@@Q3|{{|||||@).b@-@,@@@@@@డe+remove_list#Env\\@ \\@@i@@@mi@@@`@@@_@j @@@^j@@@]@@\@@[3@,8@/@0@@@@ఐR)class_ids\\@}@@mi@@@n@@@mU@qU@o@@ఐYR*class_expr\\@YV@@@YV@@@vYS@@@u@@t2@@ఐ'ci_expr\\ @g@@?@@ఐ{!m\\@I@@L@@\@@jc@@@l@V@U@@o@@V@A@R@@A@@డ$join#Env]]@ ] ]$@@e-@@@j@@@@j@@@j@@@@@@@3"!!"""""@@@@@@@ఐf$list4^%05^%4@dm@@@@@%@@@R@ࠠ@%$@@@@@@R@@@R@fx@@@@@@fk@@@fZ@@@@@@@8@@ఐZ1class_declarationg^%5h^%F@B@@@@ܠY@@@@@@٠@1@@@i@@@j@@@@@@@\@@ఐP'classes^%G^%N@@@fZ@@@S@S@q@@ఐS!m^%O^%P@2@@i>@@@S@S@@@^%/^%Q@@k@@@@S@@@డ+remove_list#Env_R]_R`@ _Ra_Rl@@jа@@@n j@@@@@@@k@@@@kC@@@@@@@@@ఐ)class_ids_Rm_Rv@@@nj@@@@@@S@ S@@@ఐ#env_Rw_Rz@x@@ko@@@S@ S@ @@ _R\ _R{@@ky@@@@ S@@@ @@iP@@@R@@@@@@@ >@Ġ,Tstr_include'`|(`|@;,Tstr_include]@3include_declaration@@@ ~@AL@N@ADkDmDkD@@@@ঠ(incl_mod?`|@`|@3(incl_mod-include_infos!a@O@@@ @@@ 3)incl_type n)signature@@@ @@A @ASxS}SxS@@Y@3(incl_loc!t@@@ @@B@ASSSS@@Z@3/incl_attributes%@@@ @@@ @@C#@ASSSS@@[@@ASeSjSeSw@@X@ఠ$mexp~`|`|@iA@@@@@@)incl_type`|`|@?ఠ#mty`|`|@jA@@G@@@@@A`|`|@@s@@@R@@@@|@@ @@@@@ @@@ @@@@ఠ,included_idsϠaa@wA@@`%Ident!t@@@,R@@@@!R@3@@PI@J@K<5@6@7@@@డC$List#mapaa@ aa@@`װ@@@@W.signature_item@@@-R@0@@@`֠ @@@`ՠ9@@@@@@@/@@డ51signature_item_id%Typesaa@ a a@@@'@@@}S@@@|@@{@oddpdd@@B@@@@4@@@*`@@@)@@(Z@@ఐ#mty+a,a@b@@@@@.j@@Y@@yk@A@3a@@డ$join#EnvAbBb@ EbFb @@g^@@@l@@@8@l@@@7l@@@6@@5@@43SRRSSSSS@@@@@@@ఐ\&modexpeb fb@\@@@\@@@H\@@@G@@F@@ఐ$mexpzb{b@@@\@@@XS@^S@].@@ఐA!mbb@ @@k,@@@\S@`S@_D@@b b@@m@@@D@aS@[N@@డ+remove_list#Envbb@ bb*@@l@@@pl@@@h@@@g@m.@@@fm1@@@e@@d@@cw@@ఐ$,included_idsb+b7@@@pРl@@@v@@@uS@yS@w@@ఐ#envb8b;@f@@m]@@@tS@|S@{@@bb<@@mg@@@C@}S@s@@ @@k>@@@~R@B@@@+C@@@A -@@kD@@@ 3        @@@@-@б@гנ]   @@@@ @гkt @@@@@@ @@@1A@@@]#@@@.] @@@-@@,L@)@@@7,=@@]@]3:99:::::@^:@@@]#]#]]@]@@]"]!@@@\@@@\@]@@@\@@\]@@@\@@\]б@В@г]:&optionde_}ee_@г]?%Identoe_upe_z@]Fse_{te_|@@@]N@@@\ < @@@]V@@@\ A@@@г]P)Typedtreee_e_@]We_e_@@@]_@@@\V @@@@@ @@\], @@г]d)bind_judge_e_@@]l@@@\i@@@@@\le_t @@]p]oA@@@@]]@@@]8@@@]7@]@@@]9@@]6]@@@]5@@]4@࣠@aA@ఠ"idРff@yA@@0T]@@@N@@@M3@^@@@@ఠ$mexpѠff@zA@@@]@@@O@@ff@@@#"@@@S@@@R@@@@T@@Q%@@@@!mAff@'{A@@lX@@@b3@^KD@E@F5.@/@0@@@@  @@#envA$f%f@=|A@@lf@@@m3(''(((((@&lt@@@a@ @!@@@@ @@@@ఠ&judg_EԠAlS]BlSc@Z}A@@b @@@P@r3GFFGGGGG@ /l@@@l@)@*@@@@ఠ#envՠXlSeYlSh@q~A@@l@@@P@s@@! @@@!@ @@v@ఐ"idqmkyrmk{@[@@@@@y@@@x3xwwxxxxx@1@@@Ġ$Nonenn@k@@@@@@@@@@F@@@@@@@@M@@@@ఐb["<<nn@`@@@bw@@@@bv@@@bs@@@@@@@j@@ఐ^&modexpnn@^@@@^@@@^@@@@@@@ఐ$mexpnn@@@_ @@@U@U@@@  @@_@@@@@ภ%Guardnn@x@@@@@@@@3@@@@ఐ۠#envnn@@@@@@@@@@@@@Ġ$Someoo@kڠఠ"id֠oo@2A@@D@@@@@@@@LK@@@@@@@@SR@@@@@@@@@@@ఠ"mMנ=p>p@VA@@sZsY@@@S@3DCCDDDDD@4-@.@/@@@@ఠ#envؠRpSp@kA@@o@@@S@@@ @@@@ @@@డC$take#Envoppp@ sptp@@@ss@@@S5@o@@@S4@C@@@S2@o@@@S3@@S1@@S0@@S/@sss @@@@@@@o@@@@Z@@@@p @@@@@@@@@^@@ఐ"idpp@h@@=@@@T@T@r@@ఐ#envpp@y@@p1@@@T@T@@@_ @@@@@@T@@A@p@@@ఠ&judg_E٠qq@A@@c@@@ S@3@@@@@@@@ఐc"<<qq@bB@@@c@@@ @c@@@ c@@@ @@ @@ @@ఐ`D&modexpqq @`H@@@`H@@@+`E@@@*@@)5@@ఐB$mexp*q +q@@@`_@@@;V@=V@<I@@  @@`]@@@BM@@డl$join$ModeHqIq@ LqMq@@~@@@@@@O@@@N@@Ml@@ఐ$"mMaqbq @u@@a@@@_U@WU@YU@X@@ภ%Guardvq!wq&@z@@@@@zq{q'@@@@h@@@A@~q@@@ఐ&judg_Er+5r+;@@@@@IR@g3@@@@@ఐI#envr+=r+@@@@BR@h@@@@@@ @@i@* @@@ @@b@@@Amks@@@j@U@@rg@A@lSY@@డ$join#EnvtJPtJS@ tJTtJX@@kݰ@@@q1@@@x@q6@@@wq9@@@v@@u@@t3@@@~@@@@@@ఐ&judg_EtJZtJ`@@@d@@@@@ఐ렐!mtJatJb@˰@@o@@@Q@Q@-@@tJYtJc@@qp@@@@Q@7@@ఐ#envtJdtJg@?@@q@@@P@P@K@@a @@o[@@@P@Q@u@@@(f@б@В@г]Ӡг^Ϡa@e@@@/b@@l@@@1f@@г[Ša@b@@@2r@@@@ @@3x@гo@@@@4@@@@5@:KA@@@@aFaE@@@@@@Ơ@aB@@@@@a?@@@@@L@@@@ze__d@@a2@a>3}||}}}}}@b}@@@aBaBa4a3@a2@aA@@@\,a>@@@\+@@\*a=б@гaL)Typedtreevivi@aSvivi@@@a[@@@\$" @@гaY)bind_judgvivi@@aa@@@\%.@@@@@\&1@@adacA@@@aq@@@]<an@@@];@@]:;@࣠@eAঠ)open_exprww@3)open_expr<*open_infos!a@[@@@ @@@ 30open_bound_items )signature@@@ @@A @A;vR1R6<vR1RX@@NS@3-open_override-override_flag@@@ @@B@AFwRYR^GwRYR{@@YT@3(open_env$!t@@@ @@C @ARxR|RSxR|R@@eU@3(open_loc0N!t@@@ @@D,@A^yRR_yRR@@qV@3/open_attributes<L#@@@ @@@ @@E:@AlzRRmzRR@@W@@ApuRR"quRR0@@R@ఠ$mexp۠w w@8A@@@@@3#""#####@b@@@0open_bound_items-w.w@Wఠ"sgܠ5w6w@NA@@_@@@@@A=w>w@@a@@@@@@@!mANwOw@gA@@p@@@3RQQRRRRR@c=6@7@8(!@"@#@@@@  @@#envAdwew@}A@@p@@@3hgghhhhh@&p@@@@ @!@@@@ @@@ఠ&judg_Eߠ}x~x@A@@b@@@P@3@+p@@@@%@&@@@ఐbĠ&modexpxx@bȰ@@@b@@@ b@@@@@@@ఐ$mexpxx@T@@b@@@Q@Q@.@@  @@2/@A@x @@@ఠ)bound_idsy y @A@@g@@@9P@!@@@.P@3@KYR@S@T@@@డJ$List#mapy  y $@ y %y (@@gް@@@@@@@:P@#'@@$@g۠ @@@"gڠ0@@@ @@@@+@@డ:1signature_item_id%Types y ) y .@  y /y @@@@@@,@@@7X@@@6@@5I@@ఐ"sg#y A$y C@̰@@L@@@;Y@@J@@cZ@A@+y @@డ $join#Env9zGM:zGP@ =zGQ>zGU@@nV@@@s@@@E@s@@@Ds@@@C@@B@@A3KJJKKKKK@@@@@@@ఐࠐ&judg_E]zGW^zG]@@@c@@@S@@ఐ"!mmzG^nzG_@@@r @@@bQ@dQ@c+@@zzGV{zG`@@s@@@Q@eQ@a5@@డg+remove_list#EnvzGbzGe@ zGfzGq@@s@@@ws@@@l@@@k@t @@@jt@@@i@@h@@g^@@ఐ)bound_idszGrzG{@h@@ws@@@z@@@yQ@}Q@{v@@ఐm#envzG|zG@H@@t<@@@xQ@Q@@@zGazG@@tF@@@P@Q@w@@ @@r@@@P@O@@@@4@@d@w@б@гa`c]Z@@@@Y@гrNYX@@@@U@@ @@T@,A@@@c@@@c@@@@@L@@@@vii8@@c@c3@e@@@cƠcưcc@c@cŠ@cĠc@@@\E@@@\D@c@@@\F@@\C@@@\Bc@@@\A@@\@cб@гc᠐$list>}?}@В@гc栐&optionK}L}@гc렡%IdentV}W}@cZ}[}@@@c@@@\0I @@@d@@@\2N@@@гc)Typedtreep}q}@dt}u}@@@d @@@\3c @@@@@ @@\4j, @@@d+ @@@\6o}I@@гd)bind_judg}}@@d@@@\7|@@@@@\8@@d dA@@@dC@dBdA@@@]B@@@]A@d>@@@]C@@]@@@@]?d;@@@]>@@]=@࣠@*m_bindingsA~~@A@@8@#Gdi@@@@@@Ǡ@(dh@@@@@@@@3@e@@@@ @@!mA~~@A@@s/@@@3@e9/@.-@@@@@@ @+@@@@@@@@@D@E@@@@@@#envA ~~@&A@@sO@@@3@)8s]@@@@2@3@@@@ @@@ఠ$mids&'@?A@@f@@@ P@@@@P@332233333@#2sw@@@@,@-@@@డ$List*filter_mapI J@ MN@@@@!a@&&optionL!b@&@@@'@@'@>@@@'?@@@'@@'@@'@@@Z@+&@@@@@'S@@@P@@@@@ P@@@P@2^@@@@@@+@@@ih@@@@@@@c@@డ#fst@>@@@@.@(@@0@@x@@ఐ*m_bindings(@̰@@YJ@@@Q@ Q@@@{ @@@A@ @@@ఠ'binding,4,;@A@@@@rݠ{2{1@@@P@ @@@P@@f@@@P@@@P@ @t@@@P@ve@@@P@@@P@@@P@ 3@@@@@@࣠@j A@ఠ#mid,=,@@-A@@:3@M,06@@@@@ఠ$mexp&,B',F@?A@@>@@+,<,,G@@@S@G@@@@ @@!mA=,H>,I@VA@@L3>==>>>>>@+4g@.@/#Z@@@@@@  @@@ఠ&judg_ERLVSL\@kA@@j@@@=S@3XWWXXXXX@'i@@@@@ఐS#midg_mh_p@%@@3gffggggg@@@@Ġ$Noneuvvv@su@@@@@@@@@ఐj8"<<vv@hʰ@@@jT@@@*@jS@@@)jP@@@(@@'@@&6@@ఐf̠&modexpvv@fа@@@f@@@Hf@@@G@@FM@@ఐ$mexpvv@o@@Z@@@@f@@@^^@@ภ%Guardvv@\@@@@@@mm@@,@@sn@Ġ$Some@sఠ#mid@A@@P@P@"y@@@@@z@@z@@@@ఠ"mM@A@@|5|4@@@V@p3@"@@@@@డ$find#Env @   @@@-@@@S @w~@@@S &@@@S @@S @@S @|X|U|G@@@;@@@v@w@@@u4@@@t@@s@@r3@@ఐY#mid56@=@@X@@@ఐ8#envBC@ @@w@@@W@W@T@@E @@YU@A@N @@ఐk"<<XY@i@@@k+@@@@k*@@@k'@@@@@@@3eddeeeee@qy@z@{@@@@ఐg&modexpwx@g@@@g@@@g@@@@@@@ఐf$mexp@I@@'@@@@g@@@+@@డ$join$Mode@ @@s@@@W@@@@@@@@J@@ఐΠ"mM@T@@@@@W@W@W@`@@ภ%Guard@k@@@l@@@@o@@a@@V@r@@@@@@A_g@@@A@LR @@డ+remove_list#Env@ &@@w@@@{w@@@@@@@xf@@@xi@@@@@@@3@@@@@@@ఐ점$mids'+@@@| x@@@@@@S@S@@@ఐڠ&judg_E,--3@'@@k@@@-@@ఐ!m<4=5@@@J:@@@,$@@x@@@@T@C@@],@@KD@l-@@L@ .A@wP@5@A@2@డ.$join#EnvZ>B[>E@ ^>F_>J@@sw@@@x@@@@x@@@x@@@@@@@3lkklllll@o@@@@@@ఐtҠ$list~>L>P@r@@@@@u@@@h@@@g@h@@@i@@fP@/t@@@1@@0@t@@@.t@@@-@@,@@+4@@ఐݠ'binding­>Q®>X@>@@@@u@@@`@@@_@h@@@a@@^@w[@@@]y.@@@\@@[@@Z[@@ఐ*m_bindings>Y>c@@@tY@@@FQ@sQ@np@@ఐ!m>d>e@հ@@w@@@LQ@uQ@t@@>K>f@@yc@@@)@vQ@K@@డ+remove_list#Env>h>k@ >l>w@@y@@@} y@@@}@@@|@y@@@{y@@@z@@y@@x@@ఐ $mids2>x3>|@1@@}+y9@@@@@@Q@Q@@@ఐ@#envJ>}K>@@@y@@@Q@Q@@@U>gV>@@y@@@(@Q@@@ @@w@@@P@'@I@@d@@@0@g~@б@г54В@г10г-,i)&@@@@%@@@@@$@@г#"i"@@@@@@@@ @@@@۠ @@@@гw@@@@@@@@@CTA@@@iW@iViU@@@@@@ @iR@@@@@@@@iO@@@@@L@@@@|q@@iB@iN3@j@@@iRiRiDiC@iB@iQ@@@\ViN@@@\U@@\TiMб@гi\)Typedtree@ic@@@ik@@@\N" @@гii)term_judg@@iq@@@\O.@@@@@\P1@@itisA@@@i@@@]Fi~@@@]E@@]D;@࣠@"ceA@+A@@ji@@@3@j@@@@  @@ఐ"ce)*@@@@@@@@.@@@@321122222@j, @@@'cl_desc;<@3'cl_desc.@@@ /class_expr_desc@@@ @@@ 3&cl_loc !t@@@ @@A @A7777@@@3'cl_typet*class_type@@@ @@B@A77!77;@@@3&cl_env#r!t@@@ @@C!@A7<7A7<7O@@@3-cl_attributes/@@@ @@D*@A7P7U7P7o@@@@A6667@@@Q>@@8@@@H@Ġ)Tcl_identćĈ@;)Tcl_identI@@@ @F!t@@@ #loc!t@@@ @@@ ,@@@ @@@ @C@@G@A7777@@@@ఠ#pthķĸ@A@@,@@@3ĻĺĺĻĻĻĻĻ@@@@@@@.,@@@@@@ @@@@--*@@@@@@@@@Q@@@@@@@@@@!@@@ఐn"<<  @m1@@@n@@@X@n@@@Wn@@@V@@U@@T3@G@@A@B@@@@ఐk#$path@k'@@@k'@@@vk"@@@u@@t@@ఐe#pth @$@@k>@@@R@R@.@@  @@k:@@@2@@ภ+Dereference3 4@bu@@@-@@@A@@3@@y@@@RF@Ġ-Tcl_structureHI,@;-Tcl_structure@)@@@ @AA@G@A7777@@@@ఠ"cs\-]/@uA@@<@@@3`__`````@.@@@@@@@#@@@@@&@@@@@@ఐkܠ/class_structuret3;u3J@k@@@k@@@k@@@@@3|{{|||||@K)"@#@$@@@@ఐ0"csŌ3Kō3M@ @@k@@@P@P@@@# @@]@Ġ'Tcl_funšNTŢN[@;'Tcl_fun@)arg_label@@@ @@@ @!t@@@ @@@@ @@ @@@ 0e@@@ G@@@ @EB@G@A(77)848P@@@;@@N]N^@@0@@@3@@@@@N`Na@@@@@ @ఠ$argsNcNg@A@@=@<@@@@@@@@@@@@$@ఠ"ceNiNk@A@@0@@@2@@NmNn@@@@@:@@@sNo@@@@@?@@@@@B@@@@ఠ#ids%s&s@>A@@qx@@@P@@@@P@310011111@RK@L@M81@2@3@@@డİ$List#mapFsGs@ JsKs@@qD@@@@@*P@Π@Y@@@P@@@P@2@@@qJ@@@qI;@@@@@@@6@@డ#fsttsus@E@@@)M@@Q@G@@ఐ$argsƅsƆs@P@@qt=@@@Q@Q@\@@K @@f]@A@ƒs{ @@ఐs*remove_idsƜƝ@rh@@@t t@@@@@@@t@@@t@@@@@@@3ƭƬƬƭƭƭƭƭ@}@@@@@@ఐ#idsƽƾ@ @@tCtB@@@@@@P@P@@@ఐp"<<@o @@@p@@@@p@@@p@@@@@@@7@@ఐlt*class_expr@lx@@@lx@@@"lu@@@!@@ N@@ఐ"ce @Ұ@@l@@@2T@4T@3b@@  @@l@@@9f@@ภ%Delay @>w@@@@@@Hu@@&'@@p@@@O{@@@@@@@YP@@ @@@Ġ)Tcl_apply<=@;)Tcl_apply@1@@@ @<)arg_label@@@ @ @@@ @@ @@@ @BC@G@A´8Q8Sµ8Q8@@@@ఠ"cede@}A@@2@@@ 3hgghhhhh@6@@@ఠ$argsst@njA@@2@1@@@@;@@@@@@@@ @@@LLj@@G@@@!@@J@@@$@@@@ఠ#argǙǚ@DzA@@@@@@^@n@@@P@g@@@iP@h@@@fP@_@@`P@[n@@@P@\@@]P@Z3ǾǽǽǾǾǾǾǾ@d]@^@_VO@P@Q@@@࣠@qA@@@@-3@@<]@@@@@ఠ#arg@A@@;@@@@@F@D@@b@@ @@ఐ#arg@R@@@@S3@+"@@@Ġ'Omitted ( /@}Ġb02@a@@@@_3@@@@@@ @@l@@l@@@ఐr7%empty6;@qܰ@@e @Ġ#Arg+<H,<K@6ఠ!e4<L5<M@MA@@P@P@k=@@@@@>@@>@@@ఐo;*expressionE<QF<[@nܰ@@@oQ@@@uoN@@@t@@s3MLLMMMMM@S"@@@@@@ఐ)!e]<\@ @@'@@@@@@@Aa @@M@|A@P@@A@@ఐt3$joinniqoiu@rv@@@tLtK@@@@@@tJ@@@@@3zyyzzzzz@@@@@@@ภfȈxȉA(ఐrK"<<Ȕxȕx@pݰ@@@rg@@@@rf@@@rc@@@@@@@'@@ఐn1*class_expr(Ȱx@n4*@@@n4@@@3n1@@@2@@1=@@ఐ`"cexx@@@nK@@@CT@ET@DQ@@G @@nI@@@JU@@ภ+Dereferencexx@f@@@@@@Yd@@Z@@r@@@`h@ภfcAఐr"<<@q?@@@r@@@}@r@@@|r@@@{@@z@@y@@ఐ{f$list'@yJ)@@@@@@@@S@@@@@S@@@S@{Q@@@@@@{D@@@{3@@@@@@@@@ఐ#arg@A@ð@@@@+@ĺpU@@@ˠĞ@@@@@@@@pW@@@@@@@ఐ$argscd@@@{U@@@T@T@@@ @@{o@@@@@ภ+Dereference{|@f@@@u@@@@@@@sD@@@@ภeɋA@A@ug@@@q@@@rP@@@A@uq@@@ @@@ P@p#@@ɡiv@@u}u|@@@@@@P@.@@>#@@t@@@P@4@)@@x@Ġ'Tcl_letɼɽ@;'Tcl_let5@ð(rec_flag@@@  Û@@@ @@@ @!t@@@ @@@@ @@ @@@ 4@@@ @DD@G@AD88E88@@@W@ఠ(rec_flag@ A@@7@@@3@@@@ఠ(bindings@A@@@@@@ @@@@@@@C@B@@@#@@@@$@@"@@@!(@ఠ"ce*+@CA@@4@@@%6@@@v2@@@@@&;@@@@@'>@@@ఐr">>B&C(@q?@@@r@@@@r@@@r@@@@@@@3ONNOOOOO@ f_@`@aXQ@R@S2+@,@-@@@@ఐo.value_bindingsef@oİ@@@o@@@8@o o@@@7@@@6o@@@5@@4@@3'@@ఐ(rec_flagʃʄ@/@@o@@@TR@VR@U;@@ఐ(bindingsʗʘ%@B@@oo@@@S@@@RR@YR@WS@@A@@o@@@aW@@ఐp6*class_exprʵ)ʶ3@p:@@@p:@@@wp7@@@v@@un@@ఐ"ce46@t@@pQ@@@R@R@@@  @@pO@@@@@t@@@Ġ.Tcl_constraint7=7K@;.Tcl_constraint\@5@@@ _*class_type@@@ @@@ :@@@ @@@ D$@@@ @@@ *'MethSet!t@@@ @EE@G@Ao88p9M9d@@@Ƃ@ఠ"ce7M 7O@8A@@5@@@33#""#####@@@@@*7Q+7R@@@?@@@5@@@4 @@67T77U@@A@@@@7@@@6@@B7WC7X@@CB@@@9@@@8%@@N7ZO7[@@E@@@:-@@@qT7\@@@@@;2@@@@@<5@@@ఐp堐*class_exprd`he`r@p@@@p@@@p@@@@@3lkklllll@;VO@P@Q@@@@ఐ]"ce|`s}`u@ @@q@@@P@P@@@# @@M@Ġ(Tcl_openˑv|˒v@;(Tcl_open @0open_description@@@ 6<@@@ @BF@G@A9999@@@@@˧v˨v@@@@@Bw@ఠ"ce˳v˴v@A@@6W@@@C@@@*˻v@@z@@@D@@}@@@E@@@ఐqL*class_expr@qP@@@qP@@@qM@@@@@3@)"@#@$@@@@ఐ0"ce@ @@qj@@@P@P@@@# @@@@@A @@@@@p3@@@@@б@г堡q~@@@@@гˠ@@@@@@ @@@+A@@@q@@@}q@@@|@@{L@x@@@7@@q@q3@s@@@qqqq@q@q@@@\bq@@@\a@@\`qб@гq)Typedtree89@q<=@@@q@@@\Z" @@гq)term_judgIJ@@q@@@\[.@@@@@\\1@@qqA@@@q@@@]Iq@@@]H@@]G;@࣠@"ec/Afg@A@@ʾq@@@3lkklllll@s@@@@  @@ఐ"ec}~@@@@@@@@ q@@@@3̆̅̅̆̆̆̆̆@s3, @@@(ext_kind̏̐@n@@m@@@ @Ġ)Text_decl̟̠$@;)Text_decl~@@@ @ƚ#loc@@@ @@@ @@@ Ƞ&5constructor_arguments@@@ ˠ`5@@@ @@@ @C@@B@A!!c&c*"!c&cq@@@4@@%&@@('%@@@@@@@@@3@Q@@@@@&@@@@@@%5<@@@@@@@@@K@@@@@@@@@@@@@ఐw%empty*0*5@v@@@@@$@Ġ+Text_rebind6< 6G@;+Text_rebindi@!t@@@ Π#loc!t@@@ @@@ @BA@B@A|"crct}"crc@@@ȏ@ఠ#pth0,6I-6L@EA@@#@@@@ఠ$_lid1:6N;6R@SA@@*(@@@@@@@@@>F6S@@ "@@@@@ %@@@@@@ఐsr$pathVW]WWa@sv@@@sv@@@sq@@@@@3^]]^^^^^@<5@6@7/(@)@*@@@@ఐD#pthpWbqWe@@@s@@@P@P@@@% @@@@@A| @@@@@#@́@б@гWVrSP@$@@@~"O@гNM@@@@)J@@ @@+I@*A@@@s @@@0s @@@/@@.L@+6@@@ͦ6@@r@s3ͩͨͨͩͩͩͩͩ@t@@@s s rr@r@s @@@\x@s s@@@\w@@@\vs@@@\u@@\t@@\ssб@гss @@s&@@@\f#@@б@гs%$list@гs*)Typedtree@s1@@@s9@@@\gA @@@sA@@@\iF@@гs;)bind_judg@@sC@@@\jR@@@@@\kU@@@8@@\lX; @@sIsHA@@@sb@@@]O@s`s_@@@]N@@@]Ms\@@@]L@@]K@@]Jk@࣠@(rec_flag2A"#@;A@@̑s@@@F3'&&'''''@t@@@@  @@(bindings3A56@NA@@ͱ̑s@@@V@@@U3@??@@@@@@t* @@@E@$@%@@@@@@$mode4AST@lA@@@@@c3WVVWWWWW@.$#@@@T@@@S@,@-@@@@@@)bound_env5Ano@·A@@@@@n3rqqrrrrr@+@@@b@%@&@@@@ @@@ఠ.all_bound_pats6· Έ  @ΠA@@yp@@@Q@w@@@Q@r3ΓΒΒΓΓΓΓΓ@"1@@@m@+@,@@@డ$List#mapΩ #Ϊ '@ έ (ή +@@y@@@@ȇ@@@Q@y*@@z@y @@@xy3@@@v@@u@@t3@.@@@@࣠@"vb7A 1 3@A@@"A@@@@ఐ"vb 7 9@0@@@@13@Q@@@&vb_pat : @@ @@] @ , A@@@Ch@@R@R@b@@ఐР(bindings B J@@@yW@@@R@R@I@@e @@x@A@  @@@ఠ)outer_env8NVN_@3A@@@@@Q@3      @@@@@@ఐ.remove_patlist/Nb0Np@@@@@@@Q@@@@@@@@@@@@@@@%@@ఐˠ.all_bound_patsRNqSN@/@@Р%@@@@@@R@R@>@@ఐ)bound_envkNlN@հ@@RR@R@O@@D@@SP@A@tNR @@@ఠ,bindings_env9π@ϘA@@@@@Q@3χφφχχχχχ@hvo@p@q@@@ఐw(rec_flagϖϗ@S@@s@@@3ϙϘϘϙϙϙϙϙ@@@@Ġ,NonrecursiveϧϨ@;,Nonrecursive(Asttypes(rec_flag@@@@@@@B@@A4parsing/asttypes.mli``@@@ I@@@@@@@@3ϺϹϹϺϺϺϺϺ@3@@@@@@@@@@@ఠ+binding_env:@A@@@ɥ@@@T@@@@@T@J@@@2T@@@T@@@T@\@࣠@y@Aঠ&vb_patAఠ<@A@@@@3@v9(]@@@@'vb_expr  Aఠ=@)A@@@@@@A@@FV@@@@@!m>A%&@>A@@M3&%%&&&&&@,41@3@2@@@@@@  @@@ఠ"m'?:;@SA@@@@@W@3@??@@@@@@'j@@@@@డw'compose$ModeST@ WX@@V@@@@@@@ @@@@@@@@@@%@@ఐP!mrs @/@@2@@ఐu'patternЁ Ђ@u@@@u@@@X@@@@@u@@@u@@@@@@@V@@ఐ&vb_patУФ@y@@@@ e@@ఐG)bound_envвг#@@@u@@@Y@Y@y@@н о$@@u@@@@@p@@@A@@@ఐL*remove_pat(4(>@@@@G^@@@=V@(@@@'@G@@@&J@@@%@@$@@#3@@@@@@@ఐ&vb_pat(?(E@ɰ@@@@9@@ఐw*expression(G(Q@w@@@x@@@Mx @@@L@@K)@@ఐ'vb_expr(R(Y@@@x'@@@]X@cX@b=@@ఐ"m'-(Z.(\@G@@@@@aX@eX@dS@@:(F7@@@@@3@fX@`\@@u?@@`]@@@@a@.AA@vT@jH@A@E@ఐ$listPakQao@@@@@)@@@S@p@@@r@@q@v @@@oe@@@n@@m@@l3eddeeeee@@@@@@@ఐ+binding_envuapva{@ @@@J@@@@)@@@@@@@@@@@@ఐ](bindingsяa|ѐa@5@@B@@@T@T@2@@ఐT$modeѤaѥa@/@@B@&@T@T@G@@` @@+H@ @@.'@Ġ)RecursiveѻѼ@;)Recursive@@@AB@@A ` `@@@J@@@  @@@@@,@@@@@/@@@@ఠ+binding_envAuu@A@@@˯@@@T@@Q@@@T@@|Ԡv@@@@@@T@@@T@@@T@;@࣠@{MAঠ&vb_patuu@ఠ#x_iCuu@'A@@@@@3@Eu@@@@'vb_expr!u"u@ఠ#e_iD)u*u@BA@@)@@@@@A1u2u@@VV@ @@@@@ఠ'mbody_iEAB@ZA@@wF@@@V@3GFFGGGGG@7C<@=@>)"@#@$@@@ఐwj'patternXY@wn@@@wn@@@V@@@@@wo@@@wl@@@@@@@&@@ఐl#x_iz{@/@@q@@5@@ఐ)bound_env҉Ҋ@@@w@@@W@W@I@@< @@MJ@A@ҕ @@@ఠ)rhs_env_iFҠ ҡ %@ҹA@@7@@@V@3ҨҧҧҨҨҨҨҨ@bpi@j@k@@@ఐy*expressionҷ (Ҹ 2@yN@@@y@@@y@@@@@@@ఐ#e_i 3 6@@@y@@@W@W@+@@డ 'compose$Mode 8 <@  = D@@@@@@@@@@@@@@@@@@@P@@ఐ$mode E I@@@@@@X@X@d@@ఐؠ'mbody_i J Q@n@@x@@@t@@  7! R@@@@@X@@@t @@@A@,  @@@ఠ,mutual_modesG78@PA@@~ xA@@@uV@[@@@hV@3CBBCCCCC@@@@@@@ఠ'mdef_ijHST@lA@@@-@@@#W@xa@@@;W@@@ W@@࣠@}jKAঠ&vb_patst@nఠ#x_jJ{|@ӔA@@s@@@$3~~@=4ӆӇ@@@@@AӉӊ@@0Y@! @@@@ఐx'patternӘә@x@@@x(@@@FX@-@@@,@x@@@+x@@@*@@)@@(3ӭӬӬӭӭӭӭӭ@/;4@5@6@@@@ఐB#x_jӽӾ@ @@@@B@@ఐ,)rhs_env_iF@G@@x@@@O@@t&@NPA@W@VW@A@T@డP$List#map@ @@~@@@@@@@vV@]@@^@~ @@@\~@@@Z@@Y@@X3@@@@@@@ఐ'mdef_ij@ @@@@@@sy@@@r@@q@@ఐ(bindings# $@ɰ@@;@@@iW@yW@w-@@I @@.@ @@@A@1@@@ఠ%env_iL<*:=*?@UA@@@@@V@z3BAABBBBB@ @@@@@ఐ.remove_patlistQ*BR*P@Ű@@@͠@@@V@@@@@@@@@@@~@@}@@|%@@ఐ.all_bound_patst*Qu*_@Q@@ߠ%@@@@@@W@W@>@@ఐ)rhs_env_iԍ*`Ԏ*i@G@@RW@W@O@@D@@SP@A@Ԗ*6 @@@ఐf%env_iԢԣ@e@f@g@@3ԣԢԢԣԣԣԣԣ@bp@@@@ఐz,mutual_modesԱԲ@l@@@@Ե@@@Р@@@@'@@x@@@x@@@ @+@@ v@A@T@@A@@@@ఠ#envN@A@@w C@@@T@@@@T@3@W @ @ @@@@ఠ$mdefO@A@@w٠y@@@@@@T@@@@T@@@.@@@.@@@%@డ|$List%split@ @@w@@@w@I@1@@@@@@xS@@@@w?@@@@@@@T@@డӮ$List#mapDE@ HI@@B@@@@"@@@U@@@m@@U@U@U@@@@K@@@J@@@@@@@@@ఐ+binding_envuv@@@@J@@@@@@@堠@iz@@@@@@@@@@@@ఐe(bindings՗՘@=@@Q@@@V@V@@@գդ@@xNQ@@@U@V@@@ @@@ߠ@@@U@@A@շ@@Aఠ2transitive_closureP  .@A@@@Ϣ7@@@U@@@@T@ϮA@@@@@@T@@@3@ @@@@@@@࣠@#envQA / 2@A@@*3@6@1%@@U@@4@5@@@@  @@@ఠ/transitive_depsR5E5T@A@@@v@@@V@@@@@WZ@2@@@EV@@@@V@@@V@@@V@3%$$%%%%%@7Cc@:@;@@@࣠@%env_iTA65U75Z@OA@@-376677777@:>5A?@@@@@  @@&mdef_iUAJ5[K5a@cA@@83KJJKKKKK@!D@@@@@@@@డ4$join#Env`a@ de@@}@@@@@@ @@@@ @@@ @@ @@ 3rqqrrrrr@(4b@+@,@@@@ఐO%env_iւփ@4@@x@@డi)join_list#Env֖֕@ ֚֙@@ʰ@@@> @@@@@@ @@@@@4@@డ#$List$map2ֹֺ@ ֽ־@@@@!a@&v@!b@&t!c@&r@@'@@'@@@@'@г@@@' @@@'@@'@@'@@'@ƎƏ@@ƍ`@0+@@@@@%T@T@VZ@0b@@@(Z@[Z@UZ@.@@4@@3@@@@1@+@@@/4@@@-@@,@@+@@*@@డ'compose#Env@  !@@@@@@S)@@@@S(@@@S'@@S&@@S%@@@@@@@R@@@@Q@@@P@@O@@N@@ఐ&mdef_iIJ@԰@@6@@ఐk#envVW@.@@@@Z[@@h@@@'Z@Z[@C@@e'@@@@@@\Z@&@@/@@I@90A@fV@`7@A@4@@ఠ$env'V{|@הA@@@@@V@g@@@|V@a3ׇ׆׆ׇׇׇׇׇ@c@@@@@డ$List$map2ךכ @ מ!ן%@@@@@@V@k@|@@@V@@@@V@i1@@m@@l@@@@j@@@@h@@@@f@@e@@d@@c;@@ఐʠ/transitive_deps&5@E@@@;@@@@@@@@@@G@@@@@@@Y@@ఐ#env69@Ű@@(f@@ఐ$mdef:>@@@&Z@@@}W@W@{@@l @@|@A@ @@డց$List(for_all2BQBU@ BVB^@@@@!a@&9@!b@&7@@@(@@(@@(@i@@@(@@@@( @@@( @@( @@( @@( @%%%%@@f@0+@@@@}@@@@U@%@@@@@@@@@@@@$@@@#@@@@@@@@@3a``aaaaa@@@@@@@డI%equal#EnvuB_vBb@ yBczBh@@@@@@S@@@@@S?A@@@S>@@S=@@S<@@@=@@@@@@@@@@O@@@@@@@4@@ఐ#envآBiأBl@z@@A@@ఐ4$env'دBmذBq@K@@}l@@@V@V@V@@ @@@@@V@\@ఐL$env'rr@c@@f@ఐ2transitive_closure@@@@@@u@@ఐh$env'@@@T@@@@@@BN@@@@@b@ @@@ A@@*@@T@@@@ @@@ఠ&env'_iW@A@@.n@@@@@@T@3@@@@ఐS2transitive_closure@#@@@P@@@@@@K@@@@@@@@@@ఐa#env23@S@@o@@@@@@U@U@5@@,@@=6@A@B@@డ$)join_list#EnvPQ@ TU@@@@@@@@@@@@@@@@3a``aaaaa@sle@f@g@@@@ఐs&env'_iqr @ @@@@@@@@T@T@@@0@@ T@@A@@x@@@@@@@m@@  @@@Aه@@  @A@ى@@డk$join#Envٗ٘@ ٜٛ@@@@@@@@@ @@@ @@@ @@ @@ 3٩٨٨٩٩٩٩٩@ # 3 ,@ -@ .@@@@ఐ :,bindings_envٹٺ*@ @@'@@@Q@Q@@@ఐ )outer_env+4@ C@@;@@@Q@Q@+@@A @@@@@Q@1@U@@ T@ k@@ @ @@ J@@б@г B "@ @@@1  @б@г   г   G  @ @@@2  @@ Ơ@@@4  @гV  @@@@5  @@@@6  @@$@@7  @/BA@@@n@@@U@lk@@@T@@@Sh@@@R@@Q@@PL@J @@@$W@iiDC@BEШc@б@гn)Typedtree; < @u? @ @@А!k{@\3EDDEEEEE@E@@J K @@@ @@@\@@б@г$modeY Z @@@@@\@@В@г#Envk l @o p @@@@@@\- @@@г$mode~   @@@@@\;@@@@@ @@\B  @@@2 @@\E5@@@D@@\HG@@N@@\Lڕ A@A@@@֠X@]Q@@@]X@@@@]W@@@@]U@@@@]V@@]T@@]S@@]R@@]Pj@࣠@^Aঠ)Typedtree  #@%c_lhs $ )@A3%c_lhsf!k@@@@ H@@@ @@@3&c_cont~!t@@@ @@@ @@A@AA6--B6--@@T@3'c_guard Ϗ@@@ @@@ @@B@AO7--P7--@@b@3%c_rhs.@@@ @@C%@AX8--Y8-. @@k@@A\5--]5--@@o@ఠCXDHB@!A@G@L@“O@i@@@l3@@@@'c_guard + 2A4ఠY@:A@8#@@@s@@@r@%c_rhs1 42 9A;ఠZ@OA@5@@@x'@@@= > ;@@z2L@V@@@{/@@@@@ఠ$judg[PQ@iA@@&@@@N@3VUUVVVVV@VS@U@T>;@=@<*'@)@(@@@ఐ.$joini j@q@@@GF@@@@@@E@@@@@@@ภyۀہ^eA ఐC"<<ی4ۍ6@հ@@@_@@@@^@@@[@@@@@@@C@@ఐ&option(ۨ @*@@@@@@@R@x@@@@@@k @@@Z@@@@@@@f@@ఐ*expression!+@`@@@@@@@@@@@{@@ఐ'c_guard,3@@@:@@@S@S@@@j @@@@@@@ภ+Dereference7B@y8@@@@@@@@}@@@@@@ภyDLAѥఐ*expression DV@ @@@@@@4@@@3@@2@@ఐ점%c_rhs%DW&D\@Ȱ@@3@@@DQ@FQ@E@@* @@1@@@K@ภx9^dAѾ@A@۞@@@*@@@+O@Z@@?A@ۨ@@@@@@O@)@@O@@+*@@@@@@O@@@@@@A@[@@࣠@!m\Agirhis@܀A@@@@@k3kjjkkkkk@$@@@@@@  @@@ఠ#env]}w~w@ܖA@@@@@O@q3܅܄܄܅܅܅܅܅@*@@@j@$@%@@@ఐG$judgܗwܘw@)@@j@@@s@@ఐC!mܧwܨw@@@@@@ƒ%@@@@+&@A@ܯw~@@@ఐ;*remove_patܾܽ@ @@@6@@@’@/@@@‘2@@@@@@@Ž3@GWP@Q@R@@@@ఐР%c_lhs@@@R@@@¤@@ఐo#env@@@Z@@@žO@³O@²(@@@@!@@@´O@0@@డ1'compose$Mode @ @@@@@@@@º@@@@¹@@@¸@@·@@¶T@@ఐȠ!m,-@@@]@@@d@@ఐP'pattern>?@T@@@T4@@@@N@@@K@@@@@@@@@ఐN%c_lhsYZ@@@РQ@@@@@ఐ#envjk@@@v@@@P@P@@@uv@@v@@@@@n@@@@@O@@@ @@@@ @@@@@@݉im݊@@@@@@@@@@@@@@@@@@M@0@D@@F@ݠ @@@f@@@@@@@@@@@@@@@@@@@@@L@ @@@ݻ 2@ְ֠@Ш@б@г۠ܰ@Y@h@А!k@\3@@@@W@X@@@ @@@\@@б@г砡#Env@l@o@@p@q@@@@@@\ @@г$mode@u@y@@@@@\)@@@@@\,@@@+@@\/. @@5@@\3@A@@@ =@]Z@@@]_@@@@]^@@@]]@@]\@@][ @@]YF@࣠@#pat`A(@)@@AA@@܀==_N@@@8@@@7332233333@;@@@A@@@A@;@S<@T@@@@TA@@@@@@#envaAH@I@@aA@@+Q@@@C3NMMNNNNN@2('@@@6@@@5@0@1@@@@@@@ఠ%m_patbg'OUh'OZ@ހA@@d@@@iQ@G3mllmmmmm@ 1'@@@B@+@,@@@ఐt8is_destructuring_patternށ'O`ނ'Ox@x@@@x[@@@YQ@L@@@Kw@@@J@@I"@@ఐw#patޜ'Oyޝ'O|@K@@s@@@X3@@#@@@@@gR@R9@ภ+Dereferenceޯ(}ް(}@{@@@@@@jE@ภ%Guard޼)޽)@V@@@Q@mQ@'O]@@S@A@'OQ@@@ఠ%m_envc++@A@@@@@íQ@n3@iwp@q@r@@@డT$List)fold_left. . @ . . "@@ý@@@@@@@ÞS@@S@Á@@Ã@@Â@ @ڠ@@@À@@~@@}@@|3@.@@@@డ9$join$Mode. #. '@ . (. ,@@@@@@@@Ù@@@Ø@@×@@ภ&Ignore-. -.. 3@W@@@'@@@á-@@J@@@<@@@ÐD@@Ï4@@డݶ$List#mapL-M-@ P-Q-@@J@@@@u@@@T@k@@@T@ÿ@@@L@@@K@@@þ@@ý@@üf@@࣠@"iddAz-{-@ߓA@@&@@@@డa$find#Envߍ-ߎ-@ ߑ-ߒ-@@@@@@@@@@@@@@@@@@@3ߟߞߞߟߟߟߟߟ@1M@(@)@@@@ఐ8"id߯-߰-@ @@Z@@ఐw#env߼-߽- @L@@*@@@W@W@$@@: @@h%@-- @@@xs@@U@U@@@@@@~@@@}@@@@@@@డ40pat_bound_idents,,@@@@`@@@ S@@@@@@@@@@@@$@@ఐ᠐#pat,,@@@ݠ@@@5@@'@@ 0@@@@@@S@T@A@@3Q@@L@@@îR@S@J@@<@@NK@A@$+@@డV$join$Mode209;309?@ 609@709D@@@@@@@@"@@@!@@ 3>==>>>>>@jxq@r@s@@@@ఐ砐%m_patN09EO09J@v@@H@@@+@@ఐ%m_env^09K_09P@@@X@@@/#@@3@@Q@*&@D @@@ @@@d Av@б@гFгG@@L@@@ I@@S@@@"M@б@г9@@@@@#Y@г@@@@$a@@ @@%c@@@@&e@2@@@@@@@g@@@@f@@@e@@d@@cL@\w@@@@@P@@Ш@б@г2R|2R@А!k@\3@@@2Rz2R{@@@ @@@\@@г$bool2R2R@@@@@\@@@@@\@@@@\@ A@@@ܠ%@]a@@@]d@@@]c@@]b@@]`)@࣠@#patfA33@A@@VeN@@@ĉ@@@Ĉ3      @;@@@A@@@A@2Rv2Rw@@@@*A@@@@@@ఐ&#pat!3"3@"!@@@ć@@@Ć@*@+  @@*)@@@Đ@@@ď30//00000@(>@@@(pat_desc93:3@@@ǐ@Ē@@ĔP@ĕ@Ġ(Tpat_anyO4P4@;(Tpat_anyǥ@@@ @@@ @@@@ALAAܶO  ܷO  @@@i@@@@@Dz]@@@ģ@@@Ģ3dccddddd@4@a;@@@A@@@ġ@@AP}@@@A@A@@@àn@@@ĥ@@@Ĥ@@@ภ}4~4@@@@<@@@@Ġ(Tpat_var55@Ƞ@55@@@@@ĵ3@e@;@@@A #@@@Ĵ@@AP@@@A@A@@@55@@Π@@@ķ@@@Ķ@@55@@@@@ĸ@@@)5@@ @@@ĺ@@@Ĺ'@ @@@@ļ@@@Ļ.@@@ภ55@@@@N6@Ġ*Tpat_alias66@;*Tpat_alias.e@@@ @@@ @Xm@@@ @@@ !t@@@ à#loc@@@ @@@ Ġ!t@@@ Ơ")type_expr@@@ @EAALAAfS y {gU  @@@yl@ఠ#patg66 @/A@@̣@@@@@@3@@;@@@Aݕ̬@@@@@AP7@@@AA@A@@@.6 /6 @@D@@@@@6676@@EC@@@@@@@@B6C6@@F@@@&@@J6K6@@H@@@.@@@xP6@@ȣN@@@@@@7@ @ȪU@@@@@@>@@@ఐ[8is_destructuring_patternh6i63@_@@@_@@@Q@@@@^@@@@@3vuuvvvvv@Gib@c@dZ@@@ఐp#pat6467@ @@@@@@@&@@@Ġ-Tpat_constant78>78K@;-Tpat_constant%@@@ @@@ @ܓ(constant@@@ @ABALAAW  W  ;@@@m@@78L78M@@@@@3@@;@@@A*A@@@@@AP@@@A@A@@@@)@@@@@@@@@@@@@@@@@@@ภ378Q78U@2@@@W!@Ġ*Tpat_tuple8V\8Vf@;*Tpat_tuple7n@@@ @@@ @0@ט@@@ @@@ Ϡ@t͉@@@ @@@ @@ @@@ @ACALAAdY k meZ | @@@wn@@8Vg8Vh@@%@$#@@@@@@@ͫ@@@@@@@@@@@3'&&'''''@@$;@@@Aޞ͵@@@@@AP@@@@JA@A@@@@T$@@ɇ2@@@@@@@@Ɏ9@@@@@@@@@ภߧH8VlI8Vp@ߦ@@@!@Ġ.Tpat_constructU9qwV9q@;.Tpat_constructɫ@@@ @@@ @P#locP!t@@@ @@@ ՠ'7constructor_description@@@ נܸ@@@ @@@ @@@ ؠ%@͠}#locյ!t@@@ @@@ @@@ ݠ@K@@@ @@ @@@ @DDALAAa  dq@@@o@@9q9q@@JH@@@@@@3@@;@@@A&=@@@@@AP@@@A@A@@@@P@@@@@@N:O@@@"@@@!@@@ @@(@N@MLJ@@@'@@@&@@@%@L;@@@(@@$@@@#6@@@?@@;@@@*@@@)>@@B@@@,@@@+E@@@ภ[9q9q@Z@@@M@Ġ,Tpat_variant : :@;,Tpat_variant_Ζ@@@ @@@ @%label@@@ ؾΨ@@@ @@@ @@@ &Stdlib#refN(row_desc@@@ @@@ @CEALAAߓmPRߔo@@@ߦp@@?:@:@@,@@@>3A@@AAAAA@@>;@@@A߸@@@=@@APZ@@@dA@A@@@@5Ǡ@@@A@@@@@@@?@@@50@@@C@@@B @@@\%@@ʷb@@@E@@@D(@@ʾi@@@G@@@F/@@@ภװx:y:@@@@7@Ġ+Tpat_record;;@;+Tpat_record۠@@@ @@@ @Ԡ@ވ#loc܈!t@@@ @@@ @`1label_description@@@ @#8@@@ @@@ @@ @@@ ާ+closed_flag@@@ @BFALAAu^`{@@@,q@@;;@@6@53@@@^@@@]@0@@@_@Pe@@@a@@@`@@\@@@[3@@;@@@AXo@@@Z@@AP@@@A@A@@@;;@@;@@@b@@@r;@@J@@@d@@@c@ @Q@@@f@@@e"@@@ภj ; ;@i@@@*@Ġ*Tpat_array<<@;*Tpat_arraynϥ@@@ @@@ @,mutable_flag@@@ mϷ@@@ @@@ @@@ @BGALAA@@@r@@><?<@@@@@v3@??@@@@@@@=;@@@A@@@u@@APY@@@cA@A@@@@%Ơ@@@y@@@x@@@w@@@C@@˭X@@@{@@@z@@˴_@@@}@@@|&@@@ภͰn<o<@@@@.@Ġ)Tpat_lazy{=|=@;)Tpat_lazyѠ@@@ @@@ @@@@ @@@ @AHALAAJ@@@s@@==@@ !@@@Ō@@@ŋ3@l@;@@@A*@@@Ŋ@@AP@@@A@A@@@@/@@@@@Ŏ@@@ō@@@@@Ő@@@ŏ@@@ภ==@@@@@!@Ġ*Tpat_value> >@;*Tpat_value f@@@ @@@ @E3tpat_value_argument@@@ @AIALAA7~8~@@@Jt@ఠ#path>>@A@@@@@ŝ3@@;@@@AbЈ@@@Ŝ@@AP@@@A@A@@@@/@@K@@@ş@@@Ş@@R@@@š@@@Š@@@ఐ8is_destructuring_pattern>>3@@@@Р@@@[Q@(@@@'@@@&@@%3      @B;@<@=7@@@ఐI#pat0>51>8@ @@г'pattern=><>>C@@ @@@4@@D>4E>D@@@@*@5%@@9@@&@Ġ.Tpat_exceptionS?EKT?EY@;.Tpat_exception̩@@@ @@@ @Ӡ@@@ @@@ @AJALAA$&$j@@@u@@n?EZo?E[@@@@@Ű@@@ů3tssttttt@D@q;@@@A@@@Ů@@AP@@@A@A@@@@/@@Ԡ@@@Ų@@@ű@@۠@@@Ŵ@@@ų@@@ภذ?E_?Ed@@@@!@Ġ'Tpat_or@ek@er@;'Tpat_or!k@ n@@@ @# @@@ (@@@ \(row_desc@@@ @@@ @CKALAA !@@@3v@ఠ!li@et@eu@A@@H@@@@@@@ఠ!rj@ev@ew@A@@Z@@@@@@@@@ex@ey@@98@@@@@@@@@X@ez@@M@@@@@@@ @T@@@@@@@@@డ"||A~A~@@@@@P@@@@O@@@N@@M@@L'%sequorBAР@@@@@@^@@@@@@@z@@@@y@@@x@@w@@v398899999@ sl@m@nb[@\@]@@@@ఐ@8is_destructuring_patternMA~NA~@D@@@DQ@@@ƘR@Ƌ@@@ƊC@@@Ɖ@@ƈ"@@ఐ!lhA~iA~@+@@ߠ@@@Ɨ3@@#@@]@@@Ɔ@ƦS@Ƒ;@@ఐv8is_destructuring_patternA~A~@z@@@z@@@ƸR@ƫ@@@ƪy@@@Ʃ@@ƨX@@ఐ!rA~A~@`@@@@@Ʒi@@#@@@@@ƅ@S@Ʊq@@a@@.r@@@A3@@0@@@˩3@@@@A@б@гг@@@@@w@@Ƞ@@@y@гN@R@@@z@@ @@{@#@@@͠@p@@@@@@@@L@@@@2RRG@@XDH@䠰@ఠ=is_valid_recursive_expressionkCC@ A@@@@@@P@@@OL@ @@@@L@%j&@@@*@@@,L@&@@'L@!@@"L@3@@@@࣠@&idlistmA$C%C@=A@@.3%$$%%%%%@;,C-UKu@@@@@  @@$exprnA8C9C@QA@@4398899999@!E@@@@@@@@ఐ$exprLDMD@G@@@@H3MLLMMMMM@!@@@(exp_descVD WD@ᶰ @@@@@1 @Ġ-Texp_functionfEgE(@ֽ@kE)lE*@@ֿ־@@@:@@@93qppqqqqq@$@@@@ @־@@@;@@@@@@@@< @@@@@= @@@ภ$SomeGzGz@Qภ&StaticGzGz@ݓ@@@@@@JP@R$@@@@@@@C@@@B,@@HH@@@@@?[@@@@@@^@@@@ఠ%rkindoII@A@@G@@@cQ@UM@ఐH3classify_expressionII@@@@^@@@Y[@@@X@@Wa@@ఐ$exprII@@@n@@@@%o@A@I@@@ఠ(is_validpJJ@A@@ğ@@@̪Q@f3@F?@@@A@@@ఐL%rkindKK@ @@@@@h3@@@@Ġ&StaticLL@@@@@@@@p3@#@@@@@@@q@@@@ఠ"tyq)N<I*N<K@BA@@@@@̓T@|<@ఐ3*expression=N<N>N<X@԰@@@I@@@̀F@@@@@~P@@ఐ$exprRN<YSN<]@@@M]@@ภ&Return^N<^_N<d@w@@@X@@@̛l@@(@@6m@A@fN<E@@డ!=pOhqOh@%@@@@@@̿@@@̾S@̢@ +@@@̡@@̠@@̟3@aZ@[@\@@@@డk)unguarded#EnvOhqOht@ OhuOh~@@@@@@S@ @@@S@@@S7@@@S@@@S@@S@@S@@@@@@@̲@٠@@@̱@@@̰ՠM@@@̯@@@̮@@̭@@̬G@@ఐ"tyOhOh@Q@@C@@@U@U@[@@ఐȠ&idlistOhOh@@@h@@V@@vi@@ภaOhOh@{@@@S@v@@d@@w@@@ @Ġ'DynamicPP@@@@@@@@y@@@@@z@@@@ఠ"tyrRR@2A@@@@@T@ @ఐ#*expression-R.R@İ@@@9@@@6@@@@@@@ఐ $exprBRCR@@@=*@@ภ&ReturnNROR@x@@@H@@@9@@(@@6:@A@VR@@డ"&&`S#aS%@@@@@K@@@@J@@@I@@H@@G(%sequandBA@@@@@@]@@@@@@@@@@@@@@@@@@3@wp@q@r@@@@డ)+SS@M@@@(@@@ @@@T@@ R@@@@@@@!@@డ)unguarded#EnvSS @ S S@@$@@@,@@@@$@@@@@@Z@@@@@@@@@@ N@@ఐɠ"tySS@X@@P@@@#V@%V@$b@@ఐՠ&idlistSS@@@o@@?@@[p@@ภnS S"@@@@hT@+}@@M@@@@@@,U@ @@డS>S?@ϰ@@@@@@N@@@MT@1@ @@@0@@/@@.@@డ)dependent#Env>S&?S)@ BS*CS3@@@@@@S@4Q@@@S@@@S03@@@S@@@S@@S@@S@,)@@@@@@A@Jg@@@@@@@?FI@@@>@@@=@@<@@;@@ఐb"ty{S4|S6@@@@@@QV@SV@R@@ఐn&idlistS7S=@S@@@@U@@r @@ภS@SB@!@@@T@Y@@c@@:@@@@ZU@9@@ @@T@!@V@@@@@AK@@@A@J@@ఐʠ(is_validUKSUK[@@@˰@@@@@bP@a3@ @@@ภ$SomeUKaUKe@ఐ%rkindUKfUKk@ܰ@@@@@iP@mP@l@@ @@ܠ@@@h!@ภ$NoneUKq@@@@P@s,@UKP@@.@B@@@@@Y~@@@AD@г蠐&optionCC@г"sdCC@@@@@ @@@@@A@L@~@A@@@@ఠ3is_valid_class_exprsaRVaRi@2A@@@?}@@@@@@L@̀@*class_expr@@@L@ͅ@@@L@͆@@͇L@́@@͂L@387788888@OH@I@J@@@࣠@&idlistuAIaRjJaRp@bA@@,3JIIJJJJJ@9QaRRR@@@@@  @@"cevA]aRq^aRs@vA@@33^]]^^^^^@!C@@@@@@@@A@nbvobv@@@@@@͞@H@@@͝Z!t@@@͜@@͛@@͚3~}}~~~~~@!-V@$@%@@@*class_exprw@A@@@@͙@`@@@͘@@@͗@@͖@@͕)б@г)$modebvbv@@1@@@͋%@@б@гy)Typedtreebvbv@bvbv@@@@@@͌: @@гA#Envbvbv@Hbvbv@@@P@@@͍M @@@@@͎P! @@@1@@͏S4 @@hgA@@@f@@@ͨ@@@@ͧe@@@ͦ@@ͥ@@ͤb@࣠@$modexAcc@A@@]@@@ͺ3@vt@@q@@@@  @@"ceyAcc@A@@[@@@3      @'@@@͹@!@"@@@@@@ఐ"cec c@@@@@@ @@W@@@@3(''(((((@ 1 @@@'cl_desc1c2c@(@@(@@@ @Ġ)Tcl_identAdBd@(@FdGd@@(@@@3HGGHHHHH@ @@@@OdPd@@((@@@@@@ @@[d\d@@(U@@@@@@@@@$ed@@)$@@@@@)'@@@!@@@డK%empty#Envwi=Exi=H@ {i=I|i=N@@Z@@^@@@A9@Ġ-Tcl_structurejOWjOd@(F@jOejOf@@q@@@M@@@ @@)W@@@Q@@)Z@@@T@@@డ~%empty#Envoo@ oo@@@@3g@Ġ'Tcl_funpp@(@pp@@(@@@{@@pp@@Կ@@@@@pp@@(#@("@@@@@@@@@@@@@@pp@@X@@@@@pp@@n@@@@@@8p@@)@@@@@)@@@@@@డ%empty#Envpp@  p p@@@@@Ġ)Tcl_applyuemuev@&ܠ@uexuey@@X@@@@@%ue{&ue|@@&@&@@@@@@@@@@@@@@@ 8ue}@@)@@@@@)@@@@@@డ%empty#EnvJueKue@ NueOue@@-@@@Ġ'Tcl_let\v]v@$ఠ(rec_flagzevfv@~A@@$@@@3ihhiiiii@A@@@ఠ(bindings{tvuv@A@@$K@@@@@@@@vv@@$@$@@@@@@@@@@@@(@ఠ"ce|vv@A@@Y?@@@6@@@Gv@@*b@@@;@@*e@@@>@@@ఐ.value_bindingsww@@@@@@@P@@@@O@@@N @@@M@@L@@K3@jc@d@e\U@V@W6/@0@1@@@@ఐs(rec_flagww@@@9@@@lT@tT@s@@ఐx(bindingsww@"@@FE@@@k@@@jT@wT@u3@@ఐ$modeww@@@@@@yC@@ఐ*class_exprww@ @@@@@@΂@@@@΁@@@΀@@@@~_@@ఐE$mode0w1w@$@@@@@ΎU@ΒU@Αs@@ఐ"ceDwEw@y@@@@@΍U@ΔU@Γ@@OwPw@@@@@q@ΕU@Ό@@ @@@Ġ.Tcl_constraintexfx@$ఠ"ce}nxox@A@@Z@@@(3rqqrrrrr@J@@@@yxzx@@$$@@@*@@@) @@xx@@$$@@@,@@@+@@xx @@$$@@@.@@@-%@@x"x#@@$@@@/-@@@>x$@@+b@@@02@@+e@@@15@@@ఐ+*class_expry(0y(:@@@@F@@@Μ@@@@ΛE@@@Κ@@Ι@@Θ3@[T@U@V@@@@ఐ堐$modey(;y(?@İ@@e@@@ΨT@άT@Ϋ@@ఐv"cey(@y(B@!@@@@@ΧT@ήT@έ+@@< @@p,@Ġ(Tcl_openzCKzCS@$h@zCUzCV@@$j@@@7@ఠ"ce~ zCX zCZ@#A@@Z@@@8@@@zC[@@+@@@9@@+@@@:@@@ఐ*class_expr"{_g#{_q@,@@@@@@ε@@@@δ@@@γ@@β@@α3/../////@.'@(@)@@@@ఐT$mode?{_r@{_v@3@@@@@T@T@@@ఐI"ceS{_wT{_y@!@@*@@@T@T@+@@< @@,@@@A_c @@@@@ҧ@dc@б@гx@|@@@ͩ{@б@гlɠF@s@@@ͪ@г@@@@ͫ@@@@ͬ@@@@ͭ@(8A@@@@@@@e@@@@@@@@@@ҿO@Һ@@@bvxI@@డǀ)unguarded#Env}}@ }}@@@@@@@@@נ@@@@@@ӠK@@@@@@@@@@3@@@@@ఐN*class_expr}}@@@@i@@@@@@@h@@@@@@@@@ภ&Return}}@@@@@@@Q@.@@ఐ"ce}}@@@;@@}}@@r@@@@Q@E@@ఐҠ&idlist}}@@@R@@p@@-@@@@@@Z@Ġ,~-~@@@@@@@@@@@@m@@G@@@@@@t@@@ภB~C~@@@@|@ĠNO@@ST@@@@@@@[\@@@@@ @@@ @@@ @@v@@@ @@@ @@}@@@@@@ @@@ภx'@@(@@D@@@A{}*@@F@+@@G@5,A@aL@$3@A@0@0/@F@A@Kw@x @ κ@ζ@@ΰ@@A@k@5@e@@@@82A@A@~@@@ @ m@n@c@d@@B@CA@0.@@ @@@@@@@@sq@LJ@;9@*(@  @@@ @@@@@3@@@@/Value_rec_checkD@@ C@@@@ߠ@@A@*l@@N@栰@@J@g@VAȚA@ACȝ@@@ H************************************************************************A@@A@L@ H  BMM BM@ H OCaml CC@ H DD3@ H Jeremy Yallop, University of Cambridge E44E4@ H Gabriel Scherer, Project Parsifal, INRIA Saclay !F"F@ H Alban Reynaud, ENS Lyon 'G(G@ H -H.Hg@ H Copyright 2017 Jeremy Yallop 3Ihh4Ih@ H Copyright 2018 Alban Reynaud 9J:J@ H Copyright 2018 INRIA ?K@KN@ H ELOOFLO@ H All rights reserved. This file is distributed under the terms of KMLM@ H the GNU Lesser General Public License version 2.1, with the QNRN5@ H special exception on linking described in the file LICENSE. WO66XO6@ H ]P^P@ H************************************************************************cQdQ@ * Static checking of recursive declarations, as described in A practical mode system for recursive definitions Alban Reynaud, Gabriel Scherer and Jeremy Yallop POPL 2021 Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 ]} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. i=* {1 Static or dynamic size}  X See the note on abstracted arguments in the documentation for Typedtree.Texp_apply ox66pyw@ p We need to keep track of the size of expressions bound by local declarations, to be able to predict the size of variables. Compare: let rec r = let y = fun () -> r () in y and let rec r = let y = if Random.bool () then ignore else fun () -> r () in y In both cases the final address of `r` must be known before `y` is compiled, and this is only possible if `r` has a statically-known size. The first definition can be allowed (`y` has a statically-known size) but the second one is unsound (`y` has no statically-known size). u@Bv@< binding and variable cases {| @3 non-binding cases @< Unit-returning expressions @ 8 The code below was copied (in part) from translcore.ml ouo@ m A constant expr (of type <> float if [Config.flat_float_array] is true) gets compiled as itself.  X@0 Forward blocks @ 8 other cases compile to a lazy block holding a function zz@  We use a non-recursive classification, classifying each binding with respect to the old environment (before all definitions), even if the bindings are recursive. Note: computing a fixpoint in some way would be more precise, as the following could be allowed: let rec topdef = let rec x = y and y = fun () -> topdef () in x  !!@ = Note: we don't try to compute any size for complex patterns """"@  an identifier will be missing from the map if either: - it is a non-local identifier (bound outside the letrec-binding we are analyzing) - or it is bound by a complex (let p = e in ...) local binding - or it is bound within a module (let module M = ... in ...) that we are not traversing for size computation For non-local identifiers it might be reasonable (although not completely clear) to consider them Static (they have already been evaluated), but for the others we must under-approximate with Not_recursive. This could be fixed by a more complete implementation. ##&&@ local modules could have such paths to local definitions; classify_expression could be extend to compute module shapes more precisely '8'@''@ #* {1 Usage of recursive variables}  * For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it. P * [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur.  * A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. Ϭ * A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. Ϙ * A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context. τ * A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context. p Lower-ranked modes demand/use less of the variable/expression they qualify -- so they allow more recursive definitions. Ignore < Delay < Guard < Return < Dereference i33m4J4N@ Returns the more conservative (highest-ranking) mode of the two arguments. In judgments we write (m + m') for (join m m'). u44y5N5R@ z If x is used with the mode m in e[x], and e[x] is used with mode m' in e'[e[x]], then x is used with mode m'[m] (our notation for "compose m' m") in e'[e[x]]. Return is neutral for composition: m[Return] = m = Return[m]. Composition is associative and [Ignore] is a zero/annihilator for it: (compose Ignore m) and (compose m Ignore) are both Ignore. }5567@ K* Create an environment with a single identifier used with a given mode. V +* An environment with no used identifiers. > W* Find the mode of an identifier in an environment. The default mode is Ignore.  p* unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e. 䠠 Z* dependent e l: the list of all identifiers in l that are used in e (not ignored).  ?* Environments can be joined pointwise (variable per variable) v k* Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise P ,* Remove an identifier from an environment. * @* Remove an identifier from an environment, and return its mode  <* Remove all the identifiers of a list from an environment. ͠ 9* A "t" maps each rec-bound variable to an access status a V Usage mode judgments. There are two main groups of judgment functions: - Judgments of the form "G |- ... : m" compute the environment G of a subterm ... from its mode m, so the corresponding function has type [... -> Mode.t -> Env.t]. We write [... -> term_judg] in this case. - Judgments of the form "G |- ... : m -| G'" correspond to binding constructs (for example "let x = e" in the term "let x = e in body") that have both an exterior environment G (the environment of the whole term "let x = e in body") and an interior environment G' (the environment at the "in", after the binding construct has introduced new names in scope). For example, let-binding could be given the following rule: G |- e : m + m' ----------------------------------- G+G' |- (let x = e) : m -| x:m', G' Checking the whole term composes this judgment with the "G |- e : m" form for the let body: G |- (let x = e) : m -| G' G' |- body : m ------------------------------- G |- let x = e in body : m To this judgment "G |- e : m -| G'" our implementation gives the type [... -> Mode.t -> Env.t -> Env.t]: it takes the mode and interior environment as inputs, and returns the exterior environment. We write [... -> bind_judg] in this case. AAG&G(@ A judgment [judg] takes a mode from the context as input, and returns an environment. The judgment [judg << m], given a mode [m'] from the context, evaluates [judg] in the composed mode [m'[m]].  'JDJD )JK@ A binding judgment [binder] expects a mode and an inner environment, and returns an outer environment. [binder >> judg] computes the inner environment as the environment returned by [judg] in the ambient mode. -KK0LWLq@ Expression judgment: G |- e : m where (m) is an input of the code and (G) is an output; in the Prolog mode notation, this is (+G |- -e : -m). 4LL8MrMt@ G |- : m -| G' G' |- body : m ------------------------------- G |- let in body : m >N/N5CNN@ TODO: update comment below for eff_cases (Gi; mi |- pi -> ei : m)^i G |- e : sum(mi)^i ---------------------------------------------- G + sum(Gi)^i |- match e with (pi -> ei)^i : m #FO6O<$KPP!@ G1 |- low: m[Dereference] G2 |- high: m[Dereference] G3 |- body: m[Guard] --- G1 + G2 + G3 |- for _ = low to high do body done: m )VR(R.*\RR@ \ G |- c: m[Dereference] ----------------------- G |- new c: m /eSS0iT T@ Q G |- e: m[Guard] ------------------ G |- ref e: m 5oTT6sUJUR@  [args] may contain omitted arguments, corresponding to labels in the function's type that were not passed in the actual application. The arguments before the first omitted argument are passed to the function immediately, so they are dereferenced. The arguments after the first omitted one are stored in a closure, so guarded. The function itself is called immediately (dereferenced) if there is at least one argument before the first omitted one. On the other hand, if the first argument is omitted then the function is stored in the closure without being called. ;vUU<~WX)@ * (flat) float arrays unbox their elements A\\B\\M@ This is counted as a use, because constructing a generic array involves inspecting to decide whether to unbox (PR#6939). G\\H\]@ 3 non-generic, non-float arrays act as constructors M]h]tN]h]@ r G |- e: m[Guard] ------------------ ----------- G |- `A e: m [] |- `A: m S__T`Q`Y@ Gc |- c: m[Dereference] G1 |- e1: m G2 |- e2: m --- Gc + G1 + G2 |- if c then e1 else e2: m Note: `if c then e1 else e2` is treated in the same way as `match c with true -> e1 | false -> e2` YbbZcc@ 5 G1 |- e1: m[Dereference] G2 |- e2: m[Dereference] --- G1 + G2 |- e1.x <- e2: m Note: e2 is dereferenced in the case of a field assignment to a record of unboxed floats in that case, e2 evaluates to a boxed float and it is unboxed on assignment. _dd`ee@ G1 |- e1: m[Guard] G2 |- e2: m -------------------- G1 + G2 |- e1; e2: m Note: `e1; e2` is treated in the same way as `let _ = e1 in e2` efQfWfg g@ G1 |- cond: m[Dereference] G2 |- body: m[Guard] --------------------------------- G1 + G2 |- while cond do body done: m kgglh#h+@ r G |- e: m[Dereference] ---------------------- (plus weird 'eo' option) G |- e#x: m qhhrii"@ Z G |- e: m[Dereference] ----------------------- G |- e.x: m w i{ixii@ \ G |- e: m[Dereference] ---------------------- G |- x <- e: m }j'j-~jj@ G |- e: m[Dereference] ----------------------- G |- assert e: m Note: `assert e` is treated just as if `assert` was a function. kk #kk@ K G |- M: m ---------------- G |- module M: m &kk*l?lG@ . G |- e: m (Gi; _ |- pi -> ei : m)^i -------------------------------------------- G + sum(Gi)^i |- try e with (pi -> ei)^i : m Contrarily to match, the patterns p do not inspect the value of e, so their mode does not influence the mode of e. /ll7mm@  G |- pth : m (Gi |- ei : m[Dereference])^i ---------------------------------------------------- G + sum(Gi)^i |- {< (xi = ei)^i >} (at path pth) : m Note: {< .. >} is desugared to a function application, but the function implementation might still use its arguments in a guarded way only -- intuitively it should behave as a constructor. We could possibly refine the arguments' Dereference into Guard here. ?nnHpp@ G |-{body} b : m[Delay] (Hj |-{def} Pj : m[Delay])^j H := sum(Hj)^j ps := sum(pat(Pj))^j ----------------------------------- G + H - ps |- fun (Pj)^j -> b : m OqWq]Vr@rH@ param P ::= | ?(pat = expr) | pat Define pat(P) as pat if P = ?(pat = expr) pat if P = pat Xrerm_s s@ > Optional argument defaults. G |-{def} P : m dssgss@ h G |- e : m ------------------ G |-{def} ?(p=e) : m ktOtYott@ J ------------------ . |-{def} p : m rtu uuKuW@ } G |- e: m[Delay] ---------------- (modulo some subtle compiler optimizations) G |- lazy e: m vvww @ - ---------- [] |- .: m yyy7y?@ ( Function bodies. G |-{body} b : m yyzz@ G |- e : m ------------------ G |-{body} e : m (**) (**) The "e" here stands for [Tfunction_body] as opposed to [Tfunction_cases]. zXz\{ {@ * (Gi; _ |- pi -> ei : m)^i (**) ------------------ sum(Gi)^i |-{body} function (pi -> ei)^i : m (**) Contrarily to match, the values that are pattern-matched are bound locally, so the pattern modes do not influence the final environment. {M{Q|y|@ These coercions perform a shallow copy of the input module, by creating a new module with fields obtained by accessing the same fields in the input module. K@ a This corresponds to 'external' declarations, and the coercion ignores its argument @ y Alias coercions ignore their arguments, but they evaluate their alias module 'pth' under another coercion. 2<y@. G |- pth : m SSSe@ ------------ x: m |- x: m G |- A: m[Dereference] ----------------------- G |- A.x: m G1 |- A: m[Dereference] G2 |- B: m[Dereference] ------------------------ (as for term application) G1 + G2 |- A(B): m }@9 G |- struct ... end : m @ G1, {x: _, x in vars(G1)} |- item1: G2 + ... + Gn in m G2, {x: _, x in vars(G2)} |- item2: G3 + ... + Gn in m ... Gn, {x: _, x in vars(Gn)} |- itemn: [] in m --- (G1 + ... + Gn) - V |- struct item1 ... itemn end: m %@ N G |- : m -| G' where G is an output and m, G' are inputs *YY+|@ Ge |- e: m[Guard] G |- items: m -| G' --------------------------------- Ge + G |- (e;; items): m -| G' The expression `e` is treated in the same way as let _ = e /*06@ ? ------------------- G |- type t: m -| G  CF@< G |- module M = E : m -| G d>>d>^@ GE |- E: m[mM + Guard] ------------------------------------- GE + G |- module M = E : m -| M:mM, G gkJR@ ' G |- let (rec?) (pi = ei)^i : m -| G' gg g@ (Gi, pi:_ |- ei : m[mbody_i])^i (pi : mbody_i -| D)^i ------------------------------------------------------------ Sum(Gi) + (D - (pi)^i) |- let (pi=ei)^i : m -| D %&@ b (Gi, (xj : mdef_ij)^j |- ei : m[mbody_i])^i (xi : mbody_i -| D)^i G'i = Gi + mdef_ij[G'j] ------------------------------------------------------------------- Sum(G'i) + (D - (pi)^i) |- let rec (xi=ei)^i : m -| D The (mdef_ij)^i,j are a family of modes over two indices: mdef_ij represents the mode of use, within e_i the definition of x_i, of the mutually-recursive variable x_j. The (G'i)^i are defined from the (Gi)^i as a family of equations, whose smallest solution is computed as a least fixpoint. The (Gi)^i are the "immediate" dependencies of each (ei)^i on the outer context (excluding the mutually-defined variables). The (G'i)^i contain the "transitive" dependencies as well: if ei depends on xj, then the dependencies of G'i of xi must contain the dependencies of G'j, composed by the mode mdef_ij of use of xj in ei. For example, consider: let rec z = let rec x = ref y and y = ref z in f x this definition should be rejected as the body [f x] dereferences [x], which can be used to access the yet-unitialized value [z]. This requires realizing that [x] depends on [z] through [y], which requires the transitive closure computation. An earlier version of our check would take only the (Gi)^i instead of the (G'i)^i, which is incorrect and would accept the example above. +, @ X [binding_env] takes a binding (x_i = e_i) and computes (Gi, (mdef_ij)^j). 12Et@6 Gi, (x_j:mdef_ij)^j 78 @= (mdef_ij)^j (for a fixed i) =Vb>V@$ Gi C!D)@3 (Gi, (mdef_ij)^j) ImyJm@ + Gi, (mdef_ij)^j => Gi + Sum_j mdef_ij[Gj] OdrPd@ G; m' |- (p -> e) : m with outputs G, m' and input m m' is the mode under which the scrutinee of p (the value matched against p) is placed. U66V@ Ge |- e : m Gg |- g : m[Dereference] G := Ge+Gg p : mp -| G ---------------------------------------- G - p; m[mp] |- (p (when g)? -> e) : m [ ?C\@ e p : m -| G with output m and input G m is the mode under which the scrutinee of p is placed. ab=?@ mp := | Dereference if p is destructuring | Guard otherwise me := sum{G(x), x in vars(p)} -------------------------------------------- p : (mp + me) -| G g h&JN@ B Fast path: functions can never have invalid recursive references mF.3nF.y@ . The expression has known size or is constant sM tM;@ ! The expression has unknown size yQzQ@  A class declaration may contain let-bindings. If they are recursive, their validity will already be checked by [is_valid_recursive_expression] during type-checking. This function here prevents a different kind of invalid recursion, which is the unsafe creations of objects of this class in the let-binding. For example, {|class a = let x = new a in object ... end|} is forbidden, but {|class a = let x () = new a in object ... end|} is allowed. Www`OQ@ 3 ---------- [] |- a: m eh2<@ M ----------------------- [] |- struct ... end: m kjrn@ U --------------------------- [] |- fun x1 ... xn -> C: m q tZd@@*./ocamlopt)-nostdlib"-I(./stdlib"-I1otherlibs/dynlink"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&typing"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events2-function-sections"-cϐ F/home/ci/builds/workspace/main/flambda/false/label/ocaml-ubuntu-latest ?>3210/.-,+*)('&%$#"! @@0׋f[){Um 3@@@T0>n{T8cئ5Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Cmi_format0_j~GB0*Data_types0I'Ue`wq]Ѡ)Debuginfo0PtJ=^w/#Env0J=,Wu*Format_doc0]mWϓ:Mݠ%Ident0ki8' x%+Š,Identifiable0~ܽǞ+&Lambda0.Vu$ ^3)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc$Misc0Z1X=_c+Outcometree0euWS~d栠)Parsetree0Uҩ=p>*%"e$Path0(|r>8۠dwx)Primitive0²~$xzT෠%Shape0mA;HXߠ&Stdlib0-i8Q"L{v;-Stdlib__Array0?3$( Q&.Stdlib__Buffer08APF< t..Stdlib__Digest0l!LHgErζ .Stdlib__Domain0Bj|5s)ڠ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ɢb tLir/Stdlib__Hashtbl0ѱN][/!,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V ,Stdlib__List0eXԶ4r+Stdlib__Map0hؤ5O8% By.Stdlib__Result06 ]/J+Stdlib__Seq0nwzG&amg+Stdlib__Set0kb'G|PIF(.Stdlib__String0s.Type_immediacy0A^abOhՠ 0ebDשZ㢐06]xs<%Types0R.z78m)Unit_info0ڀh%(0mUwK! aڱSm=/Value_rec_types0`4xiVC(Warnings0mJɒkgr@@mG@@@$[$ev<@.I@@p]@KU@@77$@II )@=>i@@@ʑ@@@@@Hm|m ,ґ@@@>@H=ͫ@bְM@qKqUCMѿ@@##!@@ku@nyn@r|@8b@uۑu@@fְU_@@@@@yR;JT~@XXͰn@E%E/@t@ t ~es!Ӱ@,60p0z8B@ɒ @fpޑ@*<ő<ϰE%E/@@#t#~@@@@~@@‘@@(,(6@q&_@͎͘@@CCo8oB@""@p~p@EO''#,R@"+@@@R\@@:R:\=߰ӡ>ܜܦMW@@66@ ѡѫ@2@!@@ ܑ Bj@ͫ͵@x@UӰ%@ k ֑Fj30@@BbQ@&Ñ&@ӠI\@ ڑ OPӕ@@@@@U_(@  cm@J˰ӓv@''@ϑٰk#k-@@P>@ @ @@@A@@=@@@B@@