Caml1999T0378C#TmcР&Lambda&Lambda-lambda/tmc.mlRR@@ 3@@@@@@#intA;@@#intA@@@@@&_none_@@A@A@$charB;@@$charA@@@@@ @A@&stringQ;@@&stringA@@@@@@@@%bytesC;@@%bytesA@@@@@@@@%floatD;@@%floatA@@@@@@@@$boolE;@@%falsec@@%@$trued@@+@@@A@@@@@,@A@$unitF;@@"()e@@6@@@A@@@@@7@A@ #exnG;@@@A@@@@@;@@@#effH;@@O@A@A@@@@@@D@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@T@@@%arrayJ;@@R@A%arrayA@@@@@@_@@@ $listK;@@S@A"[]f@@l@"::g@@@T@@y@ @@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\#$@@@A@'FailureY#,@'@@A@0Invalid_argumentX#5@0@@A $#@-Match_failureV#>@@=@9@;@@a@@A5!4!@)Not_foundZ#O@@@A&=)<)@-Out_of_memoryW#W@@@A.E1D1@.Stack_overflow^#_@@@A6M9L9@.Sys_blocked_io_#g@@@A>UATA@)Sys_error[#o@j@@AG^J]J@:Undefined_recursive_modulea#x@@w@s@u@@h@@AXo[n[@:Continuation_already_takenb#@@@A`wcvc@&Stdlib@@@@A3@@@R@@@3@@@A+4tmc_call_informationhAU U4@@;@@#loci@@/scoped_location@@@ hV9;V9P@@CA(explicitj@@r@@@ kWQSWQb@@DA@@A@@@@@UXcd@@@@BA@#V9>@@@Ш@г!"V9@V9O@@(3@@6;@@@A@@@@@@@@@@@@/@@ i@*@#&&!WQ[@ @@Ш@г)$boolWQ]WQa@@1@@4@@ l@0@@A@,@@,+@3@Y@@A+3subterm_informationBYejYe}@@;@@)tmc_calls@@ug@@@ \@@@ ^ Z Z@@GA@@A@@@@@Yee[@@@A#FA@# Z@ @@Ш@г$list!Z"Z@г4tmc_call_information*Z+Z@@&3'&&'''''@9;@@@A@@@@@"@@@@@@@@0 @@3@@ _ @*@@A@&@@&%@310011111@ @@A+3ambiguous_argumentsC@\A\@@;@@(explicit@@@@@ kM]N]@)ocaml.doc# When [explicit = true], we have an ambiguity between arguments containing calls that have been explicitly marked [@tailcall]. Otherwise we have an ambiguity between un-annotated calls. ]^^a@@@@@@@pIA)arguments@@נu@@@ n@@@ pnbob@@JA@@A@@@@@r\sc@@@@HA@#22-z]@@@Ш@г5$bool]]@@=3@ZL;@@@A@@@@@@@@@@@@E@@ l@A>`=<@<<@@@<@<@#88.b@-@@Ш@г;$listbb@г@3subterm_informationbb@@H+@@@M, @@P@@ q/@G@@A@C@@CB@3@/@@A+%errorDee@@;@@?Ambiguous_constructor_arguments@@@ @@ff @@LA@@A@@@@@e@@@AKA@#ff @ @г3ambiguous_argumentsf @@3@`,;@@@A@@@@@@@@@@@@@@@@A@@@@3@@@%ErrorEh",h"1@#@(Location!t@@@K@@@@@Ah"" h"G@@MA@г(Locationh"5h"=@h">h"?@@@#3@9d^@@ @@г%error'h"B@@%  @@@@"@"@"!@ A++destinationF3kJW4kJb@А&offset@387788888@#PJ;@@@A@A@G@B@@@IkJJJo@@@@\NA&offsetF;@@@A@@@@@QpRp@@@@dOA@@UkJOVkJV@@BA@; @A#var@@%Ident!t@@@hlgiilgv@@{PA&offset@@7G@rmwysmw@@QA#loc@@)Debuginfo/Scoped_location!t@@@nn@@RA@@A@Y@@@@@A@@@>@#//&lgl@%@@Ш@г2%Identlgnlgs@7lgtlgu@@@Ac@@D@@f@<@#885mw@4@@Ш@А&offset>pmwmw@@C@@u@A@#==2n@1@@Ш@г@)Debuginfonn@Fnn@@Jnn@ @@V @@Y@@@O@@A@@+pp@@;@@&Offset&lambda@@@@@p@ U In the OCaml value model, interior pointers are not allowed. To represent the "placeholder to mutate" in DPS code, we thus use a pair of the block containing the placeholder, and the offset of the placeholder within the block. In the common case, this offset is an arbitrary lambda expression, typically a constant integer or a variable. We define ['a destination] as parametrized over the offset type to represent formal destination parameters (where the offset is an Ident.t), and maybe in the future statically-known offsets (where the offset is an integer). q{ ' )@@@@@@@SA@@A@@@@@@@A@#p@@гp@@$ǰ@@@@ ؐ@@@@@@@A@@@@3        @@@@ఠ+offset_code} + /} + :@0TA@@@@@@G@@@O@@@G@@@G@3-,,-----@]@@@࣠@%paramAĠ&OffsetB} + <C} + B@;h@@@@iA@@A@Adb@Tఠ!tP} + CQ} + D@cUA@@t@@@3RQQRRRRR@&?[} + +\} + I@@@@@@^} + ;_} + E@@9 @@@@ఐ!ti} + H@@@@@=3gffggggg@"@@@A@NG@@A@@@@@ఠ.add_dst_params} K O~ K ]@VA@@@].!t@@@@@@G@@@@@H@@@G@頠@&Lambda*value_kind@@@G@@@J@@@@G@@@,G@@@@G@@@G@@@G@3@@@@@@࣠@ Aঠ#var K ` K cA3v~@@y@@@3lk@@A@Ai@f3cb@@B@AX@U@At@qఠ@WA@@@@3@%l K K@  @@@@&offset K e K kAఠ@XA@k@@@@@@ K _ K l@гx+destination K w K @г}%Ident K o K t@ K u K v@@@@@@8 @@@@@@=@@# K ^$ K @@@A@@@@¶ms A/ K 0 K @BYA@@3.--.....@QYV@X@WC@@B@A@@@@  @@ภ"::@@  A@  @;@@U@B@AA@A@@@ఐr#varS@  T@  @@@3QPPQQQQQ@$0@'@(@@@@ภ'Pgenvala@  b@  @;'Pgenval@@@ A@@@@CA@A1lambda/lambda.mli @@@@@ @@G@@@r@  s@  @@G@ @ภ=|@  }@  @<@ఐ&offset@  @  @U@@I@9@@ภ'Pintval@  @  @;'Pintval6@@@BCA@A364?@@@@@  @@G@M@@@  @  @@G@R@ఐ¶ms@  @Y@@\@@@@@@@I@c@@H@@@@@h@A@>G@@A@@@@ఠ,add_dst_args B  B  @ZA@@@@@@@@@G@@@@FA&lambda@@@3J@9@@@>G@%@@&> G@,@@@.G@'@@(G@@@ G@3@>@@@@@࣠@Aঠ#varB  B  A=ఠ @&[A@@@@3@QB  C  #@@@@&offset%B  &B  ANఠ@=\A@P@@@@@@1B  2B  @г]+destination<B  =B  @гb&offsetEB  FB  @@j@@@ 1@@@r@@@ 6 @@QB  RB  @@@z:@@@@$argsA]B  ^B  @p]A@@y3\[[\\\\\@JRO@Q@P<9@;@:@@@@  @@ภ.mC  nC  @-ภ$LvarvC  wC  @;$Lvar@@@ @%Ident!t@@@ @A@@V@A*&&*&&@@@@ఐ}#varC  C  @1@@@@@5I@7I@63@=I@@@A@@@@+ @@I@4@ภjC  C  @iఐ+offset_codeC  C  @@@@@@@C@@B@@@A@@@%@@ఐ&offsetC  C  @i@@@@@LJ@NJ@M9@@" @@J@J<@ఐ$argsC  @C@@F@@/@@B@@@0I@=M@@u@@2@@@/R@A@G@S@A@@@@ఠ-assign_to_dstE % )E % 6@^A@@@6@@@G@\@@@[G@U@@V@,@@@wG@h@@i1@@@sG@j@@kG@W@@XG@T3@'\U@V@W@@@࣠@Aঠ#var4E % 85E % ;Acఠ@L_A@@@@]3:99:::::@FCE % %DG  @@@@&offsetKE % =LE % CAtఠ@c`A@HG@I@^@#loc\E % E]E % HAఠ@taA@@@@c(@@@hE % 7iE % I@@bI@Y-@@@@#lamAvE % JwE % M@bA@@a3uttuuuuu@>FC@E@D0-@/@. @@@@@@  @@ภ%LprimF P RF P W@;%Lprim@)primitive@@@ $listK@@@ @@@ /scoped_location@@@ @CH@V@A<2''=2''@@@@ภ2Psetfield_computedF P XF P j@;2Psetfield_computed&@@@ 8@ 4immediate_or_pointer@@@ @@?I@8@@9I@53        @1+@@@࣠@&constr0A x x@ kA@@'3        @6 x {)K@@@@@  @@!t1A x x@ 'lA@@/3        @!>@@@@@@@@@ఠ*block_args2 'y (y@ :mA@@$listKLI@)I@@@@L@B3 2 1 1 2 2 2 2 2@ ,Q@#@$@@@డ$List&append Iy Jy@  My Ny@@@(!a@@@@@@@5 @@@@@:@@@@@@@@(list.mlinn@@,Stdlib__ListO@)$@@@!~@@@N@@@@@@@! @@@@@Z@@@@@@@T@@ఐ&constr y y@@@c@&before y y@3@@@4@@C3@@@@A@3@@A@A@3@@B@A@3@@D@A@3 @@E@A@@A@ @@Z9@@@O@O@|@@k@@@VB@@@@@F@@@@@@@ภ y y@ఐ!t y y@@@@ఐ⠐&constr y y@ǰ@@@%after y y@@ @@ II@@@@M@M@@@" @@@@@M@@@@@@A@ y@@ภ%Lprim z z@zภ*Pmakeblock z z@;*Pmakeblock\@#intA@@@ (Asttypes,mutable_flag@@@ s+block_shape@@@ @CBo~@A~(*~(Z@@@xe@ఐ8&constr 5z 6z@@@[3 3 2 2 3 3 3 3 3@@@@@@#tag ?z @z @ @@5@@@K@K@@ఐV&constr Sz  Tz@;@@y@$flag Zz [z@ @@I@@@K@K@,@ఐq&constr nz oz @V@@9@%shape uz! vz&@а @@[@@@K@&K@$G@@t z'@@@@@ K@N@ఐg*block_args {)4 {)>@V@@@@@ K@(K@'a@ఐ&constr {)@ {)F@@@n@#loc {)G {)J@ @@@@@/K@-z@@@@@@@~@@@@A@I@7@A@@@Ƞ@ఠ/tmc_placeholder| }MS }Mb@ nA@@@@@9I@83        @@@@@@డ .dummy_constant&Lambda  @   @@@@@ @4445@@9M@ @@!@A@ }MO @@@!@ఠ0with_placeholder}  @ oA@@@(@@@$I@;@@<@@@@@T@@@S@@R )&lambda@@@Q@@PI@A@@B7@@@I@C@@DI@=@@>I@:3 $ # # $ $ $ $ $@[ib@c@d@@@࣠@&constrA 7 8@ JpA@@63 6 5 5 6 6 6 6 6@E ? @@@@@@  @@$bodyA K L@ ^qA@б@г>+destination Z [@гC&offset c d@@K@@@E3 c b b c c c c c@.:f@1@2@@ @@@V @@@G@@гRS v w@@Y@@@H@@@@@I@@J @@  @@@r@@@@@ఠ2k_with_placeholder  (  :@ rA@@@@@pL@\3        @2W@@@@Y@@@X@@W@@@V@@U@\@]@@@ఐࠐ%apply =C =H@@@@@@@d@@c@@@@b@@a@@@`@@_@@^.@@)@@@M@@/$flag =W =[@ภ'Mutable =^ =e@;'Mutable(Asttypes,mutable_flag@@@@@@AB@@A4parsing/asttypes.mligWugW~@@@ S@@@@@@@{M@a@T@@@M@@b  @@@@@@M@@e@@@@@@M@@o@@@M@@@ఐ&constr &=K '=Q@@@$@ *=I +=g@@O@@@tM@@@ఐu/tmc_placeholder ;=h <=w@@@S@@@rM@M@@@ @@@A@ G $ @@@ఠ/placeholder_pos R{ S{@ esA@@#intA@@@L@3 Y X X Y Y Y Y Y@@@@@@డ $List&length n{ o{@  r{ s{@@@M!a@C@@@M@@L+@@@K@@J@kk @@C@@@@@@@L@@@@@@@@@@@@=@@ఐs&constr { {@?@@L@&before { {@ @@;&@@@M@M@[@@L @@b\@A@ { @@@ఠ3placeholder_pos_lam  @ tA@@@@@L@3        @r|@}@~@@@ภ&Lconst  @;&Lconstb@ /3structured_constant@@@ @AB@V@Az,&&{,&&@@@ 4@ภ)Const_int  @;)Const_int@@@ k@@@@ _@A@@I@Arvr@@@ L@ఐ/placeholder_pos@8@@@@@L@L@B@@@@9@@@L@J@@B@@+@@@N@A@ @@@ఠ)block_var)*@/'!'# ?/'!'^@@@ @ภ&Strict(2(8@;&Strict(@@@ @@@@C@@A Q!! R!!@@@ @@  @@3@@@K@3@@@@@@ภ'Pgenval(:(A@ m@@@ %@@@K@@ఐ)block_var(C(L@@@M@@@K@K@$@ఐ`2k_with_placeholder(N(`@@@ @@@K@K@6@ఐ$bodyblbp@k@@@@@@@@@@@@@@@@Q@@ະ I#var!s"s@ఐ)block_var*s+s@f@@ @@@ L@ n@ Z&offset89@ภ&Offset@A@ ఐ3placeholder_pos_lamJK@@@ q@@@L@L@@@ @@=@@@L@@ #loc`a@ఐ7&constrkl@@@i@#locrs@˰ @@ @@@!L@#@@@{bq|@@ih@@@@@@L@*@@ @@ @@@@,L@@@O@@ @@@@S@@\@vT@@@U@@7@OV@@@`WA@I@0^@A@[@[Z@q@ఠ,delay_impure@vA@б(block_idг#int @@ @@@23@@@@@ @@б@г!t@@ @@@3@@б@б@г!t@@ @@@4#@@г&lambda$@@ @@@50@@@@@6@@75 @@г&lambda)/@@ @@@8B@@@@@9@@:G @@@>@@; @@<MA@@^U@@= @@>R@@lkA@@ee@@@r@@q@Z@@@p@@o@@T@@@n@@mJ@@@l@@k@@j;@@@i@@h@@g@@ft@@ఠ)bind_list:2:;2C@MwA@@(block_id#intA@@@$J@@@*arg_offset#intA@@@%?J@@@@9 }@@@%J@%x@@@%zJ@@@@@QO@@@@%J@%@@% @@@%J@%A@%J@@@J@@@J@@@J@@@J@@@J@@࣠NNAR2E2M@xA@@T3@e26@@@@@2D @RRAV2O2Y@yA@@X3@ k@@@@@@2N@@'lambdasA2Z2a@zA@@\3@m@@@@@@@@!kA2b2c@{A@@[3@p@@@@@@@@@ఠ.can_be_delayedfpf~@|A@@@ @@@O@@@@@@O@@@O@3@%1@(@)@@@@Ġ$Lvarblbp@ @ bq br@@ @@@3        @4fl@@@@@@ @@,@Ġ&Lconstbub{@D@!b|"b}@@F@@@@@@ @@=@@#@@>@@@ภ$true.b/b@;@@@@M@@@AB@@A@@@@@G'@@:;@@R-@@@ภ%falseB/@;@@@@B@@A@@@2@@W7@@A%paramIQY6@@@7@@gO@>@A@;@@@ఠ(bindings[\@n}A@@4@@@@@%w@ @@%v@@@%uO@@@@O@3qppqqqqq@@@@@@@ఠ$args@~A@@ @@@O@@@1 @@@1@ @@@డ$List%split@ @@@~@!a@@!b@@@t@@@s@@r@a@@@p@J@@@q@@o@@n@a>>b>>@@`A@2-@@@*@w@\@@@@@@@@@@@ڠ@kj@@@@@@@3@w@@@@డe$List$mapi@ @@@@@@@@@@!a@@@!b@@@@@@@@@@@@@@@@@@@@@CCCu@@X@2-@@@@*@@@@@@ T@@@ER@ @@ @@*@@@%NR@%K@R@%L@@%MR@L@@@MR@H@"R@I@@JR@@@ @@ @@ @+@@@@@E*@@@@@@@@@࣠@!iA@A@@s@@@/@@@@#lamA@@A@@S3@@@@.@@@@@@  @@ఐǠ.can_be_delayed @1@@@ @@@<@@;@@@:@@93@!-v@$@%@@@@ఐ4#lam  @ @@@@@@~@@@GV@C@@ภ$None@;!q*@@W@@@@AA@A@@#@@@v@@@N-@@ఐ]#lam@6@@9@@@@@@@@OB@@ఠ!v6H6I@AA@@@@@\V@P3@V@@@డ,create_local%Ident6L6Q@ 6R6^@@Ѱ@@@@@@U@@T@@@S@@R @@డ&Printf'sprintf:_r;_x@ >_y?_@@@&Stdlib&format!a@Π$unitF@@@&stringQ@@@@@@@@@@@*printf.mli@@.Stdlib__PrintfC@.)@@@&@-@@$@3@@@$@@$3@@@^W@%CW@iW@$W@$@@$W@$@@$W@Z7@@@]4@@@^@@@\@@[#@@Y@@ภ8CamlinternalFormatBasicsl&Formatn__A;&Format8CamlinternalFormatBasics'format6!a@ڠ!b@۠!c@ܠ!d@ݠ!e@ޠ!f@@@@$7@'#fmt$ @@@$5&stringQ@@@$6@B@@A@AF>P@KA@@@@@&O@&3@* '@@@&@@@&@(@)@@@డ٠۰>m>n@ذ@@@ c@@@&@@&@@@@&@@&@@@&@@&@@&&@@డ=$List&length>S>W@ >X>^@@ j@@@ j@@@&P@&@@@&@@& @@@&@@&N@@ఐ[&constr>_>e@0@@"@@@&@&b@&before>f >l@j@@ +@@@&Q@&Q@&q@@< @@ @@@&@&Q@&y@@A">o#>p@@>@@@&P@&P@&@@T @@@A@->B @@ఐ )bind_list9tx:t@@@  @@@'@@'  @@@'@@'@ b@@@'@@@'@@'@@ ߠ@@@'@@'r@@@' A@'@@' @@' @@' @@' @@'3`__`````@@@@@@ (ఐ栐(block_idrtst@ư@@ 1@@@';Q@'=Q@'<@ ,ఐ*arg_offsettt@!@@ 5@@@'9Q@'?Q@'>+@@ఐ&constrtt@а@@@@@'D@'A?@%aftertt@@@ I@@@'5@@@'7Q@'EQ@'BQ@@~@@@@ A@@@'4@@'3@@@'0A@'2@@'1@@'/b@@࣠@&vafterAtt@LA@@ [@@@'`@@@'_3@{@@@@  @@ఐ3$body@@@@/@@@'h@@'g.@@@'f@@'e3@- ~@@@'^@@@']@+@,@@@@e=@@@'Q@'@k8@@@'Q@'@q/@@@'Q@'@&before$%@ఐ'vbefore-.@@@98@@@'|@@@'{Q@'}@@%after?@@ఐv&vafterHI@O@@BA@@@'@@@'Q@'[@;@@@'Q@'@@ఐ &constrcd@@@@@@'Q@'Q@'t@no@@@@@'qQ@'|@@@@@@@'Q@'o@|t@@@ @@@'U@@@'T@@'S@@@'O@'P@@'RO@'O@'@@Z$@@@g%@@@/'@@@ @@@&@@@&@@& @@@'M@&@@&M@'M@' @@>@@!@@@@ %@@@@@@@@@@@@@@@@@@@@@@@@@(@@@@@@@@@I@'I@'<@ 5d@б *гF ' &@J@@@s # @б@г9  @=@@@t , @б@б@г(  @,@@@u 7 @г+  @/@@@v > @@@@w@@x B @гW  @[@@@y I @@@@z@@{ M @@(@@|@@} Q @ a5@@~@@ U @ tA@@ h h@@@(@@(@ ]@@@(@@(@@ W@@@(@@( M@@@(@@(@@( >@@@(@@(@@(@@(I@( w@A@4@@@ z@tnA@ki@z@G @   @@@e@@d@ @@@c@@b@@ @@@a@@` z@@@_@@^@@] k@@@\@@[@@Z@@Y@ @ @@3[ZZ[[[[[@  "@@cnd@03a``aaaaa@(@@@!tI;@@#tag@@J@@@(wO  xO  @@NA$flag@@,mutable_flag@@@(!P  P  @@OA%shape@@+block_shape@@@($Q  Q  @@PA&before@@ &lambda@@@('@@@()R  R  @@QA%after@@&lambda@@@(,@@@(.S  $S  7@@RA#loc@@D/Scoped_location!t@@@(1T 8 <T 8 ^@@SA@@A@@@@@N  U _ b@} The type [Constr.t] represents a reified constructor with a single hole, which can be either directly applied to a [lambda] term, or be used to create a fresh [lambda destination] with a placeholder. J  M  @@@@@@@@@MAA@%apply@}@@@(O@@(T@&lambda@@@(P@@(R&lambda@@@(Q@@(S@@(U@Y  Y  @ X [apply constr e] plugs the expression [e] in the hole of the constructor [const]. W d fX  @@@@@@@TA@0with_placeholder@@@@(V@@(`@@@@@(W@@@(Y@@([0&lambda@@@(Z@@(\@@(^5&lambda@@@(]@@(_@@(a@1]df2]d@䐠 s [with_placeholder constr body] binds a placeholder for the constructor [constr] within the scope of [body]. ?[  @\"c@@@@@@@RUA@,delay_impure(block_id%@@@(b@@(m@@@@(c@@(k@@@@@(d@@(fo&lambda@@@(e@@(g@@(it&lambda@@@(h@@(j@@(l@@(n@pmqm@#  We may want to delay the application of a constructor to a later time. This may move the constructor application below some effectful expressions (for example if we move into a context of the form [foo; bar_with_tmc_inside]), and we want to preserve the evaluation order of the other arguments of the constructor. So we bind them before proceeding, unless they are obviously side-effect free. [delay_impure ~block_id constr body] binds all inpure arguments of the constructor [constr] within the scope of [body], which is passed a pure constructor. [block_id] is a counter that is used as a suffix in the generated variable names, for readability purposes. ~_lW@@@@@@@VA@@БA+  N  N  @@"@#!!O  @@@Ш@г$#intO  O  @@,3@a6;@@@A@@@@@@@@A@@3@@(@/@#++$P  @#@@Ш@г.(AsttypesP  P  @5P  P  @@@=@@@@@(" @:@#660Q  @/@@Ш@г9:Q  Q  @@@.@@C@@(%1@>@#::/R  @.@@Ш@г=$listR  R  @гBCR  R  @@IH@@@NI @@Q@@(*L@G@#CC8S  )@7@@Ш@гF$listS  2S  6@гKLS  +S  1@@Rc@@@Wd @@Z@@(/g@P@#LLC T 8 ?@B@@Ш@гO)DebuginfoT 8 BT 8 K@WT 8 LT 8 [@@[T 8 \ T 8 ]@ @@e @@h@@(2@`@@A@\ZY@YY@@@Y@Y@@3+**+++++@@Ahg@YY8Y  9Y  @б@гX!tBY  CY  @@`3?>>?????@@A@@б@г]^NY  OY  @@d @@г`aVY  _@@f`@@p a@@yb@@{@dc@ .cb@bb@@@b@b@"p``l]djm]dz@б@г_!tv]d}w]d~@@g3srrsssss@5@A@@б@б@гb+destination]d]d@гg&offset]d]d@@o@@@t @@гlm]d]d@@s!@@" @@гpq]do@@v)p@@*]dr@@,/s@@@ut@Wyts@ss@@@s@s@9qqmm@бrгn#intmm@@v3@L@A@@б@гs!tmm@@{ @@б@б@гt!tmm@@|@@гyzmm@@"@@# @@г}~m|@@*}@@+m@@-#@@.m@@@@ǐ@@@@@@<@3@=@A3@@@I  n@@@@B@C@@@ I  @ @@I  @@#DpsJ)0)3@.A@БA+#dpsK,-@А!a@(310011111@@A@b`@75@@@@5;@@(@A@A&@@)@@@)@(G@B@@@UV@@@@hXA@@YZ@@@;*@A@A$tail@@@(@@(#dstC*@@@(@@@(@@(GL@(@@(@@(Y@@@@@(@@@%@@Aбг$bool@@"Q@@бг+destination@г &offset@@(e@@@-f @@А!a(jL@@9lN@@EnP@@R@@RQ@3@p@@A+!tL@А!a@))3@c;@@)(@A@A@G@B@@@@y  We want to optimize nested constructors, for example: {[ (x () :: y () :: tmc call) ]} which would naively generate (in a DPS context parametrized over a location dst.i): {[ let dstx = x () :: Placeholder in dst.i <- dstx; let dsty = y () :: Placeholder in dstx.1 <- dsty; tmc dsty.1 call ]} when we would rather hope for {[ let vx = x () in let dsty = y () :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The idea is that the unoptimized version first creates a destination site [dstx], which is then used by the following code. If we keep track of the current destination: {[ (* Destination is [dst.i] *) let dstx = x () :: Placeholder in dst.i (* Destination *) <- dstx; (* Destination is [dstx.1] *) let dsty = y () :: Placeholder in dstx.1 (* Destination *) <- dsty; (* Destination is [dsty.1] *) tmc dsty.1 call ]} Instead of binding the whole newly-created destination, we can simply let-bind the non-placeholder arguments (in order to preserve execution order), and keep track of a list of blocks to be created along with the current destination. Instead of seeing a DPS fragment as writing to a destination, we see it as a term with shape [dst.i <- C .] where [C .] is a linear context consisting only of constructor applications. {[ (* Destination is [dst.i <- C .] *) let vx = x () in (* Destination is [dst.i <- C (vx :: .)] *) let vy = y () in (* Destination is [dst.i <- C (vx :: vy :: .)] *) (* Making a call: reify the destination *) let dsty = vy :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The [delayed] argument represents the context [C] as a list of reified constructors, to allow both to build the final holey block ([vy :: Placeholder]) at the recursive call site, and the delayed constructor applications ([vx :: dsty]). In practice, it is not desirable to perform this simplification when there are multiple TMC calls (e.g. in different branches of an [if] block), because it would cause duplication of the nested constructor applications. The [delayed_use_count] field keeps track of this information, it counts the number of syntactic use sites of the delayed constructors, if any, in the generated code. )6):@@@@@@@@@YA@@@@@;$@A$code@@'delayedZ=!t@@@)R@@@)T@@)X͠@M@)U@@@)W@@)Y@@ ZA1delayed_use_count@@@@@)]  @@ [A@@A@Y@@@@@FC@@5@#// @@@Ш@б2г.$list  @г3&Constr & '@: * +@@@Br@@@Gs @@г=#dps 5 6@А!aE < =@@@L @@^ @ @@b@@)Z@J@#FFA G @@@@Ш@гI#int P Q@@Q@@T@@)^@P@@A@ (@@@@@@@@3 \ [ [ \ \ \ \ \@@@@ఠ,write_to_dstԠ m)<)B n)<)N@ \A@@@S@@@)@@@)M@)@@)@['@@@*'Q@)@@@)M@)@@)@@@@)M@)@@)@@@)M@)@@)M@)@@)M@)@@)M@)3        @@@@࣠@#dstA )<)O )<)R@ ]A@@>3        @M )<)> )x)@@@@@  @@'delayedA )<)S )<)Z@ ^A@@C3        @!U@@@@@@@@!tA )<)[ )<)\@ _A@@@3        @W@@@@@@@@ఐ점-assign_to_dst )_)c )_)p@@@@@@@)@@@)@@)@ @@@)@@)@@@)@@)@@)3        @)5k@,@-@@@@ఐa#dst!)_)q!)_)t@F@@@@)@@@(@@@)@@)+@@@)@@)@@డ$List)fold_left!-)x)|!.)x)@ !1)x)!2)x)@@@@#acc@F@@$@!a@I@@# @@"@@!@@ @@@@ɠ@@@@@@@@@@@@000o@@^@-(@@@@M@*9Q@)@@)@@@)@@)@@)@@)@ @@)@@@@)@@)@@)@@)@@)s@@࣠@!tA!)x)!)x)@!`A@@%3!!!!!!!!@@@@@@@&constrA!)x)!)x)@!aA@@ 3!!!!!!!!@7@@@@@@@@డ%apply&Constr!)x)!)x)@ !)x)!)x)@@@&@@@)9@@)8@!@@@)7@@)6!@@@)5@@)4@@)3@@@@:@@@*@@*@@@@*@@*@@@*@@*@@*3!!!!!!!!@@LL@C@D@@@@ఐS&constr!)x)!)x)@ @@Y@@ఐo!t!)x)!)x)@Y@@@@K@@M@*%U@*#!@!)x)!)x)@@@@@*@y@@*@@*@@*R@*4R@*0~@@ఐ@b@ఠ$unit#&**#&**@#fA@г!t#&*+#&*+@г#p$unit#&**#&**@@ @@@+$3########@@@@@ @@@ @@@+&@@'&A@@ @@@+.@@@+-@ຠp$code#'++ #'++@࣠'delayedA@#'++#'++ @@@@@+T@@@+S/@@$'++ @$tailA@$'++'$'++(@@@@@+e>@@$'++!@#dstA@$'++.$'++/@@@@@+v@@@+uQ@@$('++) @@ภ"()$0(+3+9$1(+3+;@;##@@@N@@@@A@@A$@@#@ @@@@@+|f@$='++$>)+<+A@@`^]@@@+H@@@+G@@+FZ#@@@+E@@@+D@@+CM@+~@ԡ1delayed_use_count$Z*+C+G$[*+C+X@@$`*+C+[$a*+C+\@@c@@@+M@+@@@$h&*+$i++^+a@гàг$@(@@@+/@@ @@@+1@A@@@@@+@@@+M@+@A@$&**!@@"@@ఠ#map$-+c+i$-+c+l@$gA@@@@!a@,M@+@@+!b@+M@+@@+M@+@@+@M@+@@@+M@+@@+M@+@@@+M@+@@+M@+@@+M@+3$$$$$$$$@ @@@+,@@@++@@@@@࣠@!fA$-+c+n$-+c+o@$hA@б@А>C $-+c+r$-+c+t@@А=B%$-+c+x$-+c+z@@@O@@+I@@+, @@$-+c+m$-+c+{@@@W0@@@@!dA%-+c+}%-+c+~@%iA@гP!t%-+c+%-+c+@А!aX3%%%%%%%%@NA@w@@+q@@+@<@=@@%-+c+%-+c+@@@fe@@@+@@%&-+c+|%'-+c+@@@n@@@@ຠ$code%3.++%4.++@࣠'delayedA%A.++%B.++@%TjA@@^]@@@,@@@,3%G%F%F%G%G%G%G%G@7R@@@+@M@N@@@@%T.++@$tailA%_.++%`.++@%rkA@@@@@,,3%a%`%`%a%a%a%a%a@-@@@,@@@,@,@-@@@@%q.++@#dstA%|.++%}.++@%lA@@@@@,<@@@,;3%%%%%%%%@"0%@@@,+@+@,@@@@%.++@@ఐ!f%/++%/++@@@@@@,R@@,Q3%%%%%%%%@,43@@@,:@@@,9@+@,@@@@ఐ!d%/++%/++@l@@AM@,]@@@,aU@,Z"@$code%/++%/++@M@@@@@,`@@@,_@@,^@@@,\@@,[8@ఐ'delayed%/++%/++@|@@@@@,@@@,T@,T@,P@ఐ$tail%/++%/++@s@@@@@,T@,T@,f@ఐ#dst&/++&/++@p@@@@,@@,T@,T@,@@i@@cT@,@@@@x@&%.++&&/++@@HFE@@@,@@@,@@,BP@,@@@,@@, O@,@1delayed_use_count&@0++&A0++@ఐK!d&K0++&L0++@@@Ԡ@@@,O@,3&O&N&N&O&O&O&O&O@@@@1delayed_use_count&Y0++&Z0+, @ڰ@@]@@@,O@, @@@&b-+c+&c1,,@г!t&m-+c+&n-+c+@А!b'&t-+c+&u-+c+@@@* @@@@+@A@M@,@A@&{-+c+e@@@@ఠ$pair&3,,&3,,@&mA@@@!a@.?M@,@@@,M@,@@,@!b@.EM@,@@@-M@,@@, @$M@-@M@-@@-@@@- M@,@@,M@,@@,M@,3&&&&&&&&@1*@+@,@@@࣠@"daA&3,, &3,,"@&nA@гB!t&3,,(&3,,)@АDI3&&&&&&&&@!^&3,,&8,-@@@&3,,%&3,,'@@@VU@@@, @@&3,,&3,,*@@@^@@@@"dbA&3,,,&3,,.@'oA@г\!t' 3,,4' 3,,5@А^c3' ''' ' ' ' ' @.H}|@@@,@C@D@@'3,,1'3,,3@@@qp@@@,@@'3,,+'3,,6@@@y@@@@ຠ$code'+4,I,M',4,I,Q@࣠'delayedA'94,I,Z':4,I,a@'LpA@@VU@@@-/@@@-.3'?'>'>'?'?'?'?'?@7Q@@@-@L@M@@@@'L4,I,Y@$tailA'W4,I,c'X4,I,g@'jqA@@@@@-A3'Y'X'X'Y'Y'Y'Y'Y@-zy@@@--@@@-,@,@-@@@@'i4,I,b@#dstA't4,I,i'u4,I,l@'rA@@ @@@-S@@@-R3'z'y'y'z'z'z'z'z@"0@@@-@@+@,@@@@'4,I,h@@@ఐˠ"da'5,p,w'5,p,y@@@ M@-`@@@-dT@-]3''''''''@#554@@@-Q@@@-P@4@5@@@$code'5,p,z'5,p,~@6@@Ϡ@@@-c@@@-b@@-aˠ!@@@-_@@-^ @ఐ'delayed'5,p,'5,p,@m@@@@@-@@@-S@-S@-8@zఐ$tail'5,p,'5,p,@d@@@@@-S@-S@-N@ఐ#dst'5,p,'5,p,@X@@@@-@@-S@-S@-h@@s@@mS@-k@@ఐ "db(5,p,(5,p,@հ@@vM@-@@@-T@-@$code('5,p,((5,p,@@@IGF@@@-@@@-@@-C@@@-@@-@Xఐ 'delayed(C5,p,(D5,p,@@@cb@@@-@@@-S@-S@-@ఐ$tail([5,p,(\5,p,@ܰ@@@@@-S@-S@-@ఐ#dst(q5,p,(r5,p,@а@@  @@-@@-S@-S@-@@i@@cS@-@@(5,p,v(5,p,@@@@ @@-@(4,I,T(5,p,@@@@@-#@@@-"@@-!@蠠@@@- @@@-@@-O@-c@'1delayed_use_count(6,,(6,,@డ' ܠް(7,,(7,,@۰@@@f@@@.*@@.)@@@@.(@@.'@@@.&@@.%@@.$3((((((((@@@@@ఐ "da(7,,(7,,@ʰ@@aF@@@.>P@.<@1delayed_use_count(7,,(7,,@f@@@@@.:P@.@P@.=$@@ఐ"db(7,,(7,,@@@V@@@.DP@.B9@1delayed_use_count)7,,) 7,,@@@%@@@.8P@.FP@.CG@@; @@ @@@."P@.6M@@@)3,,G4@гi!t)#3,,C)$3,,D@В@А!aq).3,,:)/3,,<@@@А!bv)63,,?)73,,A@@@ @@@):3,,9@@#@@@LVA@M@.Q]@A@Z@ZY@~@ఠ#run)J:-- )K:-- @)]sA@@@ !a@.M@.W@@@.]M@.S@@.T > M@.a@@@.cM@.U@@.VM@.R3)d)c)c)d)d)d)d)d@@@@@@࣠@!dA)w:--)x:--@)tA@г(!t):--):--@А*/3))))))))@!D):--)<-9-Z@@@):--):--@@@<;@@@.Y @@):-- ):--@@@D@@@@࣠$tailA);-#-,);-#-0@)uA@@ G@@@.r3))))))))@'A\[@@@.^@<@=@@@@);-#-+@#dstA);-#-2);-#-5@)vA@@ W V@@@.@@@.3))))))))@- k@@@.q@(@)@@@@);-#-1@@ఐm!d)<-9-=)<-9->@2@@j@@@.R@.3))))))))@0 ~ }@@@.@@@.@/@0@@@$code)<-9-?)<-9-C@@@   @@@.@@@.@@. @@@.@@. @ )ภ"[]*<-9-X@!@@@ 0 /@@@.@@@.Q@.4@ ఐ$tail*(<-9-E*)<-9-I@[@@ @@@.Q@.Q@.J@ ːఐ~#dst*><-9-K*?<-9-N@T@@ ֠ @@.@@.Q@.Q@.d@@n@@Q@.g@*R;-#-'@г#dps*\:--*]:-- @А!a*c:--*d:--@@@ @@@@@A@M@.@A@@@@ఠ+reify_delay*u>-\-b*v>-\-m@*wA@@@ \*&lambda@@@.@@@.M@.@@. *&lambda@@@.@@@.M@.@@.M@.3********@/SL@M@N@@@࣠@#dpsA*>-\-o*>-\-r@*xA@г+#dps*>-\-|*>-\-@г01*>-\-u*>-\-{@@7@@@.3********@)O*>-\-^*I..@@@  @@@E @@@. @@*>-\-n*>-\-@@@M@@@@ຠY$code*?--*?--@࣠'delayedA*?--*?--@*yA@@  @@@/@@@/3********@4Vts@@@.@@@.@T@U@@@@*?--@$tailA+?--+ ?--@+zA@@ @@@/13+ + + + + + + + @0 + *@@@/@@@/@/@0@@@@+?--@#dstA+%?--+&?--@+8{A@@  @@@/C@@@/B3+++*+*++++++++++@"0 @@@/0@+@,@@@@+7?--@@ఐ]'delayed+B@--+C@--@3@@ ^ ]@@@/I@@@/H3+G+F+F+G+G+G+G+G@/  @@@/A@@@/@@.@/@@@ĠM+_A--+`A--@"@@@@ { z@@@/Q@@@/P3+d+c+c+d+d+d+d+d@@@@ @  @@@/S@@@/R@@@ఐؠ#dps+zA--+{A--@@@@@@/h@@@/g@ %ఐ$tail+A--+A--@^@@ 0@@@/T@/T@/1@ 1ఐ#dst+A--+A--@X@@ < ;@@/@@/T@/T@/K@@;@@$@@@/eO@Ġ"::+B--+B--@&ఠ!x+B--+B--@+|A@@ @@@/[@ఠ"xs+B--+B--@+}A@@+9 @@@/]@@@/\@@@ @@  @@@/_@@@/^@@  @@@/a@@@/`@@@డ#I0with_placeholder&Constr,C.. ,C..@ ,C..,C..!@@@ @@@)D@@)C@@@@@)B@@@)A@@)@,*@@@)?@@)>@@)=,.@@@)<@@);@@):@'"@@@ @@@/@@/@@@@@/@@@/@@/@@@/@@/@@/@@@/@@/@@/3,@,?,?,@,@,@,@,@@z@{@|tm@n@o@@@@ఐ!x,TC..",UC..#@@@ @@@/V@/V@/@@] @@@@JI@@@/@@@/@@/N@@@/@@/@@/M@@@/@@//@@࣠@'new_dstA,C..+,C..2@,~A@@ih@@@/@@@/3,,,,,,,,@H@@@@  @@ภ)Lsequence,D.6.@,D.6.I@;)Lsequence& @&@@@ ʠ&@@@ @BO@V@A':>* *"';>* *@@@@'@ఐ D,write_to_dst,E.L.X,E.L.d@ e@@@'(@@@/@@@/@@/@ ; 8@@@/@@@/@@/@&@@@/@@/&@@@/@@/@@/@@/3,,,,,,,,@[@@@/@@@/@Y@Z@@@@ఐŠ#dst,E.L.e,E.L.h@@@((@@@0@@@0V@0V@0"@@ఐ'"xs-E.L.i-E.L.k@@@  |@@@0@@@0V@0V@0:@@ภ$Lvar-E.L.m-E.L.q@&ఐ'new_dst-#E.L.r-$E.L.y@O@@(T @@@0(V@0+@@@0*V@0']@#var-5E.L.z-6E.L.}@(d@@&@@@0%V@0,V@0)k@@-@E.L.l-AE.L.~@@'U@@@0V@0$s@@@@']@@@/@0-V@0{@ఐ#dps-YF..-ZF..@g@@۠@@@00@@@0/@ఐg$tail-mF..-nF..@=@@@@@0QV@0SV@0R@ఐ'new_dst-F..-F..@@@@@0O@@0NV@0VV@0T@@;@@'@@@/@0XV@0J@@-F..@@'@@@/@-C..'@@@@@@/@@@/@@/@@@/@@/T@0_T@0Z'@@@@(@@@A-@--@@&@@@0Q@-?---G..@@  ܠ @@@/@@@/@@/ ؠ<@@@/@@@/@@/N@0@ Q1delayed_use_count-H..-H..@A-H..-H..@@ @@@0N@03--------@@@@@@->-\-#@г]!t->-\-->-\-@гbc->-\-->-\-@@i@@@n  @@@@o @19A@M@0@@A@=@=<@i@ఠ.ensures_affine. K... K..@.A@@@m.%&lambda@@@0@@@0M@0@@0y.1&lambda@@@0@@@0M@0@@0M@03.(.'.'.(.(.(.(.(@@@@@@࣠@!dA.;K...<K..@.NA@г+!t.HK...IK..@г01.PK...QK..@@7@@@03.P.O.O.P.P.P.P.P@)O.YK...ZO/2/K@@@  @@@E @@@0 @@.bK...cK..@@@M@@@@డ,"<=.qL./.rL./@@!a@@@/@@@.$boolE@@@-@@,@@+*%lessequalBA@@@@)))Z@@U@@@@@@@1N@1@@1@ @@1@@@1@@1@@13........@Ln@@@0@@@0@l@m@@@@ఐ~!d.L./.L./@@@ ?@@@1O@1@@@1O@1$@1delayed_use_count.L./.L./@ I@@5+@@A.L./.L./@@@O@16@@!@@@@@1O@1<@ఐ!d.M/!/'.M/!/(@C@@Ǡ@@@0@@@0N@1N@1Q@ఐ+reify_delay.O/2/8.O/2/C@ΰ@@@@@@1%@@@1$@@1#|{@@@1"@@@1!@@1 p@@ఐҠ#run/O/2/E/O/2/H@@@@͠@@@12O@1cO@1?@@@1A@@1@ˠ @@@1>@@1=@@ఐ!d/<O/2/I/=O/2/J@@@ @@@1^P@1aP@1_@@/HO/2/D@@&@@@1\@@S@@jN@1O@1.@/SL./@г4!t/]K../^K..@г9:/eK../fK..@@@ǰ@@@EȰ @@@@F@A@[M@1@A-/? r Ensures that the resulting term does not duplicate delayed constructors by reifying them now if needed. /yP/L/N/zR//@@@@@@@#@#"@O@ఠ$make/T///T//@/A@@@n@@@1M@1@@@1M@1@@1 M@1@@@1M@1@@1M@13////////@y@@@@@࣠@#dpsA/T///T//@/A@г'#dps/T///T//@А!a/3////////@"D/T///U//@@@/T///T//@@@<;@@@1 @@/T///T//@@@D@@@@ఐm+reify_delay/U///U//@@@@hg@@@1@@@1@@1cb@@@1@@@1@@13////////@2Mgf@@@1@H@I@@@@ఐX#dps0U//>@?@@wv@@@1@@-D@гs!t0T//0T//@А!a{'0T//0 T//@@@* @@@@+@NXA@M@1_@A@\@\[@@ఠ1delay_constructor01W/002W/0@0DA@@@@@@2M@1@@1@10@@@1@@@1M@1@@1 ՠ0`@@@2O@1@@@2M@1@@1M@1@@1M@130V0U0U0V0V0V0V0V@@@@@@࣠@&constrA0iW/00jW/0@0|A@@230h0g0g0h0h0h0h0h@A0qW/00r^1A1F@@@@@  @@!d A0}W/00~W/0@0A@@;30|0{0{0|0|0|0|0|@!I@@@@@@@@@ఠ!d 0X0"0*0X0"0+@0A@@sr@@@1@@@1P@1300000000@)Z@ @!@@@ఐ.ensures_affine0X0"0.0X0"0<@@@@@@@1@@@1@@1@@@1@@@1@@1!@@ఐN!d0X0"0=0X0"0>@+@@.@@#@@6/@A@0X0"0&@@ຠW$code0Y0D0J0Y0D0N@࣠'delayed A0Y0D0W0Y0D0^@0A@@@@@2@@@2300000000@Tf_@`@a@@@@0Y0D0V@$tail A0Y0D0`1Y0D0d@1A@@@@@2&311111111@)"!@@@2@@@2@(@)@@@@1Y0D0_@#dst A1Y0D0f1Y0D0i@1/A@@@@@26@@@2531"1!1!1"1"1"1"1"@"0@@@2%@+@,@@@@1.Y0D0e@@@ఠ(block_id1:Z0m0y1;Z0m0@1MA@@#@@@2FS@2931>1=1=1>1>1>1>1>@/נ@@@24@@@23@.@/@@@డ/$List&length1ZZ0m01[Z0m0@ 1^Z0m01_Z0m0@@#@@@#@@@2JS@2?@@@2>@@2=$@@@2<@@2;/@@ఐ'delayed1|Z0m01}Z0m0@v@@$ @@@2HT@2KT@2ID@@. @@HE@A@1Z0m0u @@డ(,delay_impure&Constr1[001[00@ 1[001[00@@ZX@@@)Q@@)P@@@@)O@@)N@@)@@@)M@@)L1U@@@)K@@)J@@)Ih@@@)H@@)G@@)F@@)E@ROA)$@@{y@@@2k@@2j@?@@@2i@@2h@@J@@@2g@@2f!@@@2e@@2d@@2c@@@2b@@2a@@2`@@2_311111111@@@@@@ఐ(block_id1[001[00@ @@@@@2U@2U@2@@ఐ&constr2[002[00@@@$@@m@@@@@@@2@@2W@@@2@@2@@2@@@2@@2~6@@࣠@&constrA2%[002&[00@28A@@@@@232'2&2&2'2'2'2'2'@K@@@@ @@ఐ!d2:\002;\00@J@@à@@@2V@2@@@2V@232C2B2B2C2C2C2C2C@h,@@@2@&@'@@@$code2R\002S\00@ٰ@@trq@@@2@@@2@@2n!@@@2@@2@ภ--2l\012m\01@-,ఐT&constr2v\002w\01@.@@@@@2U@2U@2U@2:@ఐ'delayed2\012\01@@@1@@@2U@2U@2M@@2\002\01@@@@@2U@2V@?ఐ$tail2\002\00@@@J@@@2U@2U@2l@Kఐ#dst2\002\00@{@@VU@@2@@2U@2U@2@@8@@@@@2U@2U@2@2[00A@@@R@@@2@@2)@@@2@@2S@2S@2@@NP@@@_Q@@@2Y0D0Q2\01@@   @@@2 @@@2 @@2 @@@2@@2O@3 @|1delayed_use_count3]113]11)@ఐ}!d3 ]11,3]11-@@@@@@3BO@3E@@@3DO@3A333333333@+@@@1delayed_use_count3 ]11.3!]11?@@@$@@@3?O@3C @@@3)X0"0B@@:@^@@@A@M@3J@A@@@@ A@YA@@ _@n@ x@  @ @@<@@@@@@33C3B3B3C3C3C3C3C@@@3Ksy3L_1G1J@33I3H3H3I3I3I3I3I@@@@#dpsM;!a@3M@AA$tail3@@@3N@@3U#dst0?0&@@@3O@@@3Q@@3S N@3R@@3T@@3VY@@@@@3y:<3z:s@1, A term parameterized over a destination. The [tail] argument is passed by the caller to indicate whether the term will be placed in tail-position -- this allows to generate correct @tailcall annotations. 3tv3F[@@@@@@@@@3AA@!tN;!a@3@A7A@G@B@@@3]_3]h@@@@3AA@$make@T3&lambda@@@3@@@3@@3$3&lambda@@@3@@@3@@3@3jl3j@@3A@#run@;3&lambda@@@3@@@3@@33&lambda@@@3@@@3@@3@33@@3A@1delay_constructor@+7!t@@@3@@3@f3&lambda@@@3@@@3@@3p4&lambda@@@3@@@3@@3@@3@44@@4A@&lambda@4&lambda@@@3@@34#&lambda@@@3@@@3@@3@4 4!@@43A@#map@@!a@3O@3@@3!b@3O@3@@3@@3@@@@3@@3@@@3@@3@@3@4K4L5@@4^A@$pair@Π!a@3O@3@@@3@@3@ݠ!b@3O@3@@@3@@3@@@@3@@@3@@3@@3@4}684~6^@@4A@$unit4/@@@3@@@3@4_a4_r@@4A@@БA+II4:D4:G@АJM344444444@mS;@@3L@A@A^@@3t@@@3u@3KG@B@@@>;@@-@A4:A4:C@@1b@e@@Aб_г[$bool4:O4:S@@c!@@б`г\+destination4:b4:m@гa&offset4:[4:a@@i5@@@n6 @@А!ai:4:qe@@z<4:Wg@@>4:Ji@@k24ih@hh@@@h@h@@344444444@@Awv@A+ii4]g`@Аil344444444@s;@@3@A@A@G@B@@@p@@@m@A5]d5]f@@1@{@@A@s@@355555555@ @Ats@ss5jp5jt@б@гr#dps5j~5j@гwx5#jw5$j}@@~35 555 5 5 5 5 @)@A@@@ @@г|!t5/jw@г56j57j@@@@@@@@@@@@5B5C@б@г!t5L5M@г5T5U@@35Q5P5P5Q5Q5Q5Q5Q@2@A@@@ @@г#dps5`@г5g5h@@@@@@@@@@@@5s5t@б@г&Constr55@55@@@355555555@1@A @@б@г!t55@г55@@@@@ @@г!t5@г55@@&@@@'@@(@@)1@@@@@+55@б@г55@@355555555@=@A@@г!t5 @г55 @@@@@@@@@@@@55@б@б@А355555555@%@A55@@А5"5$@@ @@б@г!t5,5-@А!a6)6+@@@ @@г!t6 4@А!b(6163@@@+@@,@@-6@@@@@0̠ʠʰ66<66@@б@гɠ!t6&6F6'6G@А36&6%6%6&6&6&6&6&@F@A6.6C6/6E@@@ @@б@г͠!t696N6:6O@А6?6K6@6M@@@@@гѠ!t6H6]@В@А!a&6R6T6S6V@@@А!b.6Z6Y6[6[@@@1 @@@26^6S@@4!@@ 53@@@@@7栰6h_e6i_i@г堐!t6p_q@г預$unit6x_l6y_p@@36u6t6t6u6u6u6u6u@P,*@A@@@@@@@@@/36z6y6y6z6z6z6z6z@@A236|6{6{6|6|6|6|6|@J@@6)66sv@@H@E@I@A@C@D@B@@@6)4J@G@4G6i . The type ['a Dps.t] (destination-passing-style) represents a version of ['a] that is parametrized over a [lambda destination]. A [lambda Dps.t] is a code fragment in destination-passing-style, a [(lambda * lambda) Dps.t] represents two subterms parametrized over the same destination. 66(@@@@@@@6))[@\@'&ChoicerO6~7#7*6~7#70@6A@БA+!tP67:7D67:7E@А!a@4366666666@@~A@HFA@:8@@@@@@`^@@4KJ@JJ@@@J@J@G/;@@4@A@A@G@B@@@67:7<677@4 ? An ['a Choice.t] represents code that may be written in destination-passing style if its usage context allows it. More precisely: - If the surrounding context is already in destination-passing style, it has a destination available, we should produce the code in [dps] -- a function parametrized over the destination. - If the surrounding context is in direct style (no destination is available), we should produce the fallback code from [direct]. (Note: [direct] is also a function (on [unit]) to ensure that any effects performed during code production will only happen once we do know that we want to produce the direct-style code.) - [tmc_calls] tracks the function calls in the subterms that are in tail-modulo-cons position and get rewritten into tailcalls in the [dps] version. - [benefits_from_dps] is true when the [dps] calls strictly more TMC functions than the [direct] version. See the {!choice_makeblock} case. - [explicit_tailcall_request] is true when the user used a [@tailcall] annotation on the optimizable callsite. When one of several calls could be optimized, we expect that exactly one of them will be annotated by the user, or fail because the situation is ambiguous. 7777=)=.@@@@@@@@@7A@@77:7A77:7C@@3@;B@A#dps@@!tOQ@4@@@477J7N77J7]@@7,A&direct@@@6@@@4@@4bQ@4@@47+7^7b7,7^7v@@7>A)tmc_calls@@65@@@4@@@47<7w7{7=7w7@@7OA1benefits_from_dps@@6@@@47H777I77@@7[A9explicit_tailcall_request@@7@@@47T777U77@@7gA@@A@_@@@@@fc@@U@#OOE7^7J7Q@D@@Ш@гR#Dps7i7J7W7j7J7Z@Y7m7J7[7n7J7\@@А!a_7u7J7T7v7J7V@@@h @@k@@4@b@#^^S7~7^7h@R@@Ш@б@г_$unit77^7k77^7o@@g@@А!agİ77^7s77^7u@@rǰ @@u@@4@k@#gg]77w7@\@@Ш@гj$list77w777w7@гo4tmc_call_information77w777w7@@w@@@| @@@@4@v@#rrm777@l@@Ш@гu$bool777777@@}@@@@4@|@#xxs777@r@@Ш@г{$bool777777@@@@@@4 @@@A@⠰57@@@@@@@@377777777@@@@ఠ&lambda 7=0=67=0=<@8A@@@8&lambda@@@5Q@5@@5F8&lambda@@@5@@@5Q@5@@5Q@5388888888@?O@@@࣠@!v"A8=0=>8=0=?@8*A@г%&8#=0=B8$=0=H@@,@@@538#8"8"8#8#8#8#8#@@8,=0=28-==@@@  @@80=0==81=0=I@@@9 @@@@Р3+3@@5.@@@3 @@A@A@3@@B@A@3@@C@A@3 @@D@A@@A*@'#dps8G=Y=]8H=Y=`@డ9&lambda#Dps8V=Y=c8W=Y=f@ 8Z=Y=g8[=Y=m@@@8lR@@@4@@4Tݠ8uR@@@4@@@4@@4@Q@N@@@@@@5/@@5.@@@5-@@@5,@@5+38z8y8y8z8z8z8z8z@Xq@@@5@k@l@@@@ఐ{!v8=Y=n8=Y=o@@@4@@@5:S@59=>@డ#map#Dps9=>9=> @ 9=> 9=>@@@@@@4@@4@@4@[@@@4@@4_@@@4@@4@@4@@|@@@@}@@5y@@5@@5@p@@@5@@5t@@@5@@5@@5399999999@O[~@R@S@@@@ఐp!f9=>9=>@[@@@@ఐq!s9=>9=>@@@@#dps:=>:=>@˰ @@@@@5T@5T@5.@@` @@@@@5T@55@֡&direct:>>:>>#@࣠@5'AĠ:&>>+:'>>-@@@@@@@@5N@@@@ఐ!f:7>>1:8>>2@@@\@@ఐ!s:H>>4:I>>5@j@@m@&direct:O>>6:P>><@ @@@2@@@5@@5Q@6Q@6 Q@5@@5@@ภ7:f>>=:g>>?@6@@@G@@@5W@5@@:o>>3:p>>@@@@@;@@@:s>>&:t>>A@@@W@@@5@@5%S@5@@5S@5@A)tmc_calls:>C>G:>C>P@ఐ!s:>C>S:>C>T@@@0@)tmc_calls:>C>U:>C>^@Z @@ji@@@6@@@6S@6 @d1benefits_from_dps:>`>d:>`>u@ఐ+!s:>`>x:>`>y@ְ@@T@1benefits_from_dps:>`>z:>`>@} @@}@@@6S@6@9explicit_tailcall_request:>>:>>@ఐK!s:>>:>>@@@t@9explicit_tailcall_request:>>:>>@ @@@@@6 S@6"@@@:==:>>@@}@iA@Q@6)y@A8: - Apply function [f] to the transformed term. :>>:>?@@@@@@@:==@@@@ఠ&direct(;?? ;??@;A@@@X!a@6-Q@6/@@@65Q@6+@@6,@@6.Q@6*3;;;;;;;;@@@@@@࣠@!c*A;+??;,??@;>A@г !t;8??;9??@А"'3;8;7;7;8;8;8;8;8@!<;A??;B?#?2@@@;D??;E??@@@43@@@61 @@;L??;M??@@@<@@@@ఐ3!c;[?#?';\?#?(@LK@@@66@4@5@@,RQ@6?@@@6BT@6=3;e;d;d;e;e;e;e;e@.H@@@&direct;p?#?);q?#?/@4@@@S@@@6A@@6@@@6>@@ภS;?#?0A@Q@B@@b@@@6IS@6M@@/H@А!a*Q@69(;??;?? @@ @@+@JTA@Q@6O[@A@X@XW@|@ఠ#dps+;?4?:;?4?=@;A@@@;&lambda@@@6[@@@6ZQ@6Q@@6R$tailc@@@6Q@6`@@6a#dsthg@@6@@6Q@6f@@6g; @@@6Q@6h@@6iQ@6b@@6cQ@6S@@6TQ@6P3;;;;;;;;@@@@@@࣠@!c-A;?4??;?4?@@<A@гG!t;?4?J;?4?K@гLM<?4?C<?4?I@@S@@@6U3<<<<<<<<@)k<?4?6<?Z?v@@@  @@@a @@@6W @@<?4?><?4?L@@@i@@@^^.Ab<"?4?N<#?4?R@<5A@@d3@@@@<1?4?M@gg/Ak<:?4?T<;?4?W@!b@7Q@6@@@6@@6Q@6@@6K@Q@6Р@Q@6@@6@@@6Q@6@@6Q@63= = = = = = = = @1tm@n@o@@@࣠@85A@ఠ"c12=%?x?=&?x?@=8A@@>=@@@63=(='='=(=(=(=(=(@W=1?x?z=2@@@@@@@ఠ"c23=;?x?=<?x?@=NA@@GF@@@6@@=D?x?=E?x?@В@гb!t=S?x?=T?x?@Аdi+=Y?x?=Z?x?@@@po@@@62 @@@гj!t=h?x?=i?x?@Аlq@=n?x?=o?x?@@@xw@@@6G @@@@@ @@6N#@@=}?x?=~?x?@@@R@@@@РM#dps=??=??@డ|$pair#Dps=??=??@ =??=??@@@? M@@@4@@4@G F@@@4@@4K@ ]@ P@@4@@@4@@4@@4@ ?@ <#@@@ZQ@7Q@7Q@7/Q@6@@@6@@6@iQ@7Q@7Q@7BQ@6@@@6@@6t@@@@6@@@6@@6@@63========@@@@@@@@@ఐР"c1=??=??@@@??>??@ΰ@@K@@@6S@7S@7+@@ఐࠐ"c2>??>??@5@@SQ@7@@@7 S@7B@#dps>*??>+??@@@ˠb@@@6S@7 S@7Q@@ @@)@2@1@@6@@@6S@6^@&direct>H??>I??@࣠@:4AĠ&>U??>V??@%@@@@4@@@7$w@@@@@ఐG"c1>l??>m??@@@8@@@72V@7-@&direct>y??>z??@=@@@\@@@71@@70@@7.@@ภ\>??>??@[@@@l@@@79U@7=@@(@@@@ఐf"c2>??>??@@@m@@@7EV@7@@&direct>??>?@@r@@@@@@7D@@7C@@7A@@ภ>?@>?@@@@@@@@7LU@7P@@(@@@@>??>?@@@@ @@@7Q@>??>?@@@@@@@7@@7@ՠ@@@7@@7R@7T@)tmc_calls>@@ >@@@డ=]!@>@@*>@@+@@$listK!a@@@@@@@ @@@@@@@@@@@@@)nn)nn@@)@%$@@@"@@@7fR@7R@7R@7k@@@7o@@7n@$@@@7m@@7l#@@@7j@@7i@@7hS@@ఐ"c1?C@@?D@@@^@@@@@7S@7h@)tmc_calls?P@@ ?Q@@)@@@[9@@@7S@7S@7w@@ఐ,"c2?g@@,?h@@.@@@3@@@7S@7@)tmc_calls?t@@/?u@@8@7@@p]@@@7}S@7S@7@@= @@P^@@@7eS@7{@G1benefits_from_dps?@:@>?@:@O@డ="||?@R@m?@R@o@@@@@]@@\@&@@@[@@Z*@@@Y@@X@@W'%sequorBA)@@@@))@@)^@! @@@@@@7@@7@@@@7@@7@@@7@@7@@7@@ఐ"c1?@R@X?@R@Z@@@@@@7S@7@1benefits_from_dps?@R@[?@R@l@@@K@@@7S@7S@7@@ఐ"c2?@R@p?@R@r@@@Ġ(@@@7S@7@1benefits_from_dps@@R@s@@R@@ǰ@@f@@@7S@7S@7+@@; @@@@@7S@71@ա9explicit_tailcall_request@@@@@@@డ>@%@@@&@@@@@@@@@7@@7@@@@7@@7@@@7@@7@@7U@@ఐ "c1@E@@@F@@@`@@\@@@7S@7j@9explicit_tailcall_request@R@@@S@@@@@@@@7S@7S@7x@@ఐ-"c2@h@@@i@@@@@4r@@@7S@7@9explicit_tailcall_request@u@@@v@@@6@@@@@7S@7S@7@@; @@ 3@@@7S@7@@@@?x?U@г!t@?x?@?x?@В@А!a@?x?@?x?@@@А!b@?x?@?x?@@@ @@@°@?x?@@#@@@,wA@Q@7~@A@{@{z@@ఠ$unit6@@@@@@@@A@@ 9@@@7Q@7@@@7Q@73@@@@@@@@@@@@@@Р#dps@@A@@A@డ!$unit#Dps@@A@@A @ @@A @@A@@ a@@@4@@@4@ `@ ] @@ 4@@@7Q@7/@&direct@AA@AA@࣠@<7AĠٰAAA$A AA&@@@@@ @@@8H@@@@ภAAA*AAA,@@@@@@@8U@AAAAAA-@@@ @@@8@@8gQ@7@@8Q@8c@론)tmc_callsA/A/A3A0A/A<@ภ$A6A/A?A7A/AA@8@@@  @@@8%@@@8$Q@8+|@ 1benefits_from_dpsAHACAGAIACAX@ภ0AOACA[APACA`@0@@@ @@@82Q@86@ 9explicit_tailcall_requestA]AbAfA^AbA@ภ0#AdAbAAeAbA@0#@@@ @@@8P@@@@4Q@@l@[RA@R@8pY@A@V@VU@l@ఠ$and+<B(BBB)BB@B;A@@@I@8@@@8R@8r@@8s@I@8@@@8R@8x@@8yC@@ @@8@@@8R@8z@@8{R@8t@@8uR@8q3BMBLBLBMBMBMBMBM@@@@@@࣠@"a1>AB`BBBaBB@BsA@@23B_B^B^B_B_B_B_B_@ABhBBBiBB@@@@@  @@"a2?ABtBBBuBB@BA@@93BsBrBrBsBsBsBsBs@!I@@@@@@@@ఐ$pairBBBBBB@@@@@]@@@8@V@@@8@@8@@8@k@`@@8@@@8@@83BBBBBBBB@.:i@1@2@@@@@ఐY"a1BBBBBB@>@@@@ఐQ"a2BBBBBB@@@ @@BBB^@@@@@@8U@8*@@Jg@@+@qhA@R@8o@A@l@lk@@M@@@@@3BBBBBBBB@@@BBPBbBBB@ 3BBBBBBBB@.@@@@BBPBR@@Рs&SyntaxBBBBBB@@ 3BBBBBBBB@B}@o@"@@@|@@@@A3BBBBBBBB@ @@BBB@@@3BBBBBBBB@ @@@ఠ&optionAC BBC BB@CA@@@Bm a!a@9&R@8@@@8@@@8R@8@@8 oBR@8@@@8@@@8R@8@@8R@83C/C.C.C/C/C/C/C/@:@@@࣠@!cCAC@BBCABB@CSA@г0&optionCMBBCNBB@г5!tCVBBCWBB@А7<3CVCUCUCVCVCVCVCV@bUC_BBC`C%CI@@@CbBBCcBB@@@IH@@@8 @@@R@@@8  @@CoBBCpBB@@@Z@@@@ఐ?!cC|BBC}BB@hgf@@@8@@@8@D@E  @@qpo@@@8@@@83CCCCCCCC@6Y@@@Ġ$NoneCCCCCC @0@@@@@@@8@@@83CCCCCCCC@@@@ @@@@8@@@8 @@@$let+CCCCCC@@ %@@@8@@8@@.@@8 @@8@@8 #@@@8@@8@@8@>@?@ T@@@9U@8V@8@@@8V@8@@8@@@@8@@@9 U@9U@8@@8@@8  V@8@@@8V@8@@8@@8V@8ఐH$unitCCCDCC@N@@ ˠ.@@@9U@9a@RD CC$@@%paramEĠDCCDCC@@@@@:n@@@ภ$NoneDCC @1E@@@4v@Ag@@@@@8@@@8@Ġ$SomeD0C%C+D1C%C/@-ఠ!cDD9C%C0D:C%C1@DLA@@"!@@@8@@@@@+*)@@@8@@@8@ @321@@@8@@@8@@@m$let+DYC%C5DZC%C9@@ *IR@9V@9@@@9V@9@@9@@ @@9IH@@@9+U@9'U@9@@9@@9 C V@9@@@9V@9@@9@@9 V@9 ఐO!cDC%C>DC%C?@N@O@P@@ U+@@@9"U@9!3DDDDDDDD@_ @@@<5@@!vFDC%C:DC%C;@DA@@8@@@ภ$SomeDC%CCDC%CG@._ఐ!vDC%CHQ@J@@S@@K3DDDDDDDD@" @@@@V@@D@A^W@@3DDDDDDDD@%@@@@@ADBBZ@г!tDBBDBB@г&optionDBBDBB@А!a+DBBDBB@@@. @@@/@@@@0@ixA@R@9Y@A@|@|{@Aఠ$listGDCKCUDCKCY@DA@@@Da8!a@:"R@9_@@@9j@@@9i@@9hDDuR@9b@@@9g@@@9f@@9e3EEEEEEEE@@@@@@࣠@!cHAECKC[ECKC\@E+A@гD$listE&CKCdE'CKCh@гo!tE0CKCbE1CKCc@А:?R@9s3E1E0E0E1E1E1E1E1@-V@SRQ@@@9`@@@9aS@9[@@9\MLK@@@9c@@@9dS@9]@@9^S@9Z@j@k@@ETCKC_EUCKCa@@@-$@@@9u$*@@@<@@@9w) 9@@EaCKCZEbCKCi@@@uts@@@9@@@95@@  @@ఐa!cEvCxCEwCxC@ZSJ@@@9@@@9@f@g  @@c\S@@@9@@@93EEEEEEEE@U{@@@ĠECCECC@=#@@@@yri@@@9@@@93EEEEEEEE@@@@ @{r@@@9@@@9 @@@$let+ECCECC@@ 8@@@9U@9V@9@@@9V@9@@9@@@@9EDR@9@@@9U@9U@9@@9@@9 V@9@@@9V@9@@9@@9V@9ఐ.$unitECCECC@4@@ 0@@@9U@9N@?ECC@@KĠ!ȰECCECC@!@@@@;Z@@@ภECC@=@@@4a@AR@@H54@@@9@@@9k@ĠSFCCFCC@@Ԡఠ!cIFCCFCC@F0A@@@@@9@ఠ"csJF,CCF-CC@F?A@@E @@@9@@@9@@@ @@ @@@9@@@9@ @"@@@9@@@9@@@d$let+FPCCFQCC@@!@mR@9۠@EĠs@@@:&U@9@@9V@9@@@9V@9@@9@@@@9@@@:*U@:$U@9@@9@@9F V@9@@@9V@9@@9@@9V@9ఐn!cFCCFCC@m@n@o@@ 3R@9@@@9U@93FFFFFFFF@ rk@l@m@@@LFCC@$and+FCCFCC@@ v@@@8@@8@ q@@@8@@8 @@{@@8@@@8@@8@@8@@@ ݠ7@@@9V@9@@9@ ڠsU@:'U@: U@9@@@9V@9@@9 ؠ@P@@@9@@@9V@9@@9@@9V@9ఐ $listFCCFCC@@@@ @@@:@@@9@@9@@@9@@@9@@9p@@ఐ堐"csGCCGCC@y@@*)(@@@: @@@: V@:V@:@@1@@ +Q@@@:V@: @G(CC@@N@ఠ!vL G5CC@GGA@@B@:@@ఠ"vsMGACCGBCC@GTA@@n@:@@A@@@@@:@@@ภBGRCCGSCC@Bఐ'!vG\CCG]CC@'@(@)@@(3G[GZGZG[G[G[G[G[@2&@ @!@@@ఐ+"vsGlCC@ @@)@@@@@A @@n3GkGjGjGkGkGkGkGk@@@@@@AGrCxC|@гt!tG|CKCtG}CKCu@г$listGCKCoGCKCs@А!aGCKClGCKCn@@@@@@:[S@9 @@@ @@@:ZS@9@@+@@@<A@@@@@:h@@@:g@@:f@@@:e@@@:d@@:cR@:]}@@@GCKCM@@@A+/tmc_call_searchORGDEGDE@А!a@:k3GGGGGGGG@;@@:i@A@A@G@B@@@GDDGEUE@E The [find_*] machinery is used to locate a single subterm to optimize among a list of subterms. If there are several possible choices, we require that exactly one of them be annotated with [@tailcall], or we report an ambiguity. GCCGDD@@@@@@@@@GA&zipperPR;@@:j@A@A@G@B@@@GEEGEE@@@@HA@@GDEGDE@@D@;1@A+No_tmc_callQGq>S@:l@@@:n@@HEEHEE4@@HA,NonambiguousR-OS@:p@@@:r@@HE5E9HE5ET@@H*A)AmbiguousS(explicitT@@G@@@:tH(EUEjH)EUEy@@H;A(subtermsU@@GysS@:w@@@:y@@@:{H<EUEzH=EUE@@HOA@@H@EUEYl@@HRA@@A@_@@@@@qn@@`@#MMHIEEHJEE)@C@гO$listHSEE0M@А!aVHYEE-HZEE/@@@]U@@@@W@#SSH`E5E;HaE5EG@I@гU&zipperHjE5ENS@А!a\HpE5EKHqE5EM@@@c[@@@@]@#YYHwEUE[HxEUEd@8@#[[VH~EUEr@U@@Ш@г^$boolHEUEtHEUEx@@f@@i@@:u@e@#aaTHEUE@S@@Ш@гd$listHEUEHEUE@гi!tHEUEHEUE@А!aq߰HEUEHEUE@@@x @@@}@@@@:|@t@@@p@@A@ܠF`H@@@@@@+נװHEEHEE@А!a@:HEEHEE@@Et@;@A*rev_beforeV@@HES@:@@@:HEEHEE@@HA&choiceW@@'"S@:@@@:HEEHEE@@HA%afterX@@Hc1S@:@@@:HEEHEE@@I A@@A@_@@@@@@@@ @#00(IEE@'@@Ш@г3$listI EEI EE@А!a;HIEEIEE@@@BK @@E@@:N@>@#::2IEE@1@@Ш@г=!tI$EEI%EE@А!aEaI+EEI,EE@@@Ld @@O@@:g@H@#DD<I4EE@;@@Ш@гG$listI=EEE@А!aNyICEEIDEE@@@U|M@@X@@:@Q@@A@Z@@uY@3IDICICIDIDIDIDID@@@@ఠ:find_nonambiguous_tmc_callYIUEEIVEF @IhA@@@H3!a@=hY@> @@@>S@=@@@=S@:@@:S@<@@@IFF<IFF>@@!a@@@ @@@6@@@@@@@)%notequalBA3@@@@3~QQ3~Q@@3R@@@@Ƞ@@@:@@@:V@:@@:@ @@:T@@@:@@:@@:3JJJJJJJJ@BNc@E@F@@@@ఐW!cJFF0JFF1@@@r@)tmc_callsJFF2JFF;@ @@'@@ภ J)FF?^@A@_@@3V@:%@@b@@}&@lcA@U@:j@A@g@@ఠ+is_explicit_J;FEFMJ<FEFX@JNA@@@@:@@@:U@:@@:@@@:U@:@@:U@:3JLJKJKJLJLJLJLJL@@@@@@࣠@!saAJ_FEFYJ`FEFZ@JrA@@3J^J]J]J^J^J^J^J^@-JgFEFIJhFEFx@@@@@  @@ఐ!sJtFEF]JuFEF^@2@@@@33JsJrJrJsJsJsJsJs@"@@@9explicit_tailcall_requestJ~FEF_@> @@2@"A@BU@: @A@@@ఠ,nonambiguousbJF|FJF|F@JA@@3only_explicit_calls@@@;U@:@@;@J7S@;$@@@<@@@@@@;@@;@@ఐ(!cLHH^LHH_@Ű@@h@@@;^@;^@;@@$ @@ @@@;@;^@;@@LHH6LHH`@@@@@;k@;]@;@@ @@9@@@;\@;i@ະ3@@:@@@3@@A@A@3@@B@A@@A@*rev_beforeLHfHtLHfH~Aఐ @@@&choiceLHfHLHfH@ఐs!cLHfHLHfH@@@ \@;@@@;[@;@)%afterLHfHLHfH@డKj$List#mapMHfHMHfH@ M HfHM HfH@@@@!a@@@!b@@@@@@B@@@@@B@@@@@@@@BB@@BW@+&@@@@(L[@;@@@;[@;@@;M@@;@@;@#@@@;@@;"X@@@;@@;@@;x@@ఐP&directMVHfHMWHfH@t@@@'@@;l@@;\@;@@ఐ砐$restMiHfHMjHfH@@@O;@@@;\@;\@;@@p @@\@;@@@;\@;@@@M}HfHrM~HfH@@"@@@;@ఐ%splitMHHMHH@j@@@@@<@@@<@@@<@@<@@<@@ภHeMHHMHH@Hdఐ&directMHHMHH@ΰ@@@@@@<@@<@@<@@ఐS!cMHHMHH@@@@@@<#]@<%]@<$@@! @@@ఐ*rev_beforeMHHMHH@@@@@MHHMHH@@X@< @@ఐi$restMHHMHH@@@@@b@@t[@<)\@<@MHH  @@!@@A<jMGtG @б@г$listNGtGNGtG@г[!tN GtGN GtG@АbNGtGNGtG@@@ X@;& @@@X@;(@@г&zipperNGtGN GtG@А!awN&GtGN'GtG@@@wv@@@@@U@<@@@OI'I?@OA@@hf@@@@ఐw-has_tmc_callsOI'ICOI'IP@İ@@@S@I'I9O?I'IS@@@@@<@@@<@@X@>3RPRORORPRPRPRPRP@;92@3@4@@@(subtermsR^KKR_KK@ఐE9several_explicit_subtermsRgKLRhKL@@@ = @@@>X@>@*@RqKKRrLL(@@9 S@=@@@=X@>&@@H @@ '@@@AR}J}J@@ Q@v@@ @@@ARIcIg@@ @(@@ @@@ @@@ 3@@@ @A@ -S@?/@A@@@ @A@@Np@@@@@"@@@@ @  f@  A@  B@ S L@ M@ N@@3RRRRRRRR@ , V@@R~7#73RL5L8@"3RRRRRRRR@@@@P]R  The TMC transformation requires information flows in two opposite directions: the information of which callsites can be rewritten in destination-passing-style flows from the leaves of the code to the root, and the information on whether we remain in tail-position flows from the root to the leaves -- and also the knowledge of which version of the function we currently want to generate, the direct version or a destination-passing-style version. To clarify this double flow of information, we split the TMC transform in two steps: 1. A function [choice t] that takes a term and processes it from leaves to root; it produces a "code choice", a piece of data of type [lambda Choice.t], that contains information on how to transform the input term [t] *parameterized* over the (still missing) contextual information. 2. Code-production operators that have contextual information to transform a "code choice" into the final code. The code-production choices for a single term have type [lambda Choice.t]; using a parametrized type ['a Choice.t] is useful to represent simultaneous choices over several subterms; for example [(lambda * lambda) Choice.t] makes a choice for a pair of terms, for example the [then] and [else] cases of a conditional. With this parameter, ['a Choice.t] has an applicative structure, which is useful to write the actual code transformation in the {!choice} function. Ra1L1LR}7 7"@@@@@@@R~7#7#@@Р&Syntax&ChoiceRL:L?RL:LE@ RL:LFRL:LL@@@3RRRRRRRR@ +@A@l@@@D@@55@s@e@@@@r@@ @ @ ; A@  -B@ V@@PML@LL@@@L@L@IP@@@@A3RRRRRRRR@/B@@SL:L:6@@7@3SSSSSSSS@3@@A+'contextsSS!LNLSS!LNLZ@@;@@+specialized@@O#Map!t+specializedtS@@@C@@@CS+"L_LaS,"L_L@@S>A@@A@@@@@S/!LNLNS0#LL@@@ASBA@# S7"L_Ll@ @@Ш@г%IdentSD"L_LzSE"L_L@'SH"L_LSI"L_L@@+SM"L_LSN"L_L@ @г.+specializedSW"L_LnSX"L_Ly@@63STSSSSSTSTSTSTST@WM;@@@A@@@@@0@@@-8;@@@A@@@@@Sa$LLSb(LL@@@@StA@@ @@@J @@M@@C@>@@A@:@+DDSl$LLSm$LL@@;@@%arity@@SL@@@NSy%LLSz%LL@@SA&dps_id@@P!!t@@@NS&LLS&LL@@SA+direct_kind@@S-function_kind@@@OS'LLS'LL@@SA@@A@@@@@7@@@4@#((#S%LL@"@@Ш@г+#intS%LLS%LL@@3N@@6@@NQ@2@#..'S&LL@&@@Ш@г1%IdentS&LLS&LL@8S&LLS&LL@@@@g@@C@@Nj@=@#993S'LL@2@@Ш@г<=S'LLS'LL@@Cx@@F@@O{@A@@A@t@@s@3SSSSSSSS@@@@ఠ%lletsS*LLS*LL@SA@@@E_@@@OT@O+@@O,@OJ@@@OT@O1@@O2@<Ơ@Ev@@@OX@On@N&@@@OX@Oo@@OpX@OK@@@OdT@O7@@O8@N2@@@OT@O=@@O>T@O?@@O@T@O9@@O:T@O3@@O4T@O-@@O.T@O*3T!T T T!T!T!T!T!@$@@@࣠@"lkAT4*LLT5*LL@TGA@@M3T3T2T2T3T3T3T3T3@\T<*LLT=-MKM\@@@@@  @@"vkATH*LLTI*LL@T[A@@V3TGTFTFTGTGTGTGTG@!d@@@@@@@@(bindingsATY*LLTZ*LL@TlA@@\3TXTWTWTXTXTXTXTX@j@@@@@@@@$bodyATj*LLTk*LL@T}A@@O3TiThThTiTiTiTiTi@p@@@@@@@@డR$List*fold_rightT+LMT+LM@ T+LMT+LM@@=c@@@@@@OP@uX@OG@@OO@@ON@@OM@@OL@=]@@@OJ@@OI@@@OH@@OF@@OE@@OD3TTTTTTTT@5A@8@9@@@@࣠@PsA@ఠ#varT+LMT+LM@TA@@3TTTTTTTT@@@@@ఠ#defT+LMT+LM@TA@@ @@T+LMT+LM @@@Ġ@@@Or@@ @@$bodyAT+LM!T+LM%@TA@@L3TTTTTTTT@@/@)@*#@@@@@@  @@ภ$LletT,M)M-T,M)M1@FdఐƠ"lkT,M)M3T,M)M5@@@3TTTTTTTT@'i@@@@@ఐ"vkU,M)M7U,M)M9@@@@ఐX#varU,M)M;U,M)M>@/@@@ఐV#defU,M)M@U,M)MC@9@@ $@ఐM$bodyU&,M)MEU',M)MI@,@@/@@=U*,M)MJ@@O<@@@O4@U/+LMU0-MKMN@@@3@@Oi@@@Oh@@Og@@OfY@OY@O@@ఐ(bindingsUG-MKMOUH-MKMW@ٰ@@I@@ఐ$bodyUT-MKMX@@@7@@@@@$A@sT@O"@A@@@5@ఠ.find_candidateUf/M^MbUg/M^Mp@UyA@@@O@@@OT@O@@ODP)lfunction@@@OT@O@@@OT@O@@OT@O3U}U|U|U}U}U}U}U}@]@@@@@@Ġ)LfunctionU0M|MU0M|M@;)LfunctionO@@@@ @AD@V@AP0.''P1.'' @@@P@ఠ$lfunU0M|MU0M|M@UA@@,@@@O3UUUUUUUU@*JU/M^M^U1MM@@@@@@" @@B@@ఐ$lfunU0M|MU0M|M@@@@@H@@@O@O3UUUUUUUU@) @@@$attrU0M|MU0M|M@3$attrU@@@ Q&2function_attribute@@@ @@D3$kind Q.-function_kind@@@ @@@@@PxO,Z,^PyO,Z,r@@Q2'@3¶msNS@Oq!t@@@ 栠@QI@@@ @@ @@@ @@A"@@PP,s,wPP,s,@@QL(@3&return0QS@@@ @@B+@@PQ,,PQ,,@@QU)@3$body9P@@@ @@C4@@PR,,PR,,@@Q^*@B3#locBNt@@@ @@E=@@PT- -PT- -'@@Qg,@@@PS,,PS,,@@Qk+@aQ@@M@@@O@O]@-tmc_candidateV(0M|MV)0M|M@3-tmc_candidateX@@@ $boolE@@@ @@F#3&inline Q0inline_attribute@@@ @@@@AP$|$~P$|$@@Q@3*specialiseQ4specialise_attribute@@@ @@A@AP$$P$$@@Q@3%local"Q/local_attribute@@@ @@B@AP$$P$$@@Q@3$poll-Q.poll_attribute@@@ @@C)@AP$$P$$@@Q@3,is_a_functor85@@@ @@D3@AP$$Q$%@@Q@3$stubB?@@@ @@E=@AQ %%Q %%@@Q@L3.may_fuse_arityLI@@@ @@GG@AQ$&A&CQ$&A&X@@Q@@AQ%%Q%%*@@Q@\@@C@@@OV@O@ภ$SomeV0M|MV0M|M@@Iఐ$lfunV0M|MV0M|M@ܰ@@!@@@@)@@V1MMV1MM@@4@@@ภ$NoneV1MM@C@@@7@@AEfV/M^Ms@@@@@FT@O3VVVVVVVV@@@@A@@@2@ఠ/declare_bindingV3MMV3MM@VA@@@@@@QT@O@@O@@H#Map#key@@@PT@OΠ@P@@@OT@O@@OT@O@@O"T@O@@OT@O@@OT@O3VVVVVVVV@k@@@@@࣠@#ctxAV3MMV3MM@W A@@53VVVVVVVV@DW3MMW;NO!@@@@@  @@RA@ఠ#varW3MMW3MM@W&A@@<3WWWWWWWW@&Q@@@@@@ఠ#defW"3MMW#3MM@W5A@@@@@W'3MMW(3MM@@@R@I@@O@@ @@ఐ֠.find_candidateW<4MMW=4MN@P@@@QT@@@O@@OEߠ@@@O@@@O@@O3WHWGWGWHWHWHWHWH@8Av@;@<3l@-@.@@@@ఐ:#defW\4MNW]4MN@ @@y@@$@@E@@@O@@@O@Ġ$NoneWq5N NWr5N N@D@@@@F @@@O@@@O3WvWuWuWvWvWvWvWv@.@@@ @F@@@O@@@O@@@ఐ#ctxW5N NW5N N@s@@@Ġ$SomeW6NN!W6NN%@APఠ$lfunW6NN&W6NN*@WA@@(@@@OZ@@@@@FA/@@@O@@@Ob@@FH6@@@O@@@Oi@@@@ఠ%arityW7N.N4W7N.N9@WA@@Jn@@@P Y@P3WWWWWWWW@}/(@)@*@@@డV>$List&lengthW7N.N<W7N.N@@ W7N.NAW7N.NG@@Jk@@@Jk@@@@P@SE@@@P@@PY@P@@@P@@PJ@@@P@@P1@@ఐf$lfunX7N.NHX7N.NL@=@@@@@P@PE@¶msX7N.NMX7N.NS@/@@J4@@@PZ@PZ@PT@@E @@XU@A@X7N.N0 @@@ఠ&dps_idX*8NWN]X+8NWNc@X=A@@J@@@P$Y@P3X.X-X-X.X.X.X.X.@kyr@s@t@@@డT,create_local%IdentXC8NWNfXD8NWNk@ XG8NWNlXH8NWNx@@I@@@I@@@P@@PJ#@@@P@@P"@@డV!^Xa8NWNXb8NWN@@&stringQ@@@@@@ @@@@@@@@@@@@@B^6^6B^6^\@@Bq@@@@@@@P.@@P-@@@@P,@@P+@@@P*@@P)@@P(]@@డU6$name%IdentX8NWNzX8NWN@ X8NWNX8NWN@@@J}@@@@@J\@@@@@@JWkRRJXkRg@@JI@@@@J@@@PC@@PB@@@PA@@P@@@ఐ#varX8NWNX8NWN@~@@@@0@@l@@@P>@PN\@PJ@@$_dpsX8NWNX8NWN@@X8NWNX8NWN@@v@@@P<[@PP[@PO@@X8NWNyX8NWN@@J@@@P&@PQ[@P:@@ @@@A@X8NWNY @@@ఠ+direct_kindY9NNY9NN@YA@@,@@@PUY@PR3YYYYYYYY@@@@@@ఐw$lfunY9NNY9NN@N@@@@@PV@PT@$kindY#9NNY$9NN@K@@@A@Y'9NN@@@ఠ$candY2:NNY3:NN@YEA@@@@@P[Y@PW3Y7Y6Y6Y7Y7Y7Y7Y7@2@9@:@;@@@ະ3 @@@O(@@@3@@A@A@3@@B@A@@A@ϡ%arityYO:NNYP:NNAఐ @"@@@@P]Y@P^ @&dps_idYb:NNYc:NNAఐA @]@@@@PdY@Pe3@'+direct_kindYu:NNYv:NNAఐ| @?@@@@PkY@PlF@@@Y:NNY:NN@@OI@A@Y:NN@@ຐ3r@@@O)t@@@@Af@c+specializedY;NNY;NN@డV;#Map#add%IdentY;NNY;NN@ Y;NNY;NO@@Y;NOY;NO@ @@@@@A@@A@!a@A@@A@!t @@@A@@A@@@A@@A@@A@@A@KvTaiKwTa@@+Stdlib__MapF@0&@@@@@@P@@P@@@@PvX@QX@P@@P@&@@@P@@P*@@@P@@P@@P@@P~3YYYYYYYY@@@@@@@ఐ#varZ;NOZ;NO @@@+@@ఐޠ$candZ;NO Z;NO@@@0X@P@@ఐ)#ctxZ ;NOZ!;NO@ @@Z-@+specializedZ';NOZ(;NO@ @@Y@Q@@@Q:@@ @@iQ@@@P?@@@Z6;NN4@@LA@5@@M@6@@N.@C7@@O@8@@Pr@@@AZ<4MM:@@R@D;A@{T@QwB@A@?@?>@UAఠ&choiceZL=O#O+ZM=O#O1@Z_A@@@@@@}T@Q@@Q@Tp@@@yT@Q@@Q$tailG@@@xL@@xK##Z@@@@@@T@T@~:T@~;T@}T@xC@@xJT@Q@@Q@@Q3Z|Z{Z{Z|Z|Z|Z|Z|@@@@@@࣠@#ctxAZ=O#O2Z=O#O5@ZA@@?3ZZZZZZZZ@U@P@@Q@M@@QH@@QU@Q@@QU@Qx@[@\(traverse@_T@Q@@Q@]T@Q@@QT@@@uT@Q@@QU@Q@@QU@Qy@ZZ@@ZA2traverse_lfunction@{T@zT@Q@@Q@\@@@yT@Q@@Qa@@@}T@Q@@QU@Q@@QU@Qz@Z.2Z.D@@ZA,traverse_let@"T@yT@Q@@Q@@@@z T@Q@@Q@T@{oT@{pT@zT@Q@@Q@"T@Q@Cנ@%T@xߠ@dT@x@@x@@@xT@Q@@QU@Q@@QU@Q@@QU@Q@@QU@Q{@["uy[#u@@[5A/traverse_letrec@aT@Q@@Q@Q V+rec_binding@@@zT@z@@@{T@Q@@Q@|T@Q@S@@@y@@@yT@Q@@QU@Q@@QU@Q@@QU@Q|@[W6:[X6I@@[jA4traverse_let_binding@T@Q@@Q@T@Q@@Q@{T@Q@@Q@rT@Q@@QhT@Q@@QU@Q@@QU@Q@@QU@Q@@QU@Q}@[}<@[~<T@@[A7traverse_letrec_binding@T@Q@@Q@VT@Q@@QQgHT@z@@@{T@Q@@QU@Q@@QU@Q~@[Z^[Zu@@[A0make_dps_variant@T@Q@@Q@\T@Q@@Q@cT@Q@@Q@[)lfunction@@@QU@Q@@Q@V@|ؠ@Z@@@|V@|@@|V@|@@@|T@Q@@QU@Q@@QU@Q@@QU@Q@@QU@Q@[QU[Qe@@[A-traverse_list@T@Q@@Q@ϠV@O@@@aT@Q@@QTd>@@@uT@Q@@QU@Q@@QU@Q@[[@@\A@@@@rq@@!tA\ =O#O6\ =O#O7@\A@@3\ \\\ \ \ \ \ @|@@@@@@@@Aఠ&choice̠\>O:OD\>O:OJ@\0A@@@O:OK\T>O:ON@\f A@@23\R\Q\Q\R\R\R\R\R@F@A@@R)>@@R-@;@@R18@@R3X@R.@@R/X@R*@@R+X@R!@R@S,choice_apply@VT@R4@@R5$tailVW@R8@@R9@W,lambda_apply@@@mwW@R<@@R=rW@xW@vW@vW@vSW@v@@R?X@R:@@R;X@R6@@R7X@R"@\]]\]]@@\A0choice_makeblock@W@R@@@RA$tailW@RD@@RE@@@b@@@pW@n@@]@\@@@pW@n@\@W@@@pW@n @@n W@RH@@RI@T@yT@XtT@n;W@RL@@RM@U]@@@oDW@RP@@RQgW@pW@RR@@RSX@RN@@ROX@RJ@@RKX@RF@@RGX@RB@@RCX@R#@]hh]hh@@]A+choice_prim@T@RT@@RU$tailW@RX@@RY@U@@@uW@R\@@R]@O:OP]>O:OT@^A@@3]]]]]]]]@@@@@@@]>O:OO@@!tA^>O:OU^>O:OV@^A@@3^]]^^^^^@@@@@@@@@ఐ!t^?OYOc^?OYOd@@@@@3^^^^^^^^@@@@Ġ$Lvar^1@OjOq^2@OjOu@W@^6@OjOv^7@OjOw@@W@@@R3^6^5^5^6^6^6^6^6@$@@@@@ @@@@@Ġ'Lmutvar^E@OjOz^F@OjO@;'LmutvarW@W!t@@@ @AA@V@AX+&&X+&&@@@Y@@^X@OjO^Y@OjO@@@@@R"@@@@@'#@@'#@@.@@($@Ġ&Lconst^g@OjO^h@OjO@P@^l@OjO^m@OjO@@P@@@R6@@@ @@;7@@;7@@B@@<8@Ġ)Lfunction^{@OjO^|@OjO@@^@OjO^@OjO@@ @@@RJ@@@ @@OK@@OK@@V@@PL@Ġ%Lsend^@OjO^@OjO@;%LsendX@Y)meth_kind@@@ ՠX@@@ ֠X@@@ נWX@@@ @@@ ؠW @@@ @ES@V@AYFB**YGB*+@@@Z"@@^@OjO^@OjO@@$@@@R@@@X@@@R@@ @X@@@R@@@%X@@@R@@@R@@@W1@@@R@@@E@@@@@@@@@Ġ'Lassign^AOO^AOO@;'LassignXg@Xd!t@@@ ӠX@@@ @BR@V@AYA**YA**@@@Z>!@@^AOO^AOO@@@@@R@@@Y @@@R@@@" @@@@@@ @@@Ġ$Lfor_AOO_ AOO@;$LforX@X!t@@@ ΠY%@@@ ϠY)@@@ РT.direction_flag@@@ ѠY3@@@ @EQ@V@AY@*_*aY@*_*@@@Zw @@_-AOO_.AOO@@"@@@R@@@YE@@@R@@ @YJ@@@R@@@"@@@R@@@YT@@@R @@@?@@ @@ @@@@ @Ġ&Lwhile_PAOO_QAOO@;&LwhileX@Yf@@@ ̠Yj@@@ @BP@V@AY?*A*CY?*A*^@@@Z@@_dAOO_eAOO@@Yw@@@S.@@@Y|@@@S3@@@ @@84@@84@@_p@OjOp_qAOO@@;7@@@@ఠ!t_|BOO_}BOO@_7A@@T@yT@yCT@yT@y$T@xT@xT@XMT@XUT@WwT@WzT@TT@TT@TT@TT@TFT@THT@ST@ST@S3________@@@@ఐ(traverse_BOO_BOO@@@@@@S@@@S@@S@@S@@ఐu#ctx_BOO_BOO@Ұ@@"@@ఐԠ!t_BOO_BOO@@@/@@&@@0@A@_BOO@@డ)1&lambda&Choice_COO_COP@ _COP_COP@@@_'@@@?=@@?<~`'@@@?;@@@?:@@?9@( @(@@@@@@S@@S@@@S@@@S@@S3````````@@@@@@@ఐ!t`COP `COP @ @@@@8@@W@mW@mW@mW@YW@YW@YaW@YIW@XW@XW@UW@U@W@TW@T>W@S,@b@@@Ġ%Lprim`CHPP`DHPP@Xఠ$prim֠`LHPP`MHPP@`_A@@X@@@S 3`N`M`M`N`N`N`N`N@<@@@ఠ(primargsנ`[HPP`\HPP@`nA@@XˠZs@@@S @@@S @ఠ#locؠ`mHPP`nHPP@`A@@X@@@S !@@@2`uHPP@@?#@@?#@@@ఐt+choice_prim`IPP`IPP@x@@@v@@Ssq@@S@n@@S@g@@S@d@@S_@@S@@S@@S@@S@@S3````````@RK@L@MD=@>@?3,@-@.@@@@ఐW#ctx`IPP`IPP@@@@ఐǠ$tail`IPP`IPP@@@!@@ఐu$prim`IPP`IPP@)@@W@uW@S1@@ఐv(primargs`IPP`IPQ@8@@W@S@@@ఐs#loc`IPQ`IPQ@F@@W@uW@tW@tW@ST@@l @@U@Ġ&Lapply`MQQ`MQQ@;&LapplyZ@m@@@ @AC@V@A[-&&[-&'@@@\O@ఠ%apply٠a MQQa MQQ@aA@@@@@S3a a a a a a a a @@@@@@@@@@@@@ఐ,choice_applyaNQQaNQQ@@@@@@S@@S@@@S@@S@@S@@S3a%a$a$a%a%a%a%a%@' @!@"@@@@ఐ砐#ctxa7NQQa8NQQ@D@@@ఐW$tailaDNQQaENQQ@?@@@@ఐH%applyaQNQQaRNQQ@'@@W@mxW@m]W@mYW@mWW@mSW@mNW@mIW@m(W@lW@lW@lW@lW@lW@lW@lW@l>W@l9W@l7W@l2W@l0W@l-W@k7W@jW@hW@hW@T]@@m6@@N^@Ġ)LsequenceaRRRaRRR@4ఠ"l1ڠaRRRaRRR@aA@@[@@@S3aaaaaaaa@@@@ఠ"l2۠aRRRaRRR@aA@@[@@@S@@@ aRRR@@|@@|@@@@ఠ"l1aSRRaSRR@a8A@@=]@T3aaaaaaaa@.'@(@) @@@@@ఐ"(traverseaSRRaSRR@&@@@$@@T@!@@T @@T@@T@@ఐ#ctxaSRRaSRR@@@&@@ఐW"l1aSRRaSRR@/@@T@R^@T6@@)@@>7@A@aSRR@@;$let+bTRRbTRR@@ p@@@?@@?@@ y@@? k@@?@@?~ n@@@?}@@?|@@?{@ @ @W@tW@tW@tW@qW@qW@q`W@qsW@qW@qW@pW@pW@pW@pW@pW@oCW@oWW@nW@oW@mW@YW@ZW@YW@YW@YW@YW@Y{W@YW@YW@Y W@YW@YW@UW@UW@UjW@U}W@TW@TW@TG]@T@@@T]@T"@@T%@@YW@TIW@T@@T\W@TD\@T@@T @@T#  ]@T@@@T]@T!@@T$@@T&]@Tఐu&choicebTRRbTRR@5@@@t@@T-5o@@T,@j@@T+g@@T*@@T)@@T(3bbbbbbbb@@@@@@@ఐ^#ctxbTRRbTRR@@@@MఐΠ$tailbTRRbTRR@@@@@ఐ"l2bTRRbTRR@@@]@T=,@@<@@-@bURS @@"l2bTRRbTRR@b9A@@`:@@@ภ)LsequencebURRbURS@6Kఐ."l1bURSbURS@J@@-3bbbbbbbb@N v@@@@@ఐ%"l2bURS bURS @ @@@@.@@@A/@@W@TJ3bbbbbbbb@_@@@3@@@@Ġ+Lifthenelsec VS Sc VS S@;+Lifthenelse\@]"@@@ Ǡ]&@@@ Ƞ]*@@@ @CN@V@A]=))]=)*@@@^n@ఠ"l1ܠc(VS S c)VS S"@c;A@@]=@@@S3c*c)c)c*c*c*c*c*@@@@ఠ"l2ݠc7VS S$c8VS S&@cJA@@]L@@@S@ఠ"l3ޠcEVS S(cFVS S*@cXA@@]Z@@@S@@@AcMVS S+@@@@@@@@ఠ"l1cXWS/S;cYWS/S=@ck:A@@]@TK3cXcWcWcXcXcXcXcX@I=6@7@8/(@)@*"@@@@@ఐ(traversecmWS/S@cnWS/SH@ð@@@@@TP@@@TO@@TN@@TM@@ఐ2#ctxcWS/SIcWS/SL@@@`(@@ఐg"l1cWS/SMcWS/SO@0@@^@T[7@@(@@8@A@cWS/S7@@$let+cXSSS[cXSSS_@@ 1 @@@Te]@Tk@@Tn@@W@Tf@@ThW@T\@Tg@@Ti@@Tl D ]@T_@@@T^]@Tj@@Tm@@To]@T\ఐP+choice_paircXSSSkcXSSSv@T@@@R@@TvOM@@Tu@J@@Tt>@@Ts@@Tr@@Tq3cccccccc@|@@@@@@ఐ#ctxcXSSSwcXSSSz@@@@gఐ$tailcXSSS|cXSSS@@@@@@ఐ̠"l2dXSSSdXSSS@@@rW@T/@@ఐˠ"l3dXSSSdXSSS@@@{W@T<@@dXSSSdXSSS@@W@TA@@Q@@B@}dYSS@@ @ఠ"l2d(XSSSad)XSSSc@d;;A@@T@@ఠ"l3d4XSSSed5XSSSg@dG7@8@91*@+@,$@@@@@ఐ I(traversed\T Td\T T%@ M@@@ K@@T@ H@@T G@@T@@T@@ఐ#ctxe \T T&e \T T)@@@*@@ఐZ#defe\T T*e\T T-@/@@'^@T9@@(@@ d:@A@e \T T@@a$let+e(]T1T9e)]T1T=@&@  ]@T@@@T]@T@@T@@W@T@@TW@T\@T@@T@@T Ϡ ]@T@@@T]@T@@T@@T]@Tఐ 7&choiceeT]T1TEeU]T1TK@@@@ 6@@T  1@@T@ ,@@T )@@T@@T@@T3e^e]e]e^e^e^e^e^@@@@@@@ఐ #ctxep]T1TLeq]T1TO@}@@ N@ ఐ$taile}]T1TQe~]T1TU@x@@ R@@ఐ$bodye]T1TVe]T1TZ@@@]@T,@@<@@ V-@ie^T^T@@$bodye]T1T>e]T1TB@e>A@@^:@@@ภ'Lmutlete^T^Tfe^T^Tm@$ఐ "vke^T^Toe^T^Tq@Ű@@a@@@T]@T]@T3eeeeeeee@U'{@@@@@ఐ#vare^T^Tse^T^Tv@ٰ@@A@@@T]@T]@T@ఐ#defe^T^Txe^T^T{@q@@ @ఐI$bodye^T^T}e^T^T@(@@+@@@R@@,@AS@@W@T3eeeeeeee@@@@W@@ @Ġ$Llete_TTe_TT@Wiఠ"lke_TTe_TT@fA@@Wq@@@S,3eeeeeeee@@@@ఠ"vkf _TTf _TT@fA@@a`@@@S-@ఠ#varf_TTf_TT@f+A@@W@@@S.@ఠ#deff&_TTf'_TT@f9 A@@`;@@@S/+@ఠ$bodyf4_TTf5_TT@fG!A@@`I@@@S09@@@Jf<_TT@@ ;@@ ;@@@@@ఠ#ctxfK`TTfL`TT@f^?A@@ dT@T3fLfKfKfLfLfLfLfL@?`Y@Z@[RK@L@ME>@?@@81@2@3+$@%@&@@@@ఠ(bindingsfd`TTfe`TT@fw@A@@ \T@xT@UmT@UyT@T@@% @@@%@@@T%@ఐ ,traverse_letf`TTf`TT@ @@@ @@U@ @@T@ @@T@ @ @@T@@T@@T@@TC@@ఐ N#ctxf`TTf`TT@@@ |P@@ఐ#varf`TTf`TT@T@@ T@U^@@ఐ#deff`TTf`TT@a@@ T@zT@Un@@A@@@w@`@@U^@Uw@A@f`TT@@ $let+faTTfaTT@@ d]@U@@@U]@U$@@U'@@W@U@@U!\@U @@U"@@U% v]@U@@@U]@U#@@U&@@U(]@Uఐ ޠ&choicefaTTfaTT@ @@@ @@U/  @@U.@ @@U- @@U,@@U+@@U*3gggggggg@@@@@@@@@ఐΠ#ctxgaTTgaTU@@@@ ఐ 9$tailg&aTUg'aTU@ !@@ @@ఐ$bodyg3aTUg4aTU @ڰ@@A]@U?.@@>@@ /@ig:bUU0@@$bodygBaTTgCaTT@gUAA@@^<@@@ఐn%lletsgObUUgPbUU@Ͱ@@@X@@@UR@@UQ@b@@@UP@@UO@P'@X@@@UM@a@@@UN@@UL@@@UK@@UJ@a@@@UH@@UI@@UG@@UF@@UE@@UD3gvgugugvgvgvgvgv@rB@9@:@@@@ఐ"lkgbUUgbUU@3@@Y@@@Ut^@Uv^@Uu@@ఐ"vkgbUU gbUU"@F@@b@@@Ur^@Ux^@Uw+@@ఐL(bindingsgbUU#gbUU+@@@K8@@ఐ~$bodygbUU,@A@@D@@q@@E@A@@W@U~3gggggggg@@@@@@ t@Ġ'LletrecgcU1U7gcU1U>@;'LletrecaY@  @@@ @@@ a@@@ @BG@V@Abw1''bx1''@@@c1@ఠ(bindingsgcU1U@gcU1UH@g"A@@  @@@S6@@@S53gggggggg@ @@@ఠ$bodygcU1UJgcU1UN@h#A@@b@@@S7@@@7hcU1UO@@ @@ @@@@@ఠ#ctx hdUSU_hdUSUb@h(BA@@ T@U3hhhhhhhh@ 70@1@2%@@ @@@@ఠ(bindings h(dUSUdh)dUSUl@h;CA@@ T@yT@UT@UT@U@@ @@@@@@U@ఐ /traverse_letrechCdUSUohDdUSU~@ @@@ @@U@ @@U@ @ @@U@@U@@U9@@ఐ #ctxh^dUSUh_dUSU@ k@@ <F@@ఐ(bindingshkdUSUhldUSU@O@@ ?T@{T@zT@zT@UZ@@3 @@@c@R@@U^@Uc@A@hdUSU[@@$let+heUUheUU@@d]@U@@@U]@U@@U@@pW@U@@UqW@U\@U@@U@@U. ]@U@@@U]@U@@U@@U]@Uఐ &choiceheUUheUU@ V@@@ @@UV @@U@ @@U @@U@@U@@U3hhhhhhhh@@@@@@@@@ఐ#ctxheUUheUU@@@@pఐ $tailheUUheUU@ ٰ@@ @@ఐ$bodyheUUheUU@ΰ@@]@U.@@>@@ /@khfUU@@$body heUUheUU@i DA@@`<@@@ภ'LletrecifUUifUU@5ఐ栐(bindingsifUUifUU@J@@3i i i i i i i i @P v@@@@@ఐ%$bodyifUUifUU@ @@@@.@@@A/@@W@U3iiiiiiii@a@@@3@@  @Ġ'Lswitchi/gUUi0gUU@;'Lswitchb@cE@@@ d-lambda_switch@@@ a@@@ @CI@V@Ac3''c3'(,@@@d@ఠ"l1iMgUUiNgUU@i`$A@@cb@@@S<3iOiNiNiOiOiOiOiO@ =@@@ఠ"swi\gUUi]gUU@io%A@@(@@@S=@ఠ#locijgUUikgUU@i}&A@@a@@@S>@@@CirgUU@@ <@@ <@@@@@ఠ*consts_lhs iiVViiVV)@iEA@@X&^{@@@U]@U@@@U]@U3iiiiiiii@ }LE@F@G>7@8@91*@+@,@@@@ఠ*consts_rhs iiVV+iiVV5@iFA@@Y(c@@@U]@U@@@U]@U@@/@@@/@@@U%@డh($List%splitiiVV8iiVV<@ iiVV=iiVVB@@X$@@@X$@L@/@@U@@@U@@U@X|V@@@Uޠ@Ye=@@@U@@U@@UV@@ఐ"swiiVVCiiVVE@_@@@@@U@Uj@)sw_constsiiVVFjiVVO@3)sw_consts@@@ br@@@@ @d$@@@ @@ @@@ @@A3,sw_numconsts_ @@@ @@@@Ad_.F.Jd_.F.\@@eo3@!3,sw_numblocks!_@@@ @@B@Ada..da..@@ey5@3)sw_blocks+b@_%@@@ @dM@@@ @@ @@@ @@C)@Adb//db//3@@e6@3-sw_failactionC ld[@@@ @@@ @@D7@Adc/N/Rdc/N/o@@e7@@Ad`..d`..@@e4@dW@@X@ؠ@@@U@@@U^@U^@U@@f@@@砠@@@U^@U@A@joiVVp@@@@ఠ*blocks_lhsj~jVSV_jjVSVi@jGA@@Y#S@@@V!]@V@@@V]@U3jjjjjjjj@ @ @@@@@@@ఠ*blocks_rhsjjVSVkjjVSVu@jHA@@Z"d@@@V"]@V @@@V]@V@@,@@@,@@@V#@డi"$List%splitjjVSVxjjVSV|@ jjVSV}jjVSV@@Y@@@Y@I@/@@V @@@V @@V @YvS@@@V@Z_=@@@V @@V@@VT@@ఐ"swjjVSVjjVSV@Y@@@@@V#@Vh@)sw_blocksjjVSVjjVSV@ϰ@@YU@@f@@V@@@V^@V$^@V}@@N@@@@u@@V&^@V@A@kjVSV[@@@ఠ"l1klVVk lVV@k2IA@@ ]@V'3kkkkkkkk@@@@@@@@ఐ(traversek2lVVk3lVV@@@@@@V,@@@V+@@V*@@V)@@ఐ#ctxkGlVVkHlVV@ T@@%&@@ఐ"l1kTlVVkUlVV@@@ b^@V75@@(@@6@A@k[lVV@@$let+kcmVVkdmVV@ a@@@W@XAW@WW@VB@W@VC@@VD@ W@X]W@WVW@VE@@VF]@V?@@@VA]@VK@@VN@@ @@VH dW@Wu\@VG@@VI@@VL! ]@V;@@@V:]@VJ@@VM@@VO]@V8ఐf+choice_listkmVVkmVV@j@@@h@@Vxec@@Vw@`@@VvX@@Vu@@Vt@@Vs3kkkkkkkk@@@@@@@ఐr#ctxkmVVkmVV@ ϰ@@@}ఐ ⠐$tailkmVVkmVV@ ʰ@@@@ఐ<*consts_rhskmVVkmVW @M@@W@uW@V-@@=@@.@ktXeX@$$and+knW WknW W@@{)@@@?@@?@)@@@?@@?@)Π@)@@?@@@?@@?@@?@)@)@W@VfW@Ve@@@Vj]@Vl@@Vp@ @@@Vh]@Vk@@Vn@@@@Vd@@@Vc]@Vm@@Vo@@Vq]@Vaఐ+choice_listl6nW W$l7nW W/@@@@@@V@@V@@@V@@V@@V@@V@@ఐ#ctxlOnW W0lPnW W3@\@@-@ ఐo$taill\nW W5l]nW W9@W@@1@@ఐϠ*blocks_rhslinW W:ljnW WD@C@@W@V@@9@@@lpmVV@$and+lwoWEWMlxoWEWQ@@ @@ @@V\@V\@VT@@@VY]@V[@@V_@W@VU@@@VW]@VZ@@V]%@@ @@VS@@@VR]@V\@@V^@@V`]@VPఐ-choice_optionloWEWbloWEWo@@@@@@V@@V@@@V@@V@@V@@V @@ఐx#ctxloWEWploWEWs@հ@@@ఐ蠐$tailloWEWuloWEWy@а@@#@@ఐ"swloWEWzloWEW|@P@@@@@V@V7@-sw_failactionloWEW}loWEW@@@-W@x W@VA@@H@@$B@@@(@@ఠ*consts_rhsmmVV@mJA@@W@WW@VW@V@V]@@ఠ*blocks_rhsmnW WmnW W!@m-KA@@@Vj@@A@@@@@Vq@@ఠ-sw_failactionm.oWEWRm/oWEW_@mALA@@@V~@@A@@@1@ @@V֠@@@V@@@@ఠ)sw_constsmJqWWmKqWW@m]MA@@c#@@@@V^@Vᠠ@W@X\W@WGW@WW@V@@V@@@V^@V3mbmamambmbmbmbmb@ga@b@cVO@P@QC<@=@>@@@డk$List'combinem{qWWm|qWW@ mqWWmqWW@@@cZ!a@@@@@@@0!b@@@@@@L@@@@@@@@@@@@c;@M@Mc<@M@@@c:C@0+@@@(Z@@@V@@V@S[@@@V@@Vk@j@e@@V@@@V@@V@@V^@@ఐN*consts_lhsmqWWmqWW@A@@O@@@V_@V_@Vs@@ఐܠ*consts_rhsmqWWmqWW@{@@@@m@@@A@mqWW@@@ఠ)sw_blocksmrWWmrWW@nNA@@@@@@W^@W@@@W@@@W^@V3nnnnnnnn@@@@@@డl~$List'combinenrWWnrWW@ nrWWnrWX@@@@@'@@@W@@W@ɠ@@@W@@W@7@@@W@@@W@@W@@V2@@ఐǠ*blocks_lhsnErWXnFrWX@ @@ŠN@@@W_@W_@WG@@ఐ@*blocks_rhsnZrWXn[rWX@@@?T@@E@@dU@A@n_rWW@@@ఠ"swnjsX X,nksX X.@n}OA@@8@@@Wh^@W3nnnmnmnnnnnnnnnn@k~@@@@@Рbc@@@W^^@W\@)sw_constsnsX X;nsX XDAఐE @@@ @@@W0@=W@WNW@W1@@W/@@@W.^@W2-@@@@Wg^@We@|)sw_blocksnsX XFnsX XOAఐ  @@@@@@@WF@`@@WE@@@WD^@WHQ@-sw_failactionnsX XQnsX X^Aఐ @e@_@@ఐ~"swnsX X3nsX X5@F@@@@@Wp^@Wm^@W[q@nsX X1nsX Xa@@yt@A@nsX X(@@ภ'LswitchntXeXmntXeXt@ఐڠ"l1ntXeXvntXeXx@D@@3nnnnnnnn@@@@@@ఐ"swotXeXzotXeX|@ @@@@@Wx]@W|]@W{@ఐ#locotXeX~otXeX@@@g@@@Wy]@W]@W'@@5@@@i5@@@Wv+@@D@@@E@@ @AF@@@AG@@W@W3o(o'o'o(o(o(o(o(@x@@@K@@ @L@@@M@@@Ġ-Lstringswitcho;uXXo<uXX@;-Lstringswitchh@iQ@@@ g@&stringQ@@@ @ie@@@ @@ @@@ im@@@ @@@ g@@@ @DJ@V@Ai6((i7((@@@j@ఠ"l1opuXXoquXX@o'A@@i@@@SH3oroqoqororororor@`@@@ఠ%casesouXXouXX@o(A@@?@>@@@SK@i@@@SL@@SJ@@@SI@ఠ$failouXXouXX@o)A@@Ġi@@@SN@@@SM.@ఠ#locouXXouXX@o*A@@h@@@SO<@@@youXX@@~>@@~>@@@@@ఠ)cases_lhsowXXowXX@oPA@@^h@@@W]@W@@@W]@W3oooooooo@kd@e@f]V@W@XC<@=@>2+@,@-@@@@ఠ)cases_rhsowXXowXX@oQA@@_ki@@@W]@W@@@W]@W @@0@@@0@@@W'@డnk$List%splitpwXXpwXX@ p wXXp wXX@@^g@@@^g@M@/@@W@@@W@@W@^W@@@W@_=@@@W@@W@@WX@@ఐ%casesp4wXXp5wXX@^@@^@v@X@@W@@@W^@W^@Ws@@@@@@@g@@W^@W|@A@pOwXX@@@ఠ"l1pZyYY$p[yYY&@pmRA@@]@W3pZpYpYpZpZpZpZpZ@@@}@~@@@@ఐ(traversepmyYY)pnyYY1@ð@@@@@W@@@W@@W@@W@@ఐ2#ctxpyYY2pyYY5@@@`&@@ఐ"l1pyYY6pyYY8@@@^@W5@@(@@6@A@pyYY @@$let+pzY<YDpzY<YH@@1@O\@Wà@\@W@@W]@W@@@W]@W@@W@@@@WW@XK\@W@@W@@WM ]@W@@@W]@W@@W@@W]@Wఐ+choice_listpzY<YUpzY<Y`@@@@@@W@@W@@@W@@W@@W@@W3pppppppp@@@@@@@ఐ#ctxpzY<YapzY<Yd@@@@ఐ$tailpzY<YfpzY<Yj@@@@@ఐ%)cases_rhsqzY<Ykq zY<Yt@@@.W@W,@@<@@-@qq~YZ#@O$and+q{YuY}q{YuY@+@@@@W]@W@@W@U@@@W]@W@@W@ՠ@a@@W@@@W]@W@@W@@W]@Wఐ-choice_optionqC{YuYqD{YuY@@@@@@W@@W@@@W@@W@@W@@Wq@@ఐ #ctxq\{YuYq]{YuY@i@@:~@ఐ|$tailqi{YuYqj{YuY@d@@>@@ఐܠ$failqv{YuYqw{YuY@@@W@X@@9@@@q}zY<YI@@-t@ఠ)cases_rhs qzY<YR@qSA@@@X@@ఠ$failq{YuYq{YuY@qTA@@@X@@A@@@@@X@@@@ఠ%casesq}YYq}YY@qUA@@b@o@@@X?^@X&@X@@X9@@@X8^@X 3qqqqqqqq@>8@9@:3,@-@.@@@డp8$List'combineq}YYq}YY@ q}YYq}YY@@X@@@X)@@@X+@@X*@@@@X)@@X(@9@@@X%@@@X$@@X#@@X"4@@ఐ<)cases_lhsq}YYr}YY@@@P@@@X=_@X@_@X>I@@ఐ)cases_rhsr}YYr}YY@R@@V@@E@@fW@A@r}YY@@ภ-Lstringswitchr ~YYr!~YZ @ఐР"l1r*~YZr+~YZ@I@@3r(r'r'r(r(r(r(r(@m@@@@@ఐ%casesr8~YZr9~YZ@ @@@@@@XP@@@XO@@@XN]@XY]@XV@ఐ$failrT~YZrU~YZ@@@*@ఐ#locr_~YZr`~YZ"@@@j@@@XT]@Xb]@Xa<@@J[@@l{@@@XL@@U_@@@A`@@LW@Xc3rlrkrkrlrlrlrlrl@@@@d@@@%e@@:@Ġ,Lstaticraiser~Z$Z*rZ$Z6@;,Lstaticraisel@gr@@@ jl@@@ @@@ @BK@V@Am(8((m)8() @@@m@ఠ"idrZ$Z8rZ$Z:@r+A@@@@@ST3rrrrrrrr@@@@ఠ"lsrZ$Z<rZ$Z>@r,A@@'l@@@SV@@@SU@@@9rZ$Z?@@@@@@@@ఠ"lsrZCZOrZCZQ@rVA@@T@uT@XT@XT@Xd3rrrrrrrr@81@2@3*#@$@%@@@ఐ-traverse_listrZCZTrZCZa@@@@@@Xi@@@Xh@@Xg@@Xf@@ఐ#ctxrZCZbrZCZe@@@&@@ఐR"lsrZCZfrZCZh@.@@3@@&@@ 4@A@sZCZK@@డ<\&lambda&ChoicesZlZtsZlZz@ sZlZ{sZlZ@@+@@@+@@@X{@@Xz*@@@Xy@@@Xx@@Xw3s!s s s!s!s!s!s!@Zjc@d@e@@@@ภ,Lstaticraises2ZlZs3ZlZ@ఐ"ids<ZlZs=ZlZ@n@@@@@X]@X]@X @ఐ"lssNZlZsOZlZ@(@@+@@sRZlZsSZlZ@@e@@@X]@X3@@J@@7W@X6@[ @@#@Ġ(LtrywithsgZZshZZ@;(Ltrywithl@m}@@@ Ġl!t@@@ Šm@@@ @CM@V@An:)X)Zn:)X)@@@n@ఠ"l1sZZsZZ@s-A@@m@@@S[3ssssssss@v@@@ఠ"idsZZsZZ@s.A@@)@@@S\@ఠ"l2sZZsZZ@s/A@@m@@@S]@@@DsZZ@@u@@u@@@ $let+s[^[fs[^[j@@F@\@X@\@X@@X]@X@@@X]@X@@X@@@@XW@Y\@X@@X@@Xb ]@X@@@X]@X@@X@@X]@Xఐʠ&choices[^[ps[^[v@@@@@@X@@X@@@X@@X@@X@@X3ssssssss@xq@r@sjc@d@e]V@W@X@@@@ఐ#ctxt[^[wt[^[z@@@@ภbѰt[^[t[^[@b@@@W@lW@lW@i?W@X]@X(@@ఐ"l1t([^[t)[^[@0@@6]@X7@@G@@8@|t/[[@!o$and+t6[[t7[[@K@ɠW@X@@@X]@X@@X@ՠW@X@@@X]@X@@Xܠ@@ @@X@@@X]@X@@X@@X]@XఐI&choicetf[[tg[[@ @@@H@@X C@@X@>@@X;@@X@@X@@X@@ఐ/#ctxt[[t[[@@@]@ఐ$tailt[[t[[@@@a@@ఐ"l2t[[t[[@@@]@X@@9@@e@t[^[k@@0"@ఠ"l1  t[^[m@tWA@@~@X@@ఠ"l2!t[[t[[@tXA@@@X@@  A@@@@@X@@@ภ(Ltrywitht[[t[[@dఐ("l1t[[t[[@(@)@*@@)3tttttttt@3' @!@"@@@ఐP"idt[[t[[@@@|@@@Y]@Y]@Y@ఐ>"l2t[[t[[@@@=!@@0@@("@AI@@3tttttttt@@@@Ġ,Lstaticcatchu[[u[[@;,Lstaticcatchn@o@@@ @j@@@ @m@n!t@@@ @p|@@@ @@ @@@ @@ o@@@@ @CL@V@Ao9))o9))W@@@p@ఠ"l1u>[[u?[[@uQ0A@@oS@@@Sg3u@u?u?u@u@u@u@u@@.@@@ఠ#idsuM[[uN[[@u`1A@@@A@@@Si@@@?@@@Sl@p@@@Sm@@Sk@@@Sj@@Sh%@ఠ"l2uq[[ur[[@u2A@@o@@@Sn3@@@ruy[[@@C5@@C5@@@"$let+u\]\eu\]\i@@@T\@Y@W\@Y@@Y]@Y@@@Y]@Y@@Y@@@@YcW@Yy\@Y@@Y@@Y0 ]@Y@@@Y ]@Y@@Y@@Y ]@Y ఐ&choiceu\]\ou\]\u@X@@@@@Y8X@@Y7@@@Y6@@Y5@@Y4@@Y33uuuuuuuu@@@y@z@{]V@W@X@@@@ఐ#ctxu\]\vu\]\y@@@@tఐ$tailu\]\{u\]\@ݰ@@!@@ఐ"l1u\]\u\]\@)@@]@YH0@@@@@1@uu\\@#6$and+u\\u\\@ @W@Y%@@@Y*]@Y,@@Y0@W@Y&@@@Y(]@Y+@@Y.@@ @@Y$@@@Y#]@Y-@@Y/@@Y1]@Y!ఐ&choicev-\\v.\\@а@@@@@YP @@YO@@@YN@@YM@@YL@@YKx@@ఐ#ctxvF\\vG\\@S@@$@ఐf$tailvS\\vT\\@N@@(@@ఐ"l2v`\\va\\@@@n]@Y`@@9@@,@vg\]\j@@2^%@ఠ"l1# vt\]\l@vYA@@=@Yg@@ఠ"l2$v\\v\\@vZA@@F@Yh@@A@@@@@Yl@@@ภ,Lstaticcatchv\\v\\@ఐ("l1v\\v\\@(@)@*@@)3vvvvvvvv@3' @!@"@@@ఐ_#idsv\\v\\@@@@@@@Y}@@@@@Y@r@@@Y@@Y@@@Y~@@Y|]@Y]@Y,@ఐT"l2v\\v\\@3@@S7@@F@@78@AX@@3vvvvvvvv@@@@Ġ&Leventv\\v\\@;&Leventpn@p@@@ ۠r?,lambda_event@@@ @BT@V@AqC++ qC+++@@@rD#@ఠ#lamv\\v\\@w3A@@q@@@Sr3wvvwwwww@@@@ఠ#levw \\w\\@w 4A@@$@@@Ss@@@1w\\@@@@@@@$V$let+w\\w\\@@]@Y@@@Y]@Y@@Y@@W@Y@@YW@Y\@Y@@Y@@YĠ ]@Y@@@Y]@Y@@Y@@Y]@Yఐ,&choicewI\\wJ\]@@@@+@@Y&@@Y@!@@Y@@Y@@Y@@Y3wSwRwRwSwSwSwSwS@CaZ@[@\SL@M@N@@@@ఐ#ctxwg\]wh\]@t@@E@ఐ$tailwt\] wu\] @o@@I@@ఐ#lamw\]w\]@(@@]@Y.@@>@@M/@kw]].@@#lam&w\\w\\@w[A@@`<@@@ภ&Leventw]]w]]#@ఐ#lamw]]%w]](@s@@@@t3wwwwwwww@Q!@@@ఐ#levw]]*w]]-@X@@@@@Y]@Y]@Y@@#5@@@A6@@3wwwwwwww@f@@@Ġ'Lifusedw]/]5w]/]<@;'LifusedqS@qP!t@@@ ݠq@@@ @BU@V@ArpD+,+.rqD+,+K@@@s*$@ఠ!xw]/]>w]/]?@w5A@@@@@Sw@ఠ#lamw]/]Aw]/]D@x6A@@r@@@Sx@@@1w]/]E@@@@@@@%;$let+x]I]Qx]I]U@@]@Y@@@Y]@Y@@Y@@W@Y@@YW@Y\@Y@@Y@@Y ]@Y@@@Y]@Y@@Y@@Y]@Yఐ&choicex.]I]\x/]I]b@Ѱ@@@@@Y @@Y@@@Y@@Y@@Y@@Y3x8x7x7x8x8x8x8x8@(`Y@Z@[SL@M@N@@@@ఐ#ctxxL]I]cxM]I]f@Y@@*@ఐl$tailxY]I]hxZ]I]l@T@@.@@ఐt#lamxf]I]mxg]I]p@'@@t]@Y.@@>@@2/@kxm]t]@@#lam'xu]I]Vxv]I]Y@x\A@@`<@@@ภ'Lifusedx]t]|x]t]@ఐ!xx]t]x]t]@K@@@@@Y]@Z]@Z3xxxxxxxx@W'}@@@@@ఐ,#lamx]t]x]t]@ @@@@#5@@@A6@@i3xxxxxxxx@f@@@@@Ax?OYO]9@@l@T:A@@@@hI@@h@~@@h{@@h@@h@@hW@h}^@@@x>O:O<J@II@ @@F@@RCA@@R@>@@R7@@R@@R@@R3xxxxxxxx@@@@࣠@#ctxAx]]x]]@x`A@@^3xxxxxxxx@@@@@@]]Aax]]x]]@xaA@@c3xxxxxxxx@o@@@@@@x]]@@%applyAx]]x]]@ybA@@n3xxxxxxxx@x@@@@@@@@ &No_tmc\y]]y ]]@#x@@@Ay ]]@@ycA@@@@@ @3y y y y y y y y @&@@@@@ఠ9explicit_tailcall_requestРy!]]y"]]@y4dA@@h6@@@h]@h3y%y$y$y%y%y%y%y%@("@@@ఐE%applyy7]^ y8]^@%@@@+ap_tailcally>]^y?]^@3+ap_tailcall@@@ t2tailcall_attribute@@@ @@C3'ap_func s^@@@ @@@@AsW->-BsW->-S@@t-@3'ap_argsq sk@@@ @@@ @@A@AsX-T-XsX-T-n@@t.@3&ap_loc"q@@@ @@B@AsY-o-ssY-o-@@t/@+3*ap_inlined+#5@@@ @@D&@At[--t[--@@t1@3.ap_specialised4#3@@@ @@E/@At\..t\...@@t2@@AtZ--tZ--@@t0@KC@@=@@@h[@Ġ0Default_tailcally^"^,y^"^<@;0Default_tailcallN@@@ m@@@@AA@At.t/-@@@t@@@  @@W@@@hu@@Z@@@hx@@@ภhfy^"^@y^"^E@hf@@@@Ġ4Tailcall_expectationy^F^Py^F^d@;4Tailcall_expectation%@#@@@ l@A@AA@AtUtV@@@u@Ġhy^F^ey^F^i@h@@@@@@@h@@@@@@@@h@@@@@h@@@ภhy^F^my^F^q@h@@@@Ġ4Tailcall_expectationy^r^|y^r^@3Ġhy^r^y^r^@h@@@@9@@@h@@@@@@@@h@@@@@h@@@డxm%raisez^r^z^r^@@#exnG@@@@@!a@@@&%raiseAAd$@@@d"^BBd#^Bg@@d!@@@@@@@@h@@h`@h@@h@@ภ&No_tmcz1^r^z2^r^@;/y0@@@h@@@5A@A-@@+@ @@0@@@h`@h@@;@@@@@AzA]^@@@A@zC]]@@ఐ]%applyzO^^zP^^@=@@3zMzLzLzMzMzMzMzM@)70@1@2@@@'ap_funczY^^zZ^^@ @@tm@@@h @Ġ$Lvarzi^^zj^^@sఠ!fѠzr^^zs^^@zeA@@s@@@h3ztzszsztztztztzt@'@@@@@@@t@@@h@@t@@@h@@@@ఠ+specializedӠz^^z^^@zgA@@'n@@@i#_@h3zzzzzzzz@C(!@"@#@@@డw=#Map$find%Identz^_ z^_@ z^_z^_@@z^_z^_@ @@#@@@BH@@BG@ !a@A+@@@BF@@BE@@BD@@BC@ @ U@"@@@#@@@h@@h@!K_@h@@@h@@h@@h@@hI@@ఐu!fz^_z^_@S@@$@@@i`@i[@@ఐ)#ctxz^_z^_!@@@j@+specialized{^_"{^_-@!y @@'w@@@i"u@@`@@0v@Ġ)Not_found{_._?{_._H@;)Not_found @@@ @@@e! A@A&_none_@@A@@e%I@@@@@z@@@i<@@@ ఐP$tail{1_L_]{2_L_a@8@@@డx<-prerr_warning(Location{A_g_w{B_g_@ {E_g_{F_g_@@@(Location!t@@@@@@(Warnings!t@@@@@$unitF@@@@@@@@4parsing/location.mli4++4++?@@N@,'@@@$@@@iG@@iF@@@@iE@@iD@@@iC@@iB@@iA@@డx /Scoped_location+to_location)Debuginfo{__{__@ {__{__@@{__{__@ @@)Debuginfo/Scoped_location!t@@@ L@@ K(Location!t@@@ J@@ I@4lambda/debuginfo.mlibb@@S@)@@@@@@j@@j@@@j@@j1@@ఐߠ%apply{__{__@@@I@@&ap_loc{__{__@x @@t<@@@jJ@@{__{__@@@@@iW@jd@jT@@ภ(Warnings{__{__@3Tmc_breaks_tailcall{__{_`@@;3Tmc_breaks_tailcall(Warnings!t@@@j_@@@W[n@A2utils/warnings.mliySUySj@@@ V@@@@@@@iUc@j}@@@@{@@@jb@jc@iS@@|_L_Z#@@ @డz%raise|%``|&``@ @@@ @@@j@@jb@j@@j@@ภ&No_tmc|:``|;``@ @@@3@@@jb@j@@@@@)|D`` @@@@@|F^_ @@m@A@|H^^@@@ఠ$args|S`.`<|T`.`@@|fhA@@tŠvn@@@kk@@@kj_@j3|\|[|[|\|\|\|\|\@@@@@@@@ఠ$kind|raa|saa@|iA@@(@@@j`@j@@ఠ%arity|aa|aa@|jA@@)@@@k`@j+@@ @@@@ @@j2@@ఐ+specialized|aa|aa@?@@#m@@@j@jG@+direct_kind|aa|aa@#e@@7N@@ఐ/+specialized|aa|ab@Y@@#@@@k@ka@%arity|ab|ab @#@@@h@@*@@@V@G@@ko@A@|aa @@డ|6find_exact_application&Lambda|bb!|bb'@ |bb(|bb>@@@'@@@ ?@@ >%arityq@@@ =@@ <@ujw@@@ ;@@@ :@@ 9,w@@@ 8@@@ 7@@@ 6@@ 5@@ 4@@ 3@wBBwBC?@@xck@61@@@'?@@@k@@k.,@@@k@@k@+w=@@@k@@@k @@k *ڠwG@@@k @@@k @@@k @@k@@k@@k3}6}5}5}6}6}6}6}6@@@@@@@@@ఐؠ$kind}Jbb?}KbbC@@@'u@@@k/a@k1a@k0@dఐ۠%arity}^bbE}_bbJ@!@@o@@@k-a@k3a@k2-@@ఐ%apply}tbbK}ubbP@b@@ <@'ap_args}{bbQ}|bbX@) @@w@@@k+@@@k*a@k8a@k5N@@@@4w@@@k(@@@k'@@@k&Z@Ġ$None}b^bl}b^bp@j@@@@Lw@@@kD@@@kC@@@kB3}}}}}}}}@r@@@ @Xw@@@kG@@@kF@@@kE @@@డ|*%raise}b^bt}b^by@@@@@@@k^@@k]wb@k\@@k[!@@ภ&No_tmc}b^bz}b^b@@@@@@@keb@ki2@@@@3@Ġ$Some}bb}bb@gఠ$args}bb}bb@~kA@@x @@@kQ@@@kP@@@ @@x@@@kT@@@kS@@@kR@ @x!@@@kW@@@kV@@@kU@@@ఐ)$args~bb~bb@(@)@*@@3~~~~~~~~@3@@@@@A~#bb@@w@T@@@A@~&`.`8 @@@ఠ(tailcall~1bb~2bb@~DlA@@@kv@@@k~_@kx@@ky@@@k_@kz@@k{_@kw3~@~?~?~@~@~@~@~@@@@@@@࣠@$tailA~Sbb~Tbb@~fmA@@3~R~Q~Q~R~R~R~R~R@+~[bb~\cc@@@@@  @@ఐ$tail~hc~c~ic~c@0@@@@13~g~f~f~g~g~g~g~g@"@@@ภ4Tailcall_expectation~tcc~ucc@ภmO~|cc~}cc@mN@@@@@@k`@k@@@@@@@@k@ภ0Default_tailcall~cc4@@5@@`@k'@~c~c9@@)@C:A@a_@kA@A@>@Р3G$&G@@@?8GGG@@@?0@@@ 3G @G@@@?3@@?2G@@?1@@A @AG@G3GG~G}@@@?5@@@?4@@B@AG|@Gy3GvGu@@@?6@@C@AGt@Gq3GnGm@@@?7@@D@AGl@Gi@AG@G&Choice~cd~cd @#dps~cd ~cd@@డ_$make#Dps~cd~cd@ ~cd~cd@@@B~KC@@@4@@@4@@4F~KA@@@4@@@4@@4@K@@K=@@@B@@@k@@@k@@kF@@@k@@@k@@k3@@@@@@@࣠$tailAcd cd$@/nA@@K@@@k3@@@@@%cd @#dstA0cd&1cd)@CoA@@KɠK@@@k@@@k365566666@2'K@@@k@"@#@@@@Bcd%@@ภ&LapplyJd-d;Kd-dA@U'ap_funcVdOdfWdOdm@ภ$Lvar^dOdp_dOdt@xఐߠ+specializedjdOdukdOd@ @@&7@@@k@k3mllmmmmm@8JL L @@@k@@@k@I@J@@@&dps_iddOddOd@&:@@y @@@ka@ka@k@@- @@y@@@ka@k@='ap_argsdddd@ఐyԠ,add_dst_argsdddd@x~@@@yϠy@@@k@@@k@@k@y@@@k@@@k@@k{@@@k@@k@@kL@@ఐ#dstdddd@V@@yy@@@l@@@lb@l b@l d@@ఐ$argsdddd@@@Cy@@@ka@lb@l@@@lb@lb@l @@R@@ @@@kb@l@x^@@@l3a@l1@+ap_tailcalldddd@ఐࠐ(tailcalldddd@@@@mQ@@@l@@l@@@l@@l@@ఐ$tail(dd)dd@@@mh@@@l&b@l(b@l'@@" @@@@@lb@l$@Π*@@@l:a@l8@̠*@@@l?a@l=@@ఐ\%applyNd-dDOd-dI@<@@#@Rd-dBSde @@#@@@ka@lB@@@@zk@@@k@^cd_de @@C}@@@k_@lX@@@lW_@lOH@@ @@͠)W@k@@@k_@kQ@Ρ&directzee{ee @࣠@|GAĠ\Xee(ee*@\W@@@@If@@@l@@@@ภ&Lapplye.e<e.eB@Qz@@@l`@l@OPz@@@l@@@l`@l@Ly@@@l`@l@u+ap_tailcalle.ePe.e[@ఐ(tailcalle.e^e.ef@@@@n@@@l@@l@@@l@@l@@ఐ$taile.ege.ek@@@$[@@@@@@@la@l@{*@@@l`@l@y*@@@l`@l@@ఐ %applye.eEe.eJ@@@$s@e.eCe.em@@$v@@@l`@l@@r@@{@@@l@ ee# e.en@@@I@@@lw@@lvW@lm@@lu^@l@j)tmc_callseeee@ภy%ee&ffA{ຠ3@@@ [@@@3yx@@A@At@q@A@}#loc8ee9ee@ఐQ%applyCeeDee@1@@$<@&ap_locJeeKee@ @@@@@l^@lH@!(explicitXeeYee@ఐ@9explicit_tailcall_requestaeebef@@@@@@l^@l_@@@Ejff@@J9@@@l^@l^@lh@ภyRAy@SA@נ@@@l^@lu@@ee[@@JQ@@@l^@l}@ѡ1benefits_from_dpsff$ff5@ภpgff8ff<@pf@@@JV@@@l^@l@⡠9explicit_tailcall_requestepe|epeAఐ @V@J]@@@m^@m@@@ccf>fI@@% @X@@%!n@@@%"S@m@@%#!@ఠ(_nontailҠfJfRfJfZ@fA@@{@@@ht@@{@@@hw@@@డ:%raisefJf^fJfc@Ͱ@@@@@@m @@m !_@m @@m3@%@@ @@@@ภ&No_tmcfJfdfJfj@@@@@@@m_@m@@!@@%a@@@A^^ @@%c3@@@@ @@%e@Ġ&No_tmcfkftfkfz@@@@@@@@m!@@@@ఠ0apply_no_bailoutf~ff~f@"pA@@%@@@m__@m#3@@@@@ఠ+ap_tailcall#gg$gg@6qA@@@@@m9`@m$@ఐ E%apply7gg8gg@ %@@%354455555@ @@@+ap_tailcall?gg@gg@  @@@@@m' @Ġ4Tailcall_expectationOggPgg@ĠqWggXgg@q@@@@@@@m/E@@@@@ @@@m0I@@ @@@m1L@@ఐ $taillggmgg@ s@@%W@ภ0Default_tailcallughvgh@@@@Q`@ఠ%otherhh hh%@rA@@ A@@@m3O@@ D@@@m4R@@@ఐ%otherhh)hh.@@@@@p3@ n@@@@@Agg@@t@A@gg @@ V|@@@mJ_@mH@ T U|@@@mP@@@mO_@mL@ Q{@@@mT_@mR@ z+ap_tailcallh:hOh:hZAఐ @@@@ @@@mD_@mE3@ @@@ e,@@@mZ_@mX@ c,@@@m^_@m\@@ఐ %applyh:hDh:hI@ Ӱ@@&]@h:hBh:h\@@@P@@@A@f~f@@РVT ^@m@@@m^@m@U&directhhhh@࣠@~AĠ^߰hhhh@^@@@@K@@@m3@  @@@@@@  @@ภ&Lapplyhh hh@"*ఐ0apply_no_bailout)hh*hh@@@&@@@m`@m`@m@@ @@}E@@@m#@8hh9hh@@@L@@@m@@m W@m_@m|@@m^@m3@LL@@@m@@@m^@m@L@@@m^@m@L@@@m^@m@@డL&lambda&Choicenh`hioh`ho@ rh`hpsh`hv@@#@@@#@@@mf@@me)#@@@md@@@mc@@mbp@@ภ&Lapplyh`hxh`h~@"ఐ %applyh`hh`h@ @@'@@h`hwh`h@@#@@@mq`@mv@@h`hhh`h@@)2!b^@m@@@m^@m^@m@h`hfhh@@' @@@'!@@@]]@@'#@]]@@'%3@ @@@ A@@'D@@m'A'?@@m@'<@@m'5@@m@@m@@mW@m @@@]]@''&&@&&@@'@@R''@@R@'@@R@&@@R@&@@R&@@R@@R@@R@@R@@R3@'@@@࣠@#ctxAhhhh@sA@@'93@'@@@@@'7A@hhhh@@'93@''F@@@@@@hh@@A@ఠ#taghhhh@#tA@@'B@@ఠ$flaghhhh@/uA@@'G#@@ఠ%shape(hh)hh@;vA@@'K/@@-hh.hi@@@'a@'\@'V@@n :@@  @@)blockargsAAhiBhi @TwA@@'X3@??@@@@@@K='x@7@82'r@,@-''k@!@"@@@@  @@#locAVhi Whi@ixA@@'`3UTTUUUUU@"'p@@@@@@@@@ఠ'choicesiiijii @|yA@@7I']@n&@@@n9]@n!3onnooooo@''}@@@@@డ$List#mapii#ii'@ ii(ii+@@7@@@@"]@n)@@n,$@@n+@@n*@7y @@@n(@@n'7x/@@@n%@@n$@@n#.@@ఐ(&choiceii-ii3@(Q@@@(@@nF*Q(@@nE@(@@nD(@@nC@@nB@@nAI@@ఐ۠#ctxii4ii7@ʰ@@(V@*fภsii>iiC@s@@@(`@nXc@@ii,iiD@@@(@@nZ(@@nYj@@ఐ)blockargsiiEiiN@@@'w@@h@@}x@A@ii@@డNI:find_nonambiguous_tmc_call&ChoiceiRi\iRib@ iRiciRi}@@@e*;@@@?z@@@?y@@?x*=X;@@@?w@@?v@;@;@@@w*"W@nb@@@ne@@@nd@@nc@@@na@@n`3#""#####@@@@@@@ఐ̠'choices5iRi~6iRi@ @@(@@@no^@nr^@nq@@D @@0#@@@nm@Ġ&ChoiceQiiRii@+No_tmc_callViiWii@@;=_I=@@@?o@=a=`@@@?j@A@@C@A=_@@=\ఠ$argskiilii@~zA@@=q#(`@nw@@@ny3pooppppp@M@@@@@& @@fY@@@nz@@j]@@@n{ @@@డN&lambda&Choiceiiii@ iiii@@%@@@%@@@n@@n+$%@@@n@@@n@@n3@{=6@7@8@@@@ภ%Lprimiiii@~%ภ*Pmakeblockiiii@zఐ#tagiiii@z@@("@ఐ$flagiiii@@@(-@ఐ%shapeiiii@@@(8@@$ii@@~P@@@n_@n?@ఐ~$argsiiii@G@@~\#@@@n_@o_@oR@ఐ#lociiii@@@)]@@Rii@@&@@@n_@nd@@{@@)e@Ġ&Choiceiiij@)Ambiguousijij @@;=@ >>\@@@?q@AB@C@A=@;A>@@>@@@?l>@>>@@=+=@@@?n@@@?m=@=@BA@O@B@@@ @@@JA=ঠ(explicitCijDijA3>$)'@@n @@@3>@@AA>@> A>$@>!ఠ   @a{A@>.@@@n3ONNOOOOO@,@@@(subterms[ij\ij!@3>0A?@@n3@@A3>A:@@@-A><@>9-A>(@>%ఠ2ambiguous_subtermsiij$jij6@||A@@>>+$!`@n@@@n@@@n"@@@wij xij8@@^$4`@n@@@n_@n-@@@o @@qd@@@n2@@uh@@@n6@@@@ఠ+term_choice psppsp@A@@,#@@@o?`@o@@@o[_@o 3@}YV@X@WB;@<@=@@@3$let+pppp@$@,B.$q@@@oB_@oV_@o`@o@@@o`@o@@o@@@@o2_@o@@o@@o,[8@@@o `@o@@o@@o`@o డP/$list&Choicepppp@ pppp@@@B,{A@@@?i@@@?h@@?g,AA@@@?f@@@?e@@?d@B@B@@@B,$W@o#@@@o&@@@o%@@o$,B @@@o"@@@o!@@o 3@r@@@@ఐ'choices pp!pp@@@B9*@@@o2`@o5`@o4@@I @@,u@@@o7`@o/@3 pp@@$args ;pp<pp@NA@@*@@@ภ%LprimE ppF pp@ภ*PmakeblockN ppO pp@|BఐH#tagX ppY pp@@@*3VUUVVVVV@)@ @!@@@ఐJ$flagf ppg pp@@@*@ఐI%shapeq ppr pp@(@@*@@'u pp@@@@@oA`@oK @ఐK$args pp pp@(@@+@ఐ;#loc pp pp@@@*6@@M_@@7@A`@@@A@psp{b@@Р&Choice qq$ qq*@#dps qq+ qq.@@డh$make#Dps qq1 qq4@  qq5 qq9@@ڰ@@@K\@@@on@@@om@@olOb@@@ok@@@oj@@oi3@-A:@;@<@@@@࣠$tailA@ qqE qqF@@T@@@o3@@@@@ qq?@#dstA@ qqL qqM@@TT@@@o@@@o@@ qqG @@@ఠ)arguments  qQqa qQqj@A@@@@@ob@o+@@ఠ$infoqmqqmq@,A@@@Q|!t5&lambda@@@o@@@oc@o@@o@@@@oc@o@@oc@oS@࣠@!tABqmqCqmq@UA@г$&ChoiceQqmqRqmq@+UqmqVqmq@@г./^qmq_qmq@@5@@@o3^]]^^^^^@Ogqmq{hqq@@@  @@@E @@@o @@pqmqqqmq@@@M@@@@ຐ3x@@@ j{@@@@As@p)tmc_callsqqqq@ఐO!tqqqq@li@@@o@@@o@S@T  @@.$u@@@od@o@@@od@o3@Bk@@@)tmc_callsqqqq@ @@@@@o@@@od@o@@@qmqP@г3subterm_informationqmqqmq@@@@@@ @U]A@c@od@A@a@ຠ3@@@ ~@@@3nm@@A@Ad@a@Ar(explicitrrrrAఐ @8@@@@ob@o3@@@@@@)argumentsrr*rr3@డ`$List#maprr6rr:@ rr;rr>@@;@@@@&@@@pb@o@@o@@@ob@pb@pb@o@@o@@o@;@@@o@@o;@@@o@@o@@oC@@ఐ$info0rr?1rrC@M@@@@@@o@@@o@@o @@@o@@o^@@ఐ⠐2ambiguous_subtermsKrrDLrrV@@@<1J@@@oc@pc@ps@@\ @@E@@@oc@oz@@@^qq_rXrg@@W}@@@X}@A@b qQq]@@డ%raiselrwrmrwr@g@@@g@@@p @@p  @@@p=b@p @@p 3vuuvvvvv@|u@v@w@@@@ภ%Errorrwrrwr@;@@@@B@@A@@డ/Scoped_location+to_location)Debuginforwrrwr@ rwrrwr@@rwrrwr@ @ @@@@@@p#@@p"@@@p!@@p =@@ఐo#locrwrrwr@N@@,J@@%@@@@@p@p4c@p.R@ภ?Ambiguous_constructor_argumentsrrrr@;@@@ @A@@A@A@@ ఐߠ)argumentsrrrr@i@@"@@@p:b@p@@@),@@B @An@n3nn2n@@@).@@@)-@@C@An@n3nn;n@@@)0@@@)/@@D@An@n~3n{"nznynx@@@)1@@E!@Anw@nt@An@ná#tagAsysBsysAఐ: @@.w3DCCDDDDD@<@@@/$flagPssQssAఐ= @@.@9%shape^ss_ssAఐ? @@.@C&beforelssmss@డ$List#rev{ss|ss@ ssss@@@Z!a@@@@@@c @@@~@@}@*e+e@@)M@@@@)M`@p@@@p@@p@@@p@@p_@@ఐ*rev_beforessss@@@2@@@pa@pa@pt@@C @@o')i@@@pa@p{@%after ss ssAఐ  @@o))y@@@p`@p@#loc!ss!ssAఐ @p@.@@@s[sw"st@@@@@@A@s[sc@@  డa"<>#t t+#t t-@B!@@@TРT@@@p@@@p_@p@@p@ @@pB\@@@p@@p@@p3        @*#@$@%@@@@ఐi&choice#t t #t t @'@@1)`@p@@@p`@p@)tmc_calls.#t t!/#t t*@ @@/!@@ภb'9#t t.:#t t0@@@@<_@p.@@?#t t@#t t1@@y|@@@p`@p6@G#t t@@4@@@p_@p=@Р #dpsV2vvW2vv@డmH1delay_constructor#Dpse2vvf2vv@ i2vvj2vv@@@XX@@@4@@4@TX@@@4@@@4@@4TX@@@4@@@4@@4@@4@X@X% @@@@@@q@@q@T/@@@q@@@p@@pT6@@@p@@@p@@p@@p3@@@@@ఐ &constr2vv2vv@@@D@@@q_@q_@q@@ఐ&choice2vv2vv@̰@@2R*p_@q@@@q_@q,@#dps2vv2vv@9@@Tt*{@@@q_@q_@q;@@z @@@W@p@@@p_@qD@A&Choice%t=tG%t=tM@&direct%t=tN%t=tT@@࣠@AĠhӰ%t=t\%t=t^@h@@@@U@@@q4e@@@@డ}#not&tbtq&tbtt@@հ@@@B@@@q:@@q9@@@@q8@@q7@@ఐx&choice.&tbtu/&tbt{@6@@2*a@qH@@@qGa@qE)@1benefits_from_dps=&tbt|>&tbt@@@B@@@qCa@qIa@qF7@@3 @@z@@@qJa@qA=@డ%apply&ConstrZ'tt['tt@ ^'tt_'tt@@k@@@l@@@qR@@qQ@k@@@qP@@qOk@@@qN@@qM@@qLc@@ఐ&constr}'tt~'tt@m@@l@@@qba@qda@qcw@@డV&direct&Choice'tt'tt@ 'tt'tt@@@3,R@@@?H@@?GR@@?F@R@R @@@35+Ma@qg@@@qi@@qh@@qf@@ఐ&choice'tt'tt@ð@@3K@@@qpb@qrb@qq@@'tt'tt@@@@p@@a@q^@డ#0with_placeholder&Constr)tt)tt@ )tt)tu@@aڰ@@@mZ@@@q@@q@@p֠p@@@q@@@q@@qa@@@q@@q@@qa@@@q@@q@@q@@ఐ&constr )tu )tu @@@m@@@qc@qc@q@@9 @@@@qp@@@q@@@q@@qb@@@q@@q@@qb@@@q@@q@@࣠@'new_dstA8)tu9)tu@KA@@qq@@@q@@@q@@  @@ภ)LsequenceK*uu*L*uu3@aడW#dps&Choice[*uu4\*uu:@ _*uu;`*uu>@@@33@@@?T@@@?S@@?RR[@@@?Q@@?PR[[ @@@?O@@@?N@@?MZ@@@?L@@?K@@?J@@?I@R@Rް*%@@@44@@@q@@@q@@qR[3@@@q@@qR[0[/@@@q@@@q@@q"@@@q@@q@@q@@q3@vqq@@@q@@@q@t@u@@@@ఐ&choice*uu?*uuE@@@4I,Y@@@qc@qc@q@Sภ}*uuL*uuQ@}@@@[p@@@qc@r/@S ఐ'new_dst*uuW*uu^@9@@[z[y@@@q@@@qc@rc@rG@@@@@@@q@rc@qO@ภ$Lvar+u`ux+u`u|@ఐҠ'new_dst+u`u}+u`u@b@@8q@@@rb@r@@@rb@rp@#var+u`u+u`u@H@@@@@r b@rb@r~@@) @@7@@@qb@r @@*+u`u@@<@@@q@/)tu @@@rr@@@q@@@q@@qc@@@q@@qa@ra@r@@g@@-a@q@F&tbtn@@}@H%t=tWI+u`u@@@X,@@@q,@@q+=W@q"@@q*^@r!@)tmc_calls[3vv\3vw@ఐ&choicef4w wg4w w@n@@4-^@r5@@@r4^@r1a@)tmc_callsu4w wv4w w&@Ȱ@@XHXG@@@r/@@@r.^@r2q@ˡ1benefits_from_dps,uu,uu@ภ~M1vv1vv@~M@@@XP@@@r=^@rA@ܡ9explicit_tailcall_request5w(w25w(wK@ఐ&choice6wNwZ6wNw`@@@55-G^@rL@@@rK^@rI@9explicit_tailcall_request6wNwa6wNwz@@@Xl@@@rG^@rJ@@@$t3t;7w|w@@2@{@@2@@@2@@@AiRiV@@23@ @@@ @@2 S@ A@@3@@r33@@r@3 @@r@2@@r@2@@r2@@r@@r@@r@@r@@rW@r @@@hh @2ݠ2ݰ22@22@@2@@R22@@R@2@@R@2@@R@2@@R2@@R@@R@@R@@R@@R3@3@@@࣠@#ctxA9ww9ww@A@@23@3@@@@@22A29ww9ww@'A@@23@33 @@@@@@9ww@@$primA&9ww'9ww@9A@@3 3%$$%%%%%@3@@@@@@@@(primargsA79ww89ww@JA@@3365566666@3@@@@@@@@#locAH9wwI9ww@[A@@33GFFGGGGG@3$@@@@@@@@ఐ7$primZ:ww[:ww@@@3=3XWWXXXXX@3.@@@@@Ġ*Pmakeblockj<xxk<xx@^ఠ#tags<xxt<xx@A@@f@@@s;3uttuuuuu@@@@ఠ$flag<xx<xx@A@@n@@@s<@ఠ%shape<xx<xx#@A@@s@@@s=@@@.<xx$@@3y@@3y@@@ఐ30choice_makeblock=x(x0=x(x@@3@@@3@@tT33@@tS@3@@tR@3@@tQ@3@@tP3@@tO@@tN@@tM@@tL@@tK3@_NG@H@I@9@:@;3,@-@.@@@@ఐǠ#ctx=x(xA=x(xD@@@3@4ఐŠ$tail=x(xF=x(xJ@@@3!@@@ఐu#tag=x(xL=x(xO@-@@4_@tr4@@ఐt$flag=x(xQ=x(xU@:@@4 _@tsB@@ఐt%shape=x(xW=x(x\@G@@4&_@ttP@@ =x(xK =x(x]@@4@W@tuU@@ఐ䠐(primargs=x(x^=x(xf@̰@@3b@@ఐࠐ#loc%=x(xg&=x(xj@Ȱ@@3o@@@@3p@Ġ'Popaque3@xx4@xx@;'Popaque@@@lo~@A@@@@@@  @@4387788888@@@@@4@@@@ఠ"l1 HAxxIAxx@[A@@/W_@tz@ఐ#(primargsWAxxXAxx@ @@4/3UTTUUUUU@@@@ĠAidBxxeBxxA$ఠ"l1! mBxx@A @@/{W@t}@ĠAe A@@ A@ՠ @@@t#@@@~Bxx@@4T%@@4T%@@@ఐ"l1BxxBxx@@@@@>3@.#@@@@CxyCxy@@4i:@@4i:@@@డ+invalid_argCxyCxy@@9<@@@@@!a@@@@{f{f:@@{B@@@@@@@t@@t/b@t@@t`@@+choice_primCxyCxy@@CxyCxy@@'@@@tb@tb@tt@@2 @@u@@@AAxx @@W@A@Axx @@?$let+Dy"y*Dy"y.@/@7m/y_@t@@@t_@t@@t@@/W@t@@t/W@t^@t@@t@@t7 _@t@@@t_@t@@t@@t_@tఐ5預&choiceDy"y4Dy"y:@5@@@5@@t75@@t@5@@t5@@t@@t@@t3@@@@@@@ఐ#ctx"Dy"y;#Dy"y>@ @@5@7ఐ$tail/Dy"y@0Dy"yD@@@5@@ఐ"l1<Dy"yE=Dy"yG@'@@*@@:@@6+@gAEyKym@@"l1"IDy"y/JDy"y1@\A@@\8@@@ภ%LprimSEyKySTEyKyX@ʠภ'Popaque\EyKyZ]EyKya@)@@@@@@t_@t3_^^_____@P$v@@@@@ภcmEyKydnEyKygA-ఐ1"l1 wEyKyf@ @@@ภ A @ A@ޠ0@@@t_@t"@@EyKyc@@0@@@t_@t*@ఐQ#locEyKyiEyKyl@9@@5g5@@GY@@6@AZ@@5W@t3@@@@^@@5h%@Ġ0Pbytes_to_string{Hyy|Hyy@;0Pbytes_to_string@@@@o~@Aww@@@`@@@  @@6e(@@6e(@Ġ0Pbytes_of_stringHyyHyy@;0Pbytes_of_string@@@Ao~@A)x*x@@@a@@@  @@6w:@@6w:@@ @@6x;@Ġ*PgetglobalIyyIyy@;*Pgetglobal@'!t@@@ @A@o~@AC{D{@@@c@@IyyIyy@@@@@sC[@@@@@6\@@6\@@?@@6]@Ġ*PsetglobalIyyIyy@;*Psetglobal@I!t@@@ @AAo~@Ae|f|@@@d@@IyyIyy@@@@@sF}@@@@@6~@@6~@@a@@6@Ġ&PfieldJyyJyy@;&Pfield4@@@@ 6@@@ ,mutable_flag@@@ @CDo~@A@@@@@Ig@@JyyJyy@@@@@sK@@@N@@@sL@@ @@@@sM@@@+@@6@@6@@@@6@Ġ/Pfield_computedJyyJyz@;/Pfield_computedh@@@Co~@AAA@@@nh@@@  @@7@@7@@ @@7@Ġ)Psetfield+Kzz ,Kzz@;)Psetfield{@@@@ }@@@ {@@@ @CEo~@ABB @@@i@@DKzzEKzz@@@@@sS@@@@@@sT@@ @@@@sU@@@)@@74@@74@@@@75@Ġ2Psetfield_computed]Kzz^Kzz+@@bKzz,cKzz-@@@@@sY @@@@@@sZ@@@ @@7M@@7M@@ @@7N@Ġ+PfloatfieldvLz.z4wLz.z?@;+Pfloatfield@j@@@ @AGo~@AD e gD e {@@@k@@Lz.z@Lz.zA@@@@@s]/@@@@@7m0@@7m0@@@@7n1@Ġ.PsetfloatfieldLz.zDLz.zR@;.Psetfloatfield@@@@ @@@ @BHo~@A;E | ~<E | @@@l@@Lz.zSLz.zT@@@@@saS@@@@@@sbX@@@  @@7Y@@7Y@@< @@7Z@Ġ&PccallMzUz[MzUza@;&Pccall@)Primitive+description@@@ @AJo~@AdM N PeM N q@@@s@@MzUzbMzUzc@@@@@se|@@@@@7}@@7}@@`@@7~@Ġ&PraiseNzdzjNzdzp@;&Praise3@:*raise_kind@@@ @AKo~@AO  O  @@@?t@@NzdzqNzdzr@@@@@sh@@@@@7@@7@@@@7@Ġ$PnotOzszyOzsz}@;$PnotT@@@Jo~@AQ  Q  @@@Zw@@@  @@7@@7@@ @@7@Ġ'PnegintPz~zPz~z@;'Pnegintg@@@Ko~@AS  S  @@@mx@@@  @@8@@8@@ @@8@Ġ'Paddint*Pz~z+Pz~z@;'Paddintz@@@Lo~@AS  S  @@@y@@@  @@8@@8@@ @@8@Ġ'Psubint=Pz~z>Pz~z@;'Psubint@@@Mo~@AS  S  @@@z@@@  @@8'@@8'@@ @@8(@Ġ'PmulintPPz~zQPz~z@;'Pmulint@@@No~@AS  S  @@@{@@@  @@8:@@8:@@ @@8;@Ġ'PdivintcPz~zdPz~z@;'Pdivint@'is_safe@@@ @ALo~@AT  T  2@@@|@@uPz~zvPz~z@@@@@sp@@@@@8[@@8[@@@@8\@Ġ'PmodintPz~zPz~z@;'Pmodint@!@@@ @AMo~@A$T  3%T  G@@@}@@Pz~zPz~z@@.@@@ss<@@@@@8z=@@8z=@@ @@8{>@Ġ'PandintQzzQzz@;'Pandint@@@Oo~@A?U H J@U H S@@@~@@@  @@8P@@8P@@3 @@8Q@Ġ&PorintQzzQzz@;&Porint@@@Po~@ARU H TSU H \@@@ @@@  @@8c@@8c@@F @@8d@Ġ'PxorintQzzQzz@;'Pxorint@@@Qo~@AeU H ]fU H f@@@@@@@  @@8v@@8v@@Y @@8w@Ġ'PlslintRzzRzz@;'Plslint,@@@Ro~@AxV g iyV g r@@@2A@@@  @@8@@8@@l @@8@Ġ'PlsrintRzzRzz@;'Plsrint?@@@So~@AV g sV g |@@@EB@@@  @@8@@8@@ @@8@Ġ'PasrintRzzRz{@;'PasrintR@@@To~@AV g }V g @@@XC@@@  @@8@@8@@ @@8@Ġ(PintcompS{{ S{{@;(Pintcompe@l2integer_comparison@@@ @ANo~@AW  W  @@@qD@@'S{{(S{{@@@@@s|@@@@@9 @@9 @@@@9@Ġ*Poffsetint6T{{7T{{&@;*Poffsetint@*@@@ @APo~@AZ 7 9Z 7 L@@@H@@GT{{'HT{{(@@@@@s@@@@@9-@@9-@@@@9.@Ġ*PoffsetrefVT{{+WT{{5@;*Poffsetref@J@@@ @AQo~@A[ M O[ M b@@@I@@gT{{6hT{{7@@@@@s@@@@@9M@@9M@@@@9N@Ġ+PintoffloatvU{8{>wU{8{I@;+Pintoffloat@@@Wo~@A] | ~] | @@@J@@@  @@9`#@@9`#@@ @@9a$@Ġ+PfloatofintU{8{LU{8{W@;+Pfloatofint@@@Xo~@A%] | &] | @@@K@@@  @@9s6@@9s6@@ @@9t7@Ġ)PnegfloatV{X{^V{X{g@;)Pnegfloat@@@Yo~@A8^  9^  @@@L@@@  @@9I@@9I@@, @@9J@Ġ)PabsfloatV{X{jV{X{s@;)Pabsfloat@@@Zo~@AK^  L^  @@@M@@@  @@9\@@9\@@? @@9]@Ġ)PaddfloatW{t{zW{t{@;)Paddfloat@@@[o~@A^_  __  @@@N@@@  @@9o@@9o@@R @@9p@Ġ)PsubfloatW{t{W{t{@;)Psubfloat%@@@\o~@Aq_  r_  @@@+O@@@  @@9@@9@@e @@9@Ġ)PmulfloatW{t{W{t{@;)Pmulfloat8@@@]o~@A_  _  @@@>P@@@  @@9@@9@@x @@9@Ġ)PdivfloatW{t{W{t{@;)PdivfloatK@@@^o~@A_  _  @@@QQ@@@  @@9@@9@@ @@9@Ġ*PfloatcompX{{X{{@;*Pfloatcomp^@e0float_comparison@@@ @ARo~@A`  `  @@@jR@@ X{{!X{{@@@@@s@@@@@:@@:@@@@:@Ġ-Pstringlength/Y{{0Y{{@;-Pstringlength@@@_o~@Ab # %b # 4@@@S@@@  @@:@@:@@ @@:@Ġ+PstringrefuBY{{CY{{@;+Pstringrefu@@@`o~@Ab # 5b # B@@@T@@@  @@:,@@:,@@ @@:-@Ġ+PstringrefsUY{{VY{{@;+Pstringrefs@@@ao~@Ab # Db # Q@@@U@@@  @@:?@@:?@@ @@:@@Ġ,PbyteslengthhZ{{iZ{{@;,Pbyteslength@@@bo~@Ac R Tc R b@@@V@@@  @@:R@@:R@@ @@:S@Ġ*Pbytesrefu{Z{||Z{| @;*Pbytesrefu@@@co~@Ac R cc R o@@@W@@@  @@:e(@@:e(@@  @@:f)@Ġ*PbytessetuZ{|Z{|@;*Pbytessetu@@@do~@A*c R p+c R |@@@X@@@  @@:x;@@:x;@@ @@:y<@Ġ*PbytesrefsZ{|Z{|%@;*Pbytesrefs@@@eo~@A=c R }>c R @@@Y@@@  @@:N@@:N@@1 @@:O@Ġ*PbytessetsZ{|(Z{|2@;*Pbytessets@@@fo~@APc R Qc R @@@ Z@@@  @@:a@@:a@@D @@:b@Ġ,Parraylength[|3|9[|3|E@;,Parraylength@*array_kind@@@ @AUo~@Aijjj@@@#]@@[|3|F[|3|G@@@@@s@@@@@:@@:@@e@@:@Ġ*Parrayrefu[|3|J[|3|T@;*Parrayrefu8@!@@@ @AVo~@Akk@@@B^@@[|3|U[|3|V@@.@@@s@@@@@:@@:@@@@:@Ġ*Parraysetu[|3|Y[|3|c@;*ParraysetuW@@@@@ @AWo~@All@@@a_@@[|3|d[|3|e@@M@@@s@@@@@:@@:@@@@:@Ġ*Parrayrefs&[|3|h'[|3|r@;*Parrayrefsv@_@@@ @AXo~@Amm7@@@`@@6[|3|s7[|3|t@@l@@@s@@@@@;@@;@@@@;@Ġ*ParraysetsE[|3|wF[|3|@;*Parraysets@~@@@ @AYo~@An8:n8T@@@a@@U[|3|V[|3|@@@@@s@@@@@;;@@;;@@@@;<@Ġ&Pisintd\||e\||@;&Pisint@@@go~@App@@@b@@@  @@;N@@;N@@ @@;O@Ġ&Pisoutw\||x\||@;&Pisout@@@ho~@Arr@@@c@@@  @@;a$@@;a$@@ @@;b%@Ġ'Pignore]||]||@;'Pignore@@@Bo~@A&y'y@@@b@@@  @@;t7@@;t7@@ @@;u8@Ġ-Pcompare_ints^||^||@;-Pcompare_ints@@@Uo~@A9Y  :Y  @@@E@@@  @@;J@@;J@@- @@;K@Ġ/Pcompare_floats^||^||@;/Pcompare_floats@@@Vo~@ALY  MY  @@@F@@@  @@;]@@;]@@@ @@;^@Ġ.Pcompare_bints^||^||@;.Pcompare_bints@-boxed_integer@@@ @AOo~@AeY  fY  6@@@G@@^||^||@@@@@s}@@@@@;~@@;~@@a@@;@Ġ)Prunstacka}}a}}$@;)Prunstack4@@@Do~@AH  H  @@@:o@@@  @@;@@;@@t @@;@Ġ(Pperforma}}'a}}/@;(PperformG@@@Eo~@AI  I  @@@Mp@@@  @@;@@;@@ @@;@Ġ'Presume a}}2 a}}9@;'PresumeZ@@@Fo~@AJ  J  (@@@`q@@@  @@;@@;@@ @@;@Ġ*Preperforma}}<a}}F@;*Preperformm@@@Go~@AK ) +K ) 7@@@sr@@@  @@<@@<@@ @@<@Ġ(Pdls_get0a}}I1a}}Q@;(Pdls_get@@@mo~@A " ,@@@@@@  @@<@@<@@ @@<@Ġ,Patomic_loadCd}}Dd}}@;,Patomic_load@@@ko~@A@@@@@@  @@<-@@<-@@ @@<.@Ġ*PmakearrayXg}}Yg}}@;*Pmakearray@@@@ I,mutable_flag@@@ @BSo~@Ae  e  @@@[@@ng}}og}}@@@@@s @@@@@@s @@@! @@  @@>  @@@@> @Ġ(Pandbint6r067r0>@;(Pandbint@s@@@ @Aco~@A}}@@@q@@Fr0?Gr0@@@@@@s @@@@@>, @@>, @@@@>- @Ġ'PorbintUr0CVr0J@;'Porbint@@@@ @Ado~@A~~@@@r@@er0Kfr0L@@@@@s @@@@@>K @@>K @@@@>L @Ġ(Pxorbinttr0Our0W@;(Pxorbint@@@@ @Aeo~@A@@@s@@r0Xr0Y@@@@@s ,@@@@@>j -@@>j -@@@@>k .@Ġ(Plslbintr0\r0d@;(Plslbint@@@@ @Afo~@A34@@@t@@r0er0f@@@@@s K@@@@@> L@@> L@@/@@> M@Ġ(Plsrbintr0ir0q@;(Plsrbint@@@@ @Ago~@AR S;@@@ u@@r0rr0s@@@@@s j@@@@@> k@@> k@@N@@> l@Ġ(Pasrbintr0vr0~@;(Pasrbint!@@@@ @Aho~@Aq<>r<Y@@@+v@@r0r0@@@@@s @@@@@> @@> @@m@@> @Ġ)Pbintcompss@;)Pbintcomp@@-@@@ @@@ @Bio~@AZ\Z@@@Nw@@ss@@>@@@s @@@@@@s @@@ @@> @@> @@ @@> @Ġ.Pmakelazyblockzz@;.Pmakelazyblockh@o.lazy_block_tag@@@ @ACo~@A[][@@@tf@@*z+z@@@@@s @@@@@? @@? @@@@? @Ġ,Pbigarrayref9}7=:}7I@;,Pbigarrayref@F@@@ 2@@@ -bigarray_kind@@@ /bigarray_layout@@@ !@Djo~@A@@@x@@[}7J\}7K@@@@@s @@@@@@s @@ @@@@t @@@@@@t @@@7@@?P @@?P @@@@?Q @Ġ,Pbigarraysety}7Nz}7Z@;,Pbigarrayset@FO@@@ "r@@@ #@@@@ $>@@@ %@Dko~@A'(T@@@y@@}7[}7\@@@@@t ?@@@@@@t D@@ @[@@@t  I@@@Z@@@t  N@@@3@@? O@@? O@@ 2@@? P@Ġ,Pbigarraydim~]c~]o@;,Pbigarraydim@@@@ &@Alo~@AVW@@@z@@~]p~]q@@@@@t  n@@@@@? o@@? o@@ R@@? p@Ġ/Pstring_load_16rxr@;/Pstring_load_16%@F@@@ '@Amo~@Avw@@@0{@@rr@@@@@t @@@@@? @@? @@ r@@? @Ġ/Pstring_load_32rr@;/Pstring_load_32E@F@@@ (@Ano~@A @@@P|@@rr@@@@@t @@@@@? @@? @@ @@? @Ġ/Pstring_load_64rr@;/Pstring_load_64e@F@@@ )@Aoo~@A   &@@@p}@@&r'r@@@@@t @@@@@@  @@@  @@ @@@  @Ġ.Pbytes_load_1656@;.Pbytes_load_16@G @@@ *@Apo~@A')'A@@@~@@FG@@@@@t @@@@@@, @@@, @@ @@@- @Ġ.Pbytes_load_32UV@;.Pbytes_load_32@G+@@@ +@Aqo~@ABDB\@@@@@fg@@@@@t @@@@@@L @@@L @@ @@@M @Ġ.Pbytes_load_64uv@;.Pbytes_load_64@GK@@@ ,@Aro~@A]_]w@@@@@@@@@@t .@@@@@@l /@@@l /@@ @@@m 0@Ġ-Pbytes_set_16@;-Pbytes_set_16@Gk@@@ -@Aso~@A6xz7x@@@@@@@@@@t" N@@@@@@ O@@@ O@@ 2@@@ P@Ġ-Pbytes_set_32@;-Pbytes_set_32@G@@@ .@Ato~@AVW@@@@@@@@@@t% n@@@@@@ o@@@ o@@ R@@@ p@Ġ-Pbytes_set_64&@;-Pbytes_set_64%@G@@@ /@Auo~@Avw@@@0@@'(@@@@@t( @@@@@@ @@@ @@ r@@@ @Ġ2Pbigstring_load_16)/)A@;2Pbigstring_load_16E@G@@@ 0@Avo~@A242P@@@P@@)B)C@@@@@t+ @@@@@@ @@@ @@ @@@ @Ġ2Pbigstring_load_32)F)X@;2Pbigstring_load_32e@G@@@ 1@Awo~@AQSQo@@@p@@&)Y')Z@@@@@t. @@@@@A  @@A  @@ @@A  @Ġ2Pbigstring_load_645)]6)o@;2Pbigstring_load_64@H @@@ 2@Axo~@Aprp@@@@@F)pG)q@@@@@t1 @@@@@A, @@A, @@ @@A- @Ġ1Pbigstring_set_16UrxVr@;1Pbigstring_set_16@H+@@@ 3@Ayo~@A@@@@@frgr@@@@@t4@@@@@AL@@AL@@ @@AM@Ġ1Pbigstring_set_32urvr@;1Pbigstring_set_32@HK@@@ 4@Azo~@A@@@@@rr@@@@@t7.@@@@@Al/@@Al/@@ @@Am0@Ġ1Pbigstring_set_64rr@;1Pbigstring_set_64@Hk@@@ 5@A{o~@A67@@@@@rr@@@@@t:N@@@@@AO@@AO@@ 2@@AP@Ġ(Pctconst@;(Pctconst@ 5compile_time_constant@@@ 6@A|o~@AW X-@@@@@@@@@@t=o@@@@@Ap@@Ap@@ S@@Aq@Ġ(Pbswap16@;(Pbswap16&@@@io~@Ar@Bs@L@@@,@@@  @@A@@A@@ f @@A@Ġ'Pbbswap@;'Pbbswap9@&@@@ 7@A}o~@AMOMi@@@C@@@@3@@@tA@@@@@A@@A@@ @@A@Ġ/Pint_as_pointer @;/Pint_as_pointerX@@@jo~@A@@@^@@@  @@A@@A@@  @@A@Ġ(Psequand @;(Psequandk@@@Ho~@AQ  Q  @@@qu@@@  @@B@@B@@  @@B@Ġ'Psequor./@;'Psequor~@@@Io~@AQ  Q  @@@v@@@  @@B@@B@@  @@B@Ġ%PpollAB"@;%Ppoll@@@no~@A@@@@@@  @@B+@@B+@@  @@B,@@@@ఠ(primargs#V,8W,@@iA@@,_@t@ఐC-traverse_listd,Ce,P@C@@@C@@t@C@@tCy@@t@@t2@@ఐv#ctxy,Qz,T@a@@Bl?@@ఐR(primargs,U,]@:@@B^L@@&@@CM@A@,4@@డh&lambda&Choiceaiao@ apav@@?@@@?@@@u@@tE1?@@@t@@@t@@t3@S_X@Y@Z@@@@ภ%Lprimaxa}@2ఐ$primaa@@@B@ఐz(primargsaa@!@@y$@ఐ#locaa@~@@B/@@awa@@?@@@u _@u7@@N@@CKW@u:@_ @@B@@@A:ww @@B3@@@@A@@B@@ueBB@@ud@B@@uc@B@@ub@B@@uaB@@u`@@u_@@u^@@u]@@u\W@uR@@@9ww&@BΠBΰBB@BB@@B@@RBB@@R@B@@RB@@R@@R@@R3@C@@@࣠@#ctx$A$%@7A@@B3#""#####@C@@@@@BB%AB23@EA@@B310011111@CB@@@@@@:@@%terms&ADE@WA@@B3CBBCCCCC@B@@@@@@@@డi$list&ChoiceZ[@ ^_@@w@@@[xE=W@u@@@u@@@u@@uE[p @@@u@@@u@@u3rqqrrrrr@0<C%@3@4@@@@డ$List#map@ @@S@@@@C@@@uC[@u@@u@@u@SCI@@@u@@uS~ @@@u@@u@@u1@@ఐD&choice@DW@@@D@@uFWD@@u@D@@uD@@u@@u@@uL@@ఐ#ctx@@@CY@Flఐ$tail@@@Cf@@@@@D@@uD@@um@@ఐ%terms@w@@Cz@@@@\ DY@@@u[@u\@u@@ @@CW@u@ A@@C@@uCC@@u@C@@uC@@u@@u@@uW@u@@@@CCCjCi@ChCk@@C@@RCC@@R@C@@RC@@R@@R@@R3@D@@@࣠@#ctx'A./@AA@@C3-,,-----@D@@@@@CC(AC<= @OA@@C3;::;;;;;@DC@@@@@@D@@+A@ఠ"t1)S T @fA@@CW@u3SRRSSSSS@$C@@@@@@ఠ"t2*cd@vA@@CW@v@@i j@@@@ @@v@@ @@డj$pair&Choice@  $@@@@Gd@@@?Z@Gd@@@?[@@?Y@@?XG#@d@d@@?W@@@?V@@?U@d@dǰ% @@@@G6DHW@v @@@v@G>DLW@v @@@v@@v@@v GC@@ @@v @@@v @@v3@nxq@r@sib@c@d@@@@@ఐE&choice&,@E|@@@E@@v,G|E@@v+@E@@v*E@@v)@@v(@@v'$@@ఐǠ#ctx-0@@@Dw1@GఐŠ$tail26@@@D{>@@ఐ"t1 7 9@G@@K@@7@@EL@@ఐE&choice;A@E@@@E@@vCGE@@vB@E@@vAE@@v@@@v?@@v>f@@ఐ #ctx4B5E@@@Ds@GӐఐ$tailAGBK@@@D@@ఐ렐"t2NLON@@@@@7@@F@@S%TO@@@E@E@@v[@vT@@ @@DW@v@3 A@@D@@voDD@@vn@D@@vmD@@vl@@vk@@vjW@vd=@@@p@DƠDưDD@DD@@D@@RDD@@R@D@@RD@@R@@R@@R3~}}~~~~~@F>@@@࣠@#ctx,APdPg@A@@D3@F<@@@@@DڠD-ADްPiPm@A@@D3@FKD@@@@@@Ph@@!t.APnPo@A@@D3@D@@@@@@@@డl&option&Choicervr|@ r}r@@@_H]_@@@?c@@@?b@@?aHb__@@@?`@@@?_@@?^@_@_԰@@@_ϠHrF@@@v@@@v@@vHw_ĠF@@@v@@@v@@v3@DPE1@G@H@@@@డn&Option#map r r@  rr@@@@!a@w@@wi!b@w@@wh@@wg@E[@@@wf@@weE_@@@wd@@wc@@wb@*option.mlioo@@.Stdlib__OptionI@,'@@@@Em@@wF[@w@@w@@w@EyEv@@@w@@w @@@w@@w@@wU@@ఐG:&choiceWrXr@F@@@G9@@wHG4@@w@G/@@wG,@@w@@w@@wp@@ఐ䠐#ctxprqr@ϰ@@E}@Iఐ⠐$tail}r~r@ʰ@@E@@rr@@@GP@@x GM@@x@@ఐ堐!trr@@@E@@rr@@`Gb@@@v[@x \@w@@ @@EW@v@ A@@E@@x)EE@@x(@E@@x'E@@x&@@x%@@x$W@x@@@PR@@ఐG&choice@G_@@@G@@x3I_@@@x2@@x1@G@@x0IW@@@x/@@@x.@@x-@@x,@@x+3@G~@@@@ఐIT#ctx@GҰ@@I@I@@ఐG預!t@G@@I@@8@@I@+?@@IG@IgA@@I@@xZ@I@@xYI@@xX@@xWT@xSIm@@@=O#O#@I\I\IGIF@IEIH@@IY@@Q@IV@@QIU@@Q@@Q3        @I@@@࣠@#ctxEA@/A@@Im3@I@@@@@@Ġ$Llet+,@ఠ"lkF45@GA@@@@@xk365566666@I(I@@ @@@ఠ"vkGEF@XA@@@@@xl@ఠ#varHST@fA@@@@@xm@ఠ#defIab@tA@@v@@@xn-@ఠ$bodyJop@A@@@@@xo;@@@Lw@@I=@@@@@ఠ#ctxN@A@@HeX@x3@Vb[@\@]RK@L@ME>@?@@81@2@3+$@%@&@@@@ఠ(bindingsO @A@@>7X@x@@@@@@@@x@ఐI̠,traverse_let!@Iа@@@I@@x@I@@x@I@@x@I@I@@x@@x@@x@@x=@@ఐ#ctx"%@@@J#J@@ఐ#var&)@N@@>7Y@xY@@ఐ#def*-@\@@>8Y@xh@@A@@@q@Z@@xY@xq@A@@@@ఠ$bodyP 1; 1?@A@@EuX@x3      @@@wp@q@r@@@ఐJn(traverse1B1J@Jr@@@Jp@@x@Jm@@xJl@@x@@x@@ఐ#ctx11K21N@"@@&@@ఐϠ$body>1O?1S@@@I Y@x5@@(@@J6@A@E17@@ఐQn%lletsOW]PWb@OͰ@@@@@@x@@x@@@@x@@x@'@@@@x@@@@x@@x@@@x@@x@@@@x@@x@@x@@x@@x@@x3vuuvvvvv@nxq@r@s@@@@ఐT"lkWcWe@@@@@@xX@xX@x@@ఐW"vkWfWh@ @@@@@xX@xX@x+@@ఐ(bindingsWiWq@@@8@@ఐ$bodyWrWv@B@@E@@r@@F%F@}@@F&@@@K7@Ġ'Lletrecw{w@=ఠ(bindingsKww@A@@JJ@@@xu@@@xt3@@@@ఠ$bodyLww@A@@@@@xv@@@$w@@K6@@@@@ఠ#ctxQ@A@@IX@x3@70@1@2%@@ @@@@ఠ(bindingsR@$A@@=X@x@@@@@@@@x@ఐJ/traverse_letrec&'@K@@@J@@x@J@@x@J젠@J@@x@@x@@x3@@ఐ(#ctxAB@@@K@@@ఐz(bindingsNO@I@@=T@yO@@.@@@X@G@@yY@yX@A@]@@ภ'Lletrecde@>ఐ](bindingsno@\@]@^@@]3mllmmmmm@p{t@u@vi@@@ఐKҠ(traverse@Kְ@@@K@@y@K@@yK@@y@@y@@ఐ#ctx@"@@&@@ఐ$body@@@JnX@y#5@@(@@K6@@E@@@@@y;@Q@@K@ఠ#lamM@A@@L3@@@@@@డ+shallow_map@@@@@@ @@ @@@ @@ @@ @@@@ @@ @@@ @@ @@ @v@(@(w@(@a@@0a@ @@@@@@@y/@@y.@@@y-@@y,@@y+@@@@y*@@y) @@@y(@@y'@@y&3@LLE@F@G@@@@ఐL](traverse  #@La@@@L_@@yK@L\@@yJL[@@yI@@yH@@ఐ#ctx $!'@@@Lp'@@$%(@@@Lp@@yWLo@@yV.@@ఐ~#lam4)5,@8@@L};@@t@@L}<@@A9@@@A@@L@@yw@L@@yvL@@yu@@ytT@yp%@@@F@LLLlLk@LjLm@@L@@Q@L@@QLz@@Q@@Q3POOPPPPP@L@@@࣠@#ctxSAa.Eb.H@tA@@L3`__`````@L@@@@@@$lfunTAp.Iq.M@A@@L3onnooooo@LL@@@@@@@@డ-map_lfunctionPRP_@@@@@@ @@ @@@ @@ @@ @R@@@ @@ R@@@ @@ @@ @4??5??@@`@ @@@@@@@y@@y@@@y@@y@@y@R8@@@y@@yR;@@@y@@y@@y3@GSL@J@K@@@@ఐM(traversePaPi@M@@@M@@y@M@@yM@@y@@y@@ఐ#ctxPjPm@j@@M'@@P`Pn@@@M.@@yM-@@y.@@ఐ$lfunPoPs@8@@M;@@t@@MT@}T@y?@A@@M3@@y@M.@@yM)@@y@@yT@y@@@..@M&M&LL@LL@@M#@@Q@M@@Q@M@@Q@M @M @@Q@@Q@@Q@@Q3@M@@@࣠@)outer_ctxUA*u+u@=A@@MA3)(()))))@M@@@@@@#varVA9u:u@LA@@MG387788888@MMS@@@@@@@@#defWAJuKu@]A@@MM3IHHIIIII@M[@@@@@@@@@ఠ)inner_ctxX]^@pA@@MtX@y3^]]^^^^^@"Me@@@@@ఐQ/declare_bindingop@M@@@Q@@@y@@y@@Q@@@y@@@@y@@y@@y@@y@@y&@@ఐl)outer_ctx@V@@M3@@@ఐn#var@V@@MD@@ఐi#def@M@@MP@@@@@Q@@@y@M@@yY@z^@@S @@M_@A@@@@ఠ(bindingsY@A@@MXT@z3@q|u@v@w@@@ఐM4traverse_let_binding@M@@@M@@z@M@@z@M}@@z@My@@zMx@@z@@z@@z@@z@@ఐՠ)outer_ctx@@@N,@@ఐ)inner_ctx  @6@@9@@ఐࠐ#var@Ȱ@@N#F@@ఐܠ#def#$@@@N%S@@H@@MT@A@(@@@ఐנ)inner_ctx4!5*@a@@321122222@eoh@i@j@@@@ఐu(bindingsC,D4@ @@t@@@@@ꠠ@{@@z6@& @@{@ @@@& A@@Ni@@zW@Nd@@zV@N]@@zU@NS@NR@@zT@@zS@@zR@@zQT@zJ6@@@euu"@NENENN@NN@@NB@@Q@N?@@Q@N/@N.@@Q@@Q@@Q3uttuuuuu@N@@@࣠@#ctxZA6J6M@A@@N\3@N@@@@@@(bindings[A6N6V@A@@Nd3@ONn@@@@@@@@@ఠ#ctx\Y_Yb@A@@NW@zh3@"N|@@@@@డ#$List)fold_lefteiem@ enew@@@@@@OW@zm@@zv@NW@zp@@zu@@zt@@zs@@zr@ @@zq@V @@@zo@@zn@@zl@@zk@@zj3@4@@@@࣠@#ctx]Ae}e@A@@'G@@@@`Aঠ"ideeA3"idN@@@ !t@@@ @@@ 3#def T@@@ @@A@AH+q+sH+q+@@f&@@AG+a+cG+a+p@@j%@ఠ ^! @3A@@@@z3!  !!!!!@y>[@5@6@@@#def/e0eA!ఠ_@GA@T@@@z@@@;e<e@@O[@z@@@@ఐS/declare_bindingJK@Oɰ@@@S@@@z@@z@@S@@@z@r@@@z@@z@@z@@z@@z3_^^_____@@HE@G@F52@4@3@@@@ఐ#ctxst@M@@@@@ఐa"id@@@S@@@z[@z(@@ภ)Lfunction@Uఐg#def@8@@U)@@@z[@z[@zD@@ @@@@@z[@zJ@@@@@S@@@z@@@z[@zX@@s @@OY@ex@@@@@z@@@z@@z@@zX@zX@z@@ఐS#ctx@=@@O@@ఐQ(bindings@5@@O@@)@@9@A@Y[@@@ఠ(bindingsa@A@@̠Oe@@@{W@z3@Q\U@V@W@@@డs$List*concat_map@ @@@@!a@g@@ O!b@d@@@ @@ @@@O@@@@@9@@@@@@@@@@\@-(@@@@P@@zOO@@@z@@z@@z@PP@@@z@@zVO@@@z@@z@@zU@@ఐO۠7traverse_letrec_binding_`@O߰@@@O@@{@O@@{ O@@{ @@{ l@@ఐ̠#ctxtu@v@@y@@xy@@@O@@{O@@{@@ఐ(bindings%@ڰ@@PV@@~@@@A@@@@ఐ#ctx+-+0@@@3@@@@@@@ఐ(bindings+2+:@ @@P_T@{"@@@@@@ @@{#@( @@@ @@@1A@@P@@{5@P@@{4@P|@P{@@{3@@{2@@{1T@{,=@@@66 @PsPsPRPQ@PPPS@@Pp@@R@Pm@@R@Pj@@R@Pf@@RPe@@Q@@Q@@Q@@Q3@Q^@@@࣠@)outer_ctxbA<U<^@A@@P3@Q\@@@@@@)inner_ctxcA<_<h@ A@@P3@QlP@@@@@@@@#vardA <i <l@A@@P3        @P@@@@@@@@#defeA<m<p@/A@@P3@P@@@@@@@@ఐVʠ.find_candidate0s{1s@UD@@@H@@@{d@@{cӠV@@@{b@@@{a@@{`3<;;<<<<<@".P@%@&@@@@ఐ5#defNsOs@ @@P@@"@@V@@@{m@@@{l@Ġ$Nonecd@@@@@V@@@{x@@@{w3hgghhhhh@,@@@ @V@@@{z@@@{y@@@ภpz{A:@ఐ#var@g@@Q@@ఐQ砐(traverse@Q@@@Q@@{@Q@@{Q@@{@@{3@@ఐ )outer_ctx@@@QJ@@@ఐ#def@v@@QAM@@&@@RN@@B@@QT@{Q@ภQJAQ@KA@$QT@{@@@{Z@{a@@U@@QVc@Ġ$Some@ఠ$lfunf@A@@Wk@@@{@@@@@Wr@@@{@@@{@@Wy@@@{@@@{@@@@ఠ)functionsg@A@@QHT@|T@{T@{T@{3      @1*@+@,@@@ఐQw0make_dps_variant@Q{@@@Qy@@{@Qu@@{@Qr@@{@Qm@@@{@@{Qk@@{@@{@@{@@{"@@ఐ2#var:;@@@Q/@@ఐP)inner_ctxGH@8@@Q<@@ఐl)outer_ctxTU@V@@QI@@ఐ~$lfunab@S@@Q@@@{\@{\@{]@@R @@Q^@A@m @@డ$List#map{|!@ "%@@`v@@@@QT@{Z@{@@{R|T@{Z@{@@{@@{@`v@@@{@@{`u@@@{@@{@@{3@@@@@@@࣠@pjA@ఠ#varh,/@A@@RZ@{3@@@@@ఠ$lfuni15@A@@QT@{Z@{@@+6@@@@ @@{@@ @@@ఐ-#var:=@,@-@.@@-3@I8)"@#@$@@@@ภ)Lfunction?H@Xbఐ8$lfunIM@@@7@@@@@@@{@@"@@@O@ @@{$@ & N@@@@@{@@{[@{[@{Z@@ఐ)functionsO X@@@@@@@ST@{j@@@R@@@A'su@@R@> A@@R@@|u@R@@|t@R@@|s@R@@|rR@@|q@@|p@@|o@@|nT@|fL@@@<<<@RRRR@RR@@R@@R@R@@RR@@R@@R3FEEFFFFF@S@@@࣠@#ctxkAWZvXZy@jA@@R3VUUVVVVV@S@@@@@@&rAঠ"idiZ|jZ~Agఠl@A@h@@@|3onnooooo@S&R@@@@@#def}Z~ZAoఠm@A@Y @@@|@@@ZzZ@@R@@@@ఐ#def@@@@@Y$@@@|@|3@196@8@7& @@@$attr@Xް@@X@@@|@|@-tmc_candidate@X @@@@@|V@|@@ఠ)functionsn@A@@W@|3@+@@@ఐS50make_dps_variant@S9@@@S7@@|@S3@@|@S0@@|@S+@@@|@@|S)@@|@@|@@|@@| @@ఐ"id@T@@TT@|/@@ఐ#ctx@@@S<@@ఐ#ctx@@@SI@@ఐ#def!"@@@Sh@@@|X@|X@|]@@T @@Sg^@A@- @@డ$List#map;<@ ?@@@b6@@@@S@@|ST@|V@|@@|@@|@b2S@@@|@@|b1@@@|@@|@@|3VUUVVVVV@@@@@@@࣠@,qA@ఠ"idoqr@A@@S3pooppppp@@@@@ఠ#defp~@A@@S @@@@@S@S@@|@@ @@ຠ"idAఐ. @S@+@,@S3@F5(S@"@#@@@#def Aఐ4 @@S@@@ @@i@ @@@S@@|t@@|W@|W@|J@@ఐ)functions@n@@q@@@@T;T@|Z@@@@ภ̰%OAຠ١"id')Aఐz @D@@@@|V@|!@ࡠ#def+.@ఐU82traverse_lfunction1C@U<@@@U:@@} @U5@@}U0@@}@@}=@@ఐ#ctxDG@@@TJ@@ఐ#def"H#K@@@UOW@}Y@@(@@UMZ@@@S)M@@TT@|^@ภ2N\A@]A@@@@|V@}l@@;#e@@TT@|p@?i@@sr@jA@@T@@}(@T@@}'T@@}&@@}%T@}!@@@LZZv@TTTxTw@TvTy@@T@@R@T@@R@T@@R@T@@@R @@R T@@R @@R @@R @@R3a``aaaaa@U@@@࣠@#varsArQfsQi@A@@T3qppqqqqq@U@@@@@@)inner_ctxtAQjQs@A@@T3@UT@@@@@@@@)outer_ctxuAQtQ}@A@@T3@T@@@@@@@@$lfunvAQQ@A@гTꠐTQQ@@@@@}W3@ ,U@#@$@@ @@Q~Q@@@T@@@}\ @@@@@ఠ'specialw@A@@]@@@}Y@}_3@ :-@@@}[@4@5@@@డ~#Map$find%Ident@ @@@ @6A @@@Z@@@}g@@}f@W;7Y@}c@@@}e@@}d@@}b@@}a5@@ఐ#var@@@UnB@@ఐ)inner_ctx"#@@@UuQ@+specialized)*@W @@^^@@@}\@@F@@+]@A@2 @@@ఠ*fun_choicex=>@PA@@VY@}3=<<=====@o}v@w@x@@@ఐW&choiceNO@V@@@W@@}@V@@}V@@}@@}@@ఐԠ)outer_ctxcd@@@U$@@ఐҠ$lfunrs@@@[@@@}@}8@$body~@[x@@W$Z@}A@Wภ^@]@@@W&Z@}N@@C@@W$O@A@@@ డ!= , -@@!a@@@@@@/@@@@@@@&%equalBA@@@@yy@@Q@@@@zz@@@}@@@}Y@}@@}@ @@}@@@}@@}@@}3@@@@@@@ఐ*fun_choice  @@@@&Choice  !@)tmc_calls " +@@3B@@/!@@ภ . 0@@@@;@=@<@@@డ|&direct&Choicex y@ |}@@%@@@Y -T@~1@@@~3@@~2@@~0)@@ఐV*fun_choice#@°@@U6@@@@7@A@@@డ*lfunction''+'5@$kind]@@@ d@@ c¶ms @>!t@@@ a@@@@ b@@ `@@@ _@@ ^&return @@@ ]@@ \$body@@@ [@@ Z$attr^ @@@ Y@@ X#locJ@@@ W@@ V^p@@@ U@@ T@@ S@@ R@@ Q@@ P@@ O@667W7b@@@Q@RQ@@O^@@@~R@@~QMK@J@@@~O@]@@@~P@@~N@@@~M@@~LGe@@@~K@@~JE+@@@~I@@~HC^M@@@~G@@~FA@@@~E@@~D^@@@~C@@~B@@~A@@~@@@~?@@~>@@~=3)(()))))@@@@@@ఐk$kind;'7<';@װ@@^f@@@~Z@~Z@~@ఐn¶msO'=P'C@@@@@@@~@@@@~@@~@@@~Z@~Z@~8@ఐq&returnp'Eq'K@ @@@@@~}Z@~Z@~L@ఐ0$body'M'Q@V@@/Y@ఐr$attr'S'W@*@@^@@@~yZ@~Z@~m@ఐu#loc'Y'\@=@@ @@@~wZ@~Z@~@@ @@@ @@Q@i @@@A@@@@ఠ#dps`f`i@A@@_H@@@Y@~3@@@@@@@ఠ)dst_paramltl}@A@@@@@~Z@~@@@~Z@~@ະ#var@డ,create_local%Ident@ @@@@@@@@~@@~@@@~@@~F@@#dst@@@@@@@~[@~[@~Z@@' @@@@@~[@~`@O&offset-.@డ,create_local%Ident<=@ @A@@@@@@@@~@@~@@@~@@~@@&offsetVW@@YZ@@ @@@~[@~[@~@@' @@@#locij@ఐԠ$lfuntu@@@_@@@~@~@#loc@_q@@@@@~@@@l@@@A@lp@@@ఠ#dst@A@@Ǡw@@@~Z@~@@@~Z@~3@@@@@@ະؠO@@@~Z@~@١&offset@ภ&Offset!@}ภ$Lvar#'@Rఐ)dst_param(1@0@@b@@@~Z@~Z@~@@@~Z@~@@&offset28@@@G@@"9@@@@@~Z@~O@@5@@VZ@~R@@@@~Z@~@@ఐ1)dst_param @a@@8@@@~Z@~@@@~Z@~Z@~q@;@@t@A@@@డ&2duplicate_function&Lambda'?C(?I@ +?J,?\@@@`@@@ @@ `@@@ @@ @>>>>@@^@@@@`@@@@@`@@@@@3CBBCCCCC@@@@@@@డZ*lfunction'W?`X?j@@@`@@@3@@2@@@@0@@@@1@@/@@@.@@-@@@,@@+@@@*@@)`@@@(@@'@@@&@@%a@@@$@@#@@"@@!@@ @@@@L@ภ'Curried@;'Curried`@@@ @@@@B@@A<!!=!!@@@@@  @@`@@@e[@ig@ఐ>.add_dst_params@@@@98@@@u@@@t@@s@)@u@@@o@+@@@p@@n@@@r@@q$@@@m@@l@@k@@ఐ)dst_param@G@@ih@@@@@@\@\@@@ఐe$lfun@1@@a@@@@@¶ms@a.@@t@g@@@b@z@@@c@@a[@\@@@@\@\@@@-.@@@@@`[@\@@oఐ$lfunC D @o@@a@@@@@&returnOP@aR@@@@@^[@[@@డ#dps&Choicei"j(@ m)n,@@)@@@\\@@@@@@@@{@@@@@{@@@@@@@@)@@@@@@@@@I@@ఐ^*fun_choiceAK@ʰ@@]V@{ภy37@x@@@J@@@\@f@{ఐ##dst=@@p@@TS@@@@@@\@\@~@@!L@@@@@\@\@@ఐ<$lfunMYM]@@@be@@@@@$attrM^Mb@b@@b@@@Z[@[@@ఐ^$lfuncncr@*@@b@@@@@#loc cs cv@a@@r@@@X[@[@@@ @@b@@@@[@V@@@@Y@@@Zz@@@[X@A@ `b@@@ఠ'dps_var+|,|@>A@@d@@@Y@3/../////@n|u@v@w@@@ఐu'special@|A|@@@_ @@@@@&dps_idL|M|@_@@@A@P|~@@ภLVWA@ఐ#vard@ް@@\3a``aaaaa@3A:@;@<@@@@ఐ&directrs@@@\X@@@"@@\T@@ภv*A?@ఐb'dps_var @&@@]T@+@@ఐܠ#dps@f@@\X@9@@ @@\T@<@ภ5 QA4@RA@\Y@@@@X@K@@2[A@\T@@@@X@T@@e@@@@@Z@qj@@@k@@@l@@@m@@ @3n@@ @o@@ @UpA@@]%@@;@]!@@:@]@@9@]@@@8@@7]@@6@@5@@4@@3T@*f@@@QQ@]]\\@\\@@]@@R@\@@R\@@R@@R3@^k@@@࣠@#ctxA@ A@@]3@^i@@@@@@%termsA@A@@]3@^y]'@@@@@@@@డ$List#map@ !"@@l@@@@]:@@R^V@L@@Q@@P@l]C@@@N@@Ml @@@K@@J@@I365566666@1=]P@4@5@@@@ఐ^(traverseJK@^@@@^@@j@^@@i^@@h@@g@@ఐj#ctx_`@T@@]{'@@cd@@@^@@v^@@u.@@ఐo%termsst@8@@];@@Z@@]T@_>@A@@]@@@]@@]@@@@T@@@@@@@_@ఠ'rewrite@A@@@@@@T@@@@@@T@@@T@3@_@@@࣠@!tA @A@@3@_$)=M@@@@@  @@@ఠ#ctx  @A@@c@@@V@3@(8@@ @@@ຐ`M+specialized  %@డ#Map%empty%Ident ( -@  . 1@@ 2 7@ @`3!a@A@@@A@`1@`.E@ @@`=f@@@V@V@@@@?@@@  9@@GB@A@ @@ఐ_p(traverse=?=G@_t@@@cZ@@@@@@=@@@@@@@@@@@@@3-,,-----@bpi@j@k@@@@ఐw#ctx?=H@=K@ @@c{@@@V@V@@@ఐ!tS=L@@@#@@8@@$@C@@@A@T@@A@@@%StyleTeOVfO[@xAAР$Misc%Style$MiscuO^vOb@ yOczOh@@@3yxxyyyyy@_@@@@@@OO @ @@Ġ_jnjp@^@@@@^@@@3@6A.@1@@@డ5register_error_of_exn(Locationsus}@ s~s@@@@#exnG@@@@@&optionL?t%error@@@@@@@@@@?f@@@@@@?dy44?ey44@@?}_@+&@@@@#@@@@@ @@@@@@@@@@@@@@@3@Q@@@@@Ġ%Error@1mఠ#locڠ@A@@@@@3@p@@@Ġ?Ambiguous_constructor_arguments  @18ঠ(explicit@2NĠݰ@@@@@@@@  @)arguments* +A2\ఠ۠@BA@Π@@@@@@5@@@:;@@u@@@Y@=@@@6@@?@@@A@@@RF@@@@@F@@@@ఠ)print_msgޠT(U1@gA@@@*Format_doc)formatter@@@HY@;@@<$unitF@@@Y@=@@>Y@:3mllmmmmm@|u@v@wHE@G@F@@@࣠@#ppfA25@A@@(3@7$9l@@@@@  @@డ*Format_doc'fprintf*Format_doc8D8N@ 8O8V@@@I@@@@@@&Stdlib&format!a@v]@@@W@@@@@@ @@ @@ @@ @4utils/format_doc.mliQ@@fy@/*@@@p@@@6@@5@'@*Format_doc'printer&stringQ@@@@@@Z@Z@I@@J@Z@M@@N@!@@@@@@Z@Z@Q@@R@ Z@U@@V@:5@@@@@Z@Z@Y@@Z@ Z@]@@^Z@_@@`Z@[@@\Z@W@@XZ@S@@TZ@O@@PZ@K@@LZ@0@@@3x@@@4@@@2@@1c@@/@@.387788888@@@@@@@ఐˠ#ppfJ8WK8Z@ @@@@ภ&'X[iYAภ1%Alpha3 ;%Alpha@@!b@ 3@@#@!x@ ,@@#!c@ 0@@#@@#@@#@ @@#!a@ *@@#@@#!d@ 4!e@ 5!f@ 6@@@#@Ѡ/$@@@#@AOAYAA''(.(j@@@o@ภ,Char_literal[;,Char_literal!a@!b@!c@!d@!e@!f@@@@#@$charB@@@#)%!@@@#@BLAYAA %% %%@@@Cl@z@@@@[@[@@ภb͠.Formatting_lit;.Formatting_lit7!a@ E!b@ F!c@ G!d@ H!e@ I!f@ J@@@#@.formatting_lit@@@#_($ @@@#@BQAYAAV)()(W))@@@q@ภ%Break;%Break@@@"@p@@@"@@@"@@@"@C@GC@Ax|  y|  9@@@@@"@ @@@@@[@[@(@A@"@@@[@[@3@@@(@@@[@[@>@@$@Z@@@[@C@ภWX1$this6@6@@@@[@[@W@ภklEภsetMdKQ@Q@f@@@[@[@r@A\@l@@@[@[@}@@g@r@@@[@[@@@n@@@@ [@@ภ6{+constructor@@@@@)[@,[@+@ภJภR@@@@@B[@F[@E@A@@@@C[@H[@G@@@@@@D[@J[@I@@@@@@9[@A@ภ21+application@@@@@W[@Z[@Y@ภ21ภ@@@@@p[@t[@s@A@@@@q[@v[@u@@@@@@r[@x[@w@@@8@@@g[@o!@ภ5|6{#may@@`@@@[@[@5@ภI|J#{ภQCR+B)/@/@D@@@[@[@P@A:@J@@@[@[@[@@E@P@@@[@[@f@@L@@@@[@k@ภYŠ"be^@^@@@@[@[@@ภ(mŠภ0usy@y@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภ^ɠ/TMC-transformed@@@@@[@[@@ภrݠภz֠@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภZY"in@@>@@@[@[@@ภ'Z(Yภ/!0   @ @"@@@([@,[@+.@A@(@@@)[@.[@-9@@#@.@@@*[@0[@/D@@*@`@@@[@'I@ภ]^7'several<@<@@@@=[@@[@?]@ภqrKภykzSjQW@W@l@@@V[@Z[@Yx@Ab@r@@@W[@\[@[@@m@x@@@X[@^[@]@@t@@@@M[@U@ภ<)different@@@@@k[@n[@m@ภPภXà@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@{[@@ภ87%ways.@@@@@[@[@@ภ87ภ @@@@@[@[@ @A@@@@[@[@@@@ @@@[@[@"@@@>@@@[@'@ภ;<&Please@@f@@@[@[@;@ภOP)ภWIX1H/5@5@J@@@[@[@V@A@@P@@@[@[@a@@K@V@@@[@[@l@@R@@@@[@q@ภ_ˠ,disambiguated@d@@@@[@[@@ภ.sˠภ6{y@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@ @ภdϠ"by@@@@@#[@&[@%@ภxภܠ@@@@@<[@@[@?@A@@@@=[@B[@A@@@@@@>[@D[@C@@@@@@3[@;@ภ`_&adding@@D@@@Q[@T[@S@ภ-`._ภ5'6& @@(@@@j[@n[@m4@A@.@@@k[@p[@o?@@)@4@@@l[@r[@qJ@@0@f@@@a[@iO@ภcd="anB@B@@@@[@[@c@ภ wxQภqYpW]@]@r@@@[@[@~@Ah@x@@@[@[@@@s@~@@@[@[@@@z@@@@[@@ภB(explicit@@@@@[@[@@ภVภ^ɠ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภŠภFE* attribute@@*@@@[@[@@ภFEภ  @@@@@[@[@@A@@@@[@[@%@@@@@@[@![@ 0@@@L@@@[@5@ภIJ#"to(@(@t@@@.[@1[@0I@ภ]^7ภeWf?V=C@C@X@@@G[@K[@Jd@AN@^@@@H[@M[@Lo@@Y@d@@@I[@O[@Nz@@`@@@@>[@F@ภ(“”m٠#ther@r@@@@\[@_[@^@ภ<§¨٠ภD¯°@@@@@u[@y[@x@A@@@@v[@{[@z@@@@@@w[@}[@|@@@@@@l[@t@ภrݠ$#$call@@@@@[@[@@ภ$#ภ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@*@@@[@@ภ'n(m$that@@R@@@[@[@'@ภ;n<mภC5D4!@!@6@@@[@[@B@A,@<@@@[@[@M@@7@B@@@[@[@X@@>@t@@@[@]@ภqrK&shouldP@P@@@@[@[@q@ภÅÆ_ภ"ÍÎg~ek@k@@@@[@[@@Av@@@@[@[@@@@@@@[@[@@@@@@@[@@ภPûü"be@@@@@[@[@@ภdϠภlנȠ@@@@@-[@1[@0@A@@@@.[@3[@2@@@@@@/[@5[@4@@@@@@$[@,@ภLK$made@@0@@@B[@E[@D@ภLKภ!"@@@@@[[@_[@^ @A @@@@\[@a[@`+@@@ @@@][@c[@b6@@@R@@@R[@Z;@ภOP)/tail-recursive,.@.@z@@@p[@s[@rO@ภcd=ภk]lE\CI@I@^@@@[@[@j@AT@d@@@[@[@u@@_@j@@@[@[@@@f@@@@[@@ภ.ęĚsߠ"orx@x@@@@[@[@@ภBĭĮߠภJĵĶ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภxcba@F@@@[@[@@ภ)(ภ@@@@@[@[@@A@@@@[@[@ @@@@@@[@[@ @@@/@@@[@ @ภ,- ภ4{5 z* attribute @ @_@@@[@"[@! 4@ภH{I "zภPBQ *A( .@ .@C@@@8[@<[@; O@A 9@I@@@9[@>[@= Z@@ D@O@@@:[@@[@? e@@ K@@@@/[@7 j@ภ~ XĠ"on ]@ ]@@@@M[@P[@O ~@ภ'Œœ lĠภ/Śś tr x@ x@@@@f[@j[@i @A @@@@g[@l[@k @@ @@@@h[@n[@m @@ @@@@][@e @ภ]Ƞ %calls @ @@@@{[@~[@} @ภqܠ   ภy ՠ @ @@@@[@[@ @A @@@@[@[@ @@ @@@@[@[@ @@ @ @@@[@ @ภY X$that @ @=@@@[@[@ @ภ& Y'  Xภ. /    @ @ !@@@[@[@ -@A @ '@@@[@[@ 8@@ "@ -@@@[@[@ C@@ )@ _@@@[@ H@ภ\] 6&should ;@ ;@@@@[@[@ \@ภp q J ภ x jy R i P V@ V@ k@@@[@[@ w@A a@ q@@@[@[@ @@ l@ w@@@[@[@ @@ s@ @@@[@ @ภ;ƦƧ #not @ @@@@[@[@ @ภOƺ ƻ  ภW      @ @ @@@[@"[@! @A @ @@@[@$[@# @@ @ @@@ [@&[@% @@ @ @@@[@ @ภ7 6"be @ @@@@3[@6[@5 @ภ 7  6ภ       @ @ @@@L[@P[@O @A @ @@@M[@R[@Q @@ @ @@@N[@T[@S !@@ @ =@@@C[@K &@ภ:; ,transformed. @ @e@@@a[@d[@c :@ภN@O (?@ (@ bZ@Z@Z@FZ@Z@\@V <@ /@ Z@Z@Z@EZ@Z@\@W\@X \@Y#\@Z&\@[@@@b[@l p@@ V@.\@8$\@93\@:6\@;9\@<<\@=@@@D[@` @@ l@D\@(:\@)I\@*L\@+O\@,R\@-@@@4[@B @@ @Z\@ P\@ _\@ b\@ e\@h\@@@@[@2 @@ @'p\@f\@u\@x\@{\@~\@@@@[@ @@ @=\@ܠ|\@ݠ\@ޠ\@ߠ\@\@@@@[@ @@ @S\@̠\@͠\@Π\@Ϡ\@Р\@@@@[@ @@ @i\@\@\@\@\@\@@@@[@ @@ @\@\@\@\@\@\@@@@[@ @@ @\@\@\@\@\@\@@@@[@ 6@@ @\@p\@q\@r\@s\@t\@u@@@|[@ L@@ 2@ \@R\@S\@T\@U\@V\@W@@@^[@z b@@ H@נ \@B\@C%\@D(\@E+\@F.\@G@@@N[@\ x@@ ^@6\@$,\@%;\@&>\@'A\@(D\@)@@@0[@L @@ t@L\@B\@Q\@T\@W\@Z\@@@@ [@. @@ @bZ@PZ@^Z@h\@k\@n\@@@@[@ @@ @- \@Ѡm\@Ҡ|\@Ӡ\@Ԡ\@ՠ\@@@@[@  @@ @D \@\@ \@à\@Ġ\@Š\@@@@[@ @@ @[ \@\@\@\@\@\@@@@[@ @@ @r +\@\@\@\@\@\@@@@[@ @@ @ B\@u\@v\@w\@x\@y\@z@@@[@ +@@ @ Y\@e\@f\@g\@h\@i\@j@@@q[@ B@@ (@ p\@G\@H\@I \@J \@K\@L@@@S[@o Y@@ ?@Π \@7\@8\@9 \@:#\@;&\@<@@@C[@Q p@@ V@ \@%\@4\@7\@:\@=\@@@@%[@A @@ m@ \@ <\@ K\@ N\@ Q\@ T\@@@@[@# @@ @ \@S\@b\@e\@h\@k\@@@@[@ @@ @* \@۠j\@ܠy\@ݠ|\@ޠ\@ߠ\@@@@[@ @@ @A \@\@\@\@\@\@@@@[@ @@ @X\@\@\@\@\@\@@@@[@ @@ @o(\@\@\@\@\@\@@@@[@@@ @?\@\@\@\@\@\@@@@[@(@@@V\@a\@b\@c\@d\@e\@f@@@m[@?@@%@m\@Q\@R\@S\@T \@U \@V@@@][@kV@@<@ˠ\@3 \@4\@5\@6 \@7#\@8@@@?[@[m@@S@\@#"\@$1\@%4\@&7\@':\@(@@@/[@=@@j@\@9\@H\@K\@N\@ Q\@ @@@[@-@@@\@P\@_\@b\@e\@h\@@@@[@@@@'Z@ҠaZ@۠oZ@ؠw\@ܠz\@ݠ}\@@@@[@@@@<\@|\@\@\@\@\@@@@[@@@@S%\@\@\@\@\@\@@@@[@@@@j<\@\@\@\@\@\@@@@[@ @@@S\@t\@u\@v\@w\@x\@y@@@[@#@@ @j\@V\@W\@X\@Y\@Z\@[@@@b[@~:@@ @\@F\@G\@H\@I\@J\@K@@@R[@`Q@@7@Ơ\@(\@)\@*\@+\@,\@-@@@4[@Ph@@N@ݠ\@\@,\@/\@2\@5\@@@@$[@2@@e@\@4\@C\@F\@I\@L\@@@@[@"@@|@ \@K\@Z\@]\@`\@c\@@@@[@@@@"\@̠b\@͠q\@Πt\@Ϡw\@Рz\@@@@[@@@@9 \@y\@\@\@\@\@@@@[@@@@P"\@\@\@\@\@\@@@@[@@@@g9\@\@\@\@\@\@@@@[@ @@@~P\@p\@q\@r\@s\@t\@u@@@|[@ @@@g\@`\@a\@b\@c\@d\@e@@@l[@z7@@@~\@B\@C\@D\@E\@F\@G@@@N[@jN@@4@à\@2\@3\@4\@5\@6\@7@@@>[@Le@@K@ڠ\@\@)\@,\@/\@2\@@@@ [@<|@@b@\@1\@@\@C\@F\@I\@ @@@[@@@y@\@H\@W\@Z\@]\@`\@@@@[@@@@\@֠_\@נn\@ؠq\@٠t\@ڠw\@@@@[@@@@6\@v\@\@\@\@\@@@@[@@@@M\@\@\@\@\@\@@@@[@@@@d6\@\@\@\@\@\@@@@[@@@@{M\@z\@{\@|\@}\@~\@@@@[@@@@d\@\\@]\@^\@_\@`\@a@@@h[@4@@@{\@L\@M\@N\@O\@P\@Q@@@X[@fK@@1@\@.\@/\@0\@1\@2\@3@@@:[@Vb@@H@נ\@\@&\@ )\@!,\@"/\@#@@@*[@8y@@_@\@.\@=\@@\@C\@F\@@@@ [@(@@v@\@E\@T\@W\@Z\@]\@@@@[@ @@@\@Ҡ\\@Ӡk\@Ԡn\@ՠq\@֠t\@@@@[@@@@3\@ s\@à\@Ġ\@Š\@Ơ\@@@@[@@@@JZ@Z@Z@\@\@\@@@@[@@@@\O\@v@@@[@@ %a:@ this@ constructor@ application@ may@ be@ TMC-transformed@ in@ several@ different@ ways.@ Please@ disambiguate@ by@ adding@ an@ explicit@ %a attribute@ to@ the@ call@ that@ should@ be@ made@ tail-recursive,@ or@ a@ %a attribute@ on@ calls@ that@ should@ not@ be@ transformed.@@d@@@[@n[@m@@@@i@@@D[@ @@డ+inline_code%StyleTU@ XY@@xs@@@@@@@.utils/misc.mli.Q2Q4.Q2Q^@@$Misc@@@-@@0[@tail_mod_cons]rs @@uv @@[@<@@డ +inline_code%Style· Έ @ ΋ Ό *@@3@@R@@+[@tailcall]Η ,Θ 7@@Κ +Λ 8@@[@a@@డE+inline_code%Styleά9Gέ9L@ ΰ9Mα9X@@X@@w@@1[@tailcall false]μ9Zν9k@@ο9Y5@@[@ @@&8@@@B9A@lY@@@A@=@@ఠ&submgs,zz@A@@S#msg@@@ @@@Y@3@n@@@@@@ఠ#sub-@A@@@Y@@@Z@@@%@@@SZ@@@Z@"@࣠@$info/A  @A@г4tmc_call_information@@#@@@3@@7"#N@@@  @@&'@@@0 @@@@@ఠ#loc045@GA@@S@@@+\@387788888@ :H@@@@4@5@@@డ/Scoped_location+to_location)DebuginfoTU@ XY@@]^@ @S° @@@S@@@ @@S@@@@@.@@ఐn$infowx@:@@NO@@@1@/B@#locστ @NY@@@@@0L@@6@@PM@A@ϋ@@డ̔#msg(LocationϙϚ%@ ϝ&Ϟ)@@#locT^@@@M@@@L@@K@&Stdlib'format4!a@$*Format_doc)formatter@@@HTh@@@I@@@J@@@G@@F@@E@@D@Tk e eTl e @@Tn@>9@@64T@@@@@@@?@@>@3[@8,@@@;'@@@<@@@=@@@:@@9@@7@@63@@@@@@Zภ$Someఐנ#loc + .@@@T@@@V\@Z\@Y@@@k @@@["@@ภ%/AภD C=This call could be annotated.@@(@@@\@\@B@ภ@@zb[@[@]@@@@Q\@\@@@@R\@\@ @@@\@h@@<@]@k @@@\@t@>L@L@@@@\@\@@@SU@@Ǡ-&@@@P\@@@_@@@`@@F@^aA@Z@h@A@e@డ$List#mapЕЖ@ ЙК@@@@@@@@@[@@@@@@[@@@@@@@@@@@@@@@@@@3жеежжжжж@@@@@@@ఐܠ#sub@ @@@@@@@@@@@@@@@A @@@8@@@@@7@@@@@'@@డW$List'flatten@ @@@Ѡՠ!a@@@@@@@@@ߠ @@@@@@ƦƧ5@@ƥR@$@@@.@@@ Z@Z@wZ@!@@@$@@@#@@"@@@ @@t@@డϦ$List#mapAhwBh{@ Eh|Fh@@<@@@@H@@@f]@I@@LVU@@@e@@@d]@F@@K@@J@B@@@H@@GA@@@E@@D@@C@@࣠@!t1Ayhzh@ьA@@,3xwwxxxxx@@@@@@@ఐ!tщhъh@;@@@@<3шччшшшшш@@@@)tmc_callsѓhєh@I @@> @їhјh@@@P@@^K@@]^@j^@h$@@a @@@X@@@[@@ZW@@@Y@@X1@@ఐ)argumentsѸR^ѹRg@D@@II@@@z@@@y\@}\@{I@@/@@̠͠@@@/@@@.[@\@uV@@@@@@@ Z@[@,_@@%@@`@@@@A@z@@ภ$Some  @డ&errorf(Location  @   @@#loc]V@@@@@@@@#subj$listKA@@@@@@~@@@}@@|(footnote~V+delayed_msg@@@{@@@z@@y@'format4!a@ |)formatter@@@vV@@@w@@@x@@@u@@t@@s@@r@@q@@p@Vg11Vh12@@V[@[V@@SW @@@@@@@@QO@@@@@@@@@@@LȠJ@@@@@@@@@H@@O@@@X@@@ M@@@X@@@X@@@@@@X@EX@͐@@X@`@@@]@@@@@@@@@@@+@@@@@@@@3ңҢҢңңңңң@@@@@@ภ҂iఐ#locҺ һ @G@@Wt@@@Y@Y@@@@ @@@ @ภҟఐ&submgs   @/@@ʠ@@@@@@Y@Y@=@@ @Р@@@A@ʐภ$None@@L@@@@@@@@R@@ภhӠg԰   Afภsޠ%Theta ;%ThetaH@@!b@ ?@@#!c@ =@@#@@#!a@ :@@#  !d@ @!e@ A!f@ B@@@#@r# @@@#@APAYAAi(k(kj()@@@p@ภ!"N@N@X@X@ X@&X@֠ҠX@Z@Z@@@@'Y@0@@d@Z@X@@@@ Y@!@"%tw@w@@@@ Y@2Y@1@@~}@@S .@@@Y@@@ఐB)print_msgӖ ӗ @@@X@A@@Ӝ ӝ @@ @@@@8 @@@@@@@@@@@@9@@@8:@Ġ%ErrorӴ %ӵ *@J-ఠ#locܠӽ ,Ӿ /@A@@@@@@Ġ?Ambiguous_constructor_arguments 1@ 1_@Iঠ(explicit `s `{@K Ġ° `~ `@¯@@@@ј@@@$@)arguments ` `AKఠݠ@A@эь@@@*@@@)@@@ `q `@@4@@@,Y@+@@@6@@@@@-@@@Q `@@Q@@@/$@@@@ఠ)print_msg2  @&A@@@@@@hY@G@@H@@@Y@I@@JY@F3$##$$$$$@sl@m@n@=@?@>@@@࣠@#ppf4A9 : @LA@@ 387788888@/A B@@@@@  @@డ'fprintf*Format_docRS@ VW@@@@@@@@V@@U@@@@@@P@Z@Z@i@@j@ Z@m@@n^Z@o@@pZ@k@@lZ@P%@@@S@@@T@@@R@@Q%@@O@@N3ԈԇԇԈԈԈԈԈ@Q]s@T@U@@@@ఐd#ppfԚԛ@ @@@@ภ v wԨԩKA ภԁPԂ Oภԉ Ԋz@@@@[@[@8@ภ1Ԝԝ&Πภ9Ԥԥ.|2@2@@@@[@[@S@A=@@@@[@[@^@@H@@@@[@[@i@@O@@@@[@n@ภgҠ\$thisa@a@@@@ [@[@ @ภ{pภxߠ|@|@@@@$[@([@'@A@@@@%[@*[@)@@@@@@&[@,[@+@@@@@@[@#@ภcb+constructor@@G@@@9[@<[@;@ภ0c1bภ8*9)@@+@@@R[@V[@U@A@1@@@S[@X[@W@@@7@@@T[@Z[@Y@@@i@@@I[@Q@ภfg+application@@@@@g[@j[@i@ภz{ภՂtՃ sZ@@u@@@[@[@1@A@{@@@[@[@<@@&@@@@[@[@G@@-@@@@w[@L@ภEհձ:#may?@?@@@@[@[@`@ภYĠNภa̠VZ@Z@@@@[@[@{@Ae@@@@[@[@@@p@@@@[@[@@@w@@@@[@@ภA@"be@@%@@@[@[@@ภ£A@ภ«@@ @@@[@[@@A@@@@[@[@@@@@@@[@[@@@@G@@@[@@ภD‹EŠ/TMC-transformed@@o@@@[@[@@ภXYภ`RaQ8@@S@@@ [@[@ @A@Y@@@ [@[@@@@_@@@ [@[@%@@ @@@@[@ *@ภ#֎֏Ԡ"in@@¹@@@[@"[@!>@ภ7֢֣,Ԡภ?֪֫48@8@@@@8[@<[@;Y@AC@@@@9[@>[@=d@@N@@@@:[@@[@?o@@U@@@@/[@7t@ภmؠb'severalg@g@@@@M[@P[@O@ภÁvภÉ~@@@@@f[@j[@i@A@@@@g[@l[@k@@@@@@h[@n[@m@@@%@@@][@e@ภ÷"i#h)different@@M@@@{[@~[@}@ภ6i7hภ>0?/@@1@@@[@[@@A@7@@@[@[@@@@=@@@[@[@@@@o@@@[@@ภlómò%ways.@@×@@@[@[@@ภ׀ׁ ภ׈z׉y`@@{@@@[@[@7@A!@@@@[@[@B@@,@@@@[@[@M@@3@@@@[@R@ภK׶׷@$OnlyE@E@@@@[@[@f@ภ_ʠTภgҠ\à`@`@@@@[@[@@Ak@@@@[@[@@@v@@@@[@[@@@}@@@@[@@ภĕGF#one@@+@@@[@[@@ภĩGFภı @@@@@[@"[@!@A@@@@[@$[@#@@@@@@ [@&[@%@@@M@@@[@@ภJđKĐ"of@@u@@@3[@6[@5@ภ^_ภfXgW>@@Y@@@L[@P[@O@A@_@@@M[@R[@Q @@ @e@@@N[@T[@S+@@@@@@C[@K0@ภ)ؔؕڠ#the#@#@Ŀ@@@a[@d[@cD@ภ=بة2ڠภEذر:>@>@@@@z[@~[@}_@AI@@@@{[@[@j@@T@@@@|[@[@u@@[@@@@q[@yz@ภsޠ%h$)argumentsm@m@ @@@[@[@@ภŇ%|$ภŏ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@+@@@[@@ภŽ(o)n#may@@S@@@[@[@@ภ<o=nภD6E5@@7@@@[@[@@A@=@@@[@[@@@@C@@@[@[@ @@@u@@@[@@ภrŹsŸ&become@@ŝ@@@[@[@"@ภنهภ#َُf@@@@@[@[@=@A'@@@@[@ [@ H@@2@@@@[@ [@ S@@9@@@@[@X@ภQټ<ٽF;aJ@@@@[@[@k@ภdϠYภlנaȠe@e@@@@2[@6[@5@Ap@@@@3[@8[@7@@{@@@@4[@:[@9@@@@@@)[@1@ภƚLK#TMC@@0@@@G[@J[@I@ภƮLKภƶ!"@@@@@`[@d[@c@A@@@@a[@f[@e@@@ @@@b[@h[@g@@@R@@@W[@_@ภOƖPƕ%call,@@z@@@u[@x[@w@ภcdภk]l\C@@^@@@[@[@@A@d@@@[@[@%@@@j@@@[@[@0@@@@@@[@5@ภ.ڙښ#ߠ#but(@(@@@@[@[@I@ภBڭڮ7ߠภJڵڶ?C@C@@@@[@[@d@AN@@@@[@[@o@@Y@@@@[@[@z@@`@@@@[@@ภx*m)'severalr@r@@@@[@[@@ภnj*)ภǔ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@0@@@[@@ภ-t.s)arguments@@X@@@[@[@@ภAtBsภI;J:!@@<@@@[@[@@A@B@@@[@[@@@@H@@@[@ [@@@@z@@@[@@ภ wǾxǽ'contain@@Ǣ@@@-[@0[@/'@ภ ۋیภ(ۓ۔k!@!@@@@F[@J[@IB@A,@@@@G[@L[@KM@@7@@@@H[@N[@MX@@>@@@@=[@E]@ภVK%callsP@P@@@@[[@^[@]q@ภjՠ_ภrݠgΠk@k@@@@t[@x[@w@Av@@@@u[@z[@y@@@@@@v[@|[@{@@@@@@k[@s@ภȠ R Q$that@@6@@@[@[@@ภȴR Qภȼ'(@@@@@[@[@@A@ @@@[@[@@@@&@@@[@[@@@@X@@@[@@ภUȜVț#are@@Ȁ@@@[@[@@ภijภqcrbI@@d@@@[@[@ @A @j@@@[@[@+@@@p@@@[@[@6@@@@@@[@;@ภ4ܟܠ)*explicitly.@.@@@@[@[@O@ภHܴܳ=ภPܻܼEI@I@@@@[@[@j@AT@@@@[@[@u@@_@@@@[@[@@@f@@@@[@@ภ~0s/&markedx@x@@@@[@[@@ภɒ 0 /ภɚ@@@@@,[@0[@/@A@@@@-[@2[@1@@@ @@@.[@4[@3@@@ 6@@@#[@+@ภ3z4y"as@@^@@@A[@D[@C@ภG zH yภO AP @ '@@ B@@@Z[@^[@]@A@ H@@@[[@`[@_ @@@ N@@@\[@b[@a @@@ @@@Q[@Y @ภ}~ à/tail-recursive. @ @ɨ@@@o[@r[@q -@ภ&ݑ ݒ  àภ.ݙ ݚ #  q '@ '@ @@@[@[@ H@A 2@ @@@[@[@ S@@ =@ @@@[@[@ ^@@ D@ @@@[@ c@ภ\Ǡ Q &Please V@ V@@@@[@[@ w@ภp۠! e! ภx  m Ԡ  q@ q@ @@@[@[@ @A |@ @@@[@[@ @@ @ @@@[@[@ @@ @!@@@[@ @ภʦX W#fix @ @<@@@[@[@ @ภʺ%!X& !Wภ-!. !! @ @! @@@[@[@ @A @!&@@@[@[@ @@ @!,@@@[@[@ @@ @!^@@@[@ @ภ[ʢ\ ʡ#the @ @ʆ@@@[@[@ @ภo!p !ภ w!ix !h!O @ @!j@@@[@[@ &@A @!p@@@[@[@ 1@@ @!v@@@[@[@ <@@ "@!@@@ [@ A@ภ:ޥަ /(conflict 4@ 4@@@@'[@*[@) U@ภN޹!޺ C!ภV! K!! O@ O@!@@@@[@D[@C p@A Z@!@@@A[@F[@E {@@ e@!@@@B[@H[@G @@ l@!@@@7[@? @ภ˄6 y5"by ~@ ~@@@@U[@X[@W @ภ˘"6 "5ภˠ !  !! @ @!@@@n[@r[@q @A @"@@@o[@t[@s @@ @" @@@p[@v[@u @@ @"<@@@e[@m @ภ9ˀ: )reviewing @ @d@@@[@[@ @ภM"N "ภU"GV "F"- @ @"H@@@[@[@ @A @"N@@@[@[@ @@ @"T@@@[@[@ @@ @"@@@[@ @ภ߃߄ ɠ#and @ @ˮ@@@[@[@ 3@ภ,ߗ"ߘ !"ɠภ4ߟ"ߠ )""w -@ -@"@@@[@[@ N@A 8@"@@@[@[@ Y@@ C@"@@@[@[@ d@@ J@"@@@[@ i@ภb͠ W&fixing \@ \@@@@[@[@ }@ภv# k#ภ~" s"ڠ" w@ w@"@@@[@[@ @A @"@@@[@[@ @@ @"@@@[@[@ @@ @#@@@[@ @ภ̬^ ]#the @ @B@@@ [@[@ @ภ+#^, #]ภ3#%4 #$#  @ @#&@@@&[@*[@) @A @#,@@@'[@,[@+ @@ @#2@@@([@.[@- @@ @#d@@@[@% @ภąb ̧+conflicting @ @̌@@@;[@>[@= @ภ u#v #ภ}#o~ #n#U @ @#p@@@T[@X[@W ,@A @#v@@@U[@Z[@Y 7@@ !@#|@@@V[@\[@[ B@@ (@#@@@K[@S G@ภ@ૠ 5,annotations. :@ :@@@@i[@l[@k [@ภT࿠˱ I˰@ I@( {Z@fZ@Z@\@^%@ @Z@eZ@Z@\@_\@`\@a\@b\@c@@@j[@t @@ o@N&\@@ \@A+\@B.\@C1\@D4\@E@@@L[@h @@ @d<\@06\@1A\@2D\@3G\@4J\@5@@@<[@J @@ @zR\@L\@W\@Z\@]\@`\@@@@[@: @@ @͐h\@b\@m\@p\@s\@v\@@@@[@ @@ @ͦ~\@x\@\@\@\@\@@@@[@  @@ @ͼ\@Ԡ\@ՠ\@֠\@נ\@ؠ\@@@@[@ @@ @Ҡ\@\@\@\@\@\@@@@[@ #@@ @\@\@\@\@\@\@@@@[@ 9@@ @\@\@\@\@\@\@@@@[@ O@@ 5@\@x\@y\@z\@{\@|\@}@@@[@ e@@ K@*\@Z\@[\@\ \@] \@^\@_@@@f[@ {@@ a@@\@J\@K\@L \@M#\@N&\@O@@@V[@d @@ w@V.\@,(\@-3\@.6\@/9\@0<\@1@@@8[@T @@ @lD\@>\@I\@L\@O\@ R\@!@@@([@6 @@ @΂Z\@T\@_\@b\@e\@h\@@@@ [@& @@ @Θp\@j\@u\@x\@{\@~\@@@@[@ @@ @ή\@Р\@Ѡ\@Ҡ\@Ӡ\@Ԡ\@@@@[@ @@ @Ġ\@\@\@ \@à\@Ġ\@@@@[@@@ @ڠ\@\@\@\@\@\@@@@[@+@@@\@\@\@\@\@\@@@@[@A@@'@\@t\@u\@v\@w\@x\@y@@@[@W@@=@\@d\@e\@f\@g\@h\@i@@@p[@~m@@S@2 \@F\@G\@H\@I\@J\@K@@@R[@n@@i@H \@6\@7%\@8(\@9+\@:.\@;@@@B[@P@@@^6\@0\@;\@>\@A\@D\@@@@$[@@@@@tL\@F\@ Q\@ T\@ W\@ Z\@ @@@[@"@@@ϊb\@\\@g\@j\@m\@p\@@@@[@@@@Ϡx\@ڠr\@۠}\@ܠ\@ݠ\@ޠ\@@@@[@@@@϶\@\@\@\@\@\@@@@[@@@@̠\@\@\@\@\@\@@@@[@@@@\@\@\@\@\@\@@@@[@3@@@\@~\@\@\@\@\@@@@[@I@@/@\@`\@a\@b\@c\@d\@e@@@l[@_@@E@$\@P\@Q\@R\@S\@T \@U@@@\[@ju@@[@:\@2 \@3\@4\@5\@6 \@7@@@>[@Z@@q@P(\@""\@#-\@$0\@%3\@&6\@'@@@.[@<@@@f>\@8\@C\@F\@I\@L\@ @@@[@,@@@|T\@N\@Y\@\\@_\@b\@@@@[@@@@Вj\@֠d\@נo\@ؠr\@٠u\@ڠx\@@@@[@@@@Ш\@Ơz\@Ǡ\@Ƞ\@ɠ\@ʠ\@@@@[@@@@о\@\@\@\@\@\@@@@[@@@@Ԡ\@\@\@\@\@\@@@@[@%@@ @\@z\@{\@|\@}\@~\@@@@[@;@@!@\@j\@k\@l\@m\@n\@o@@@v[@Q@@7@\@L\@M\@N\@O\@P\@Q@@@X[@tg@@M@,\@<\@= \@> \@?\@@\@A@@@H[@V}@@c@B\@\@\@ "\@!%\@"(\@#@@@*[@F@@y@X0\@*\@5\@8\@;\@>\@@@@[@(@@@nF\@@\@K\@N\@Q\@T\@@@@[@@@@ф\\@V\@a\@d\@g\@j\@@@@[@@@@њr\@ l\@àw\@Ġz\@Š}\@Ơ\@@@@[@@@@Ѱ\@\@\@\@\@\@@@@[@@@@Ơ\@\@\@\@\@\@@@@[@@@@ܠ\@\@\@\@\@\@@@@[@-@@@\@f\@g\@h\@i\@j\@k@@@r[@C@@)@\@V\@W\@X\@Y\@Z\@[@@@b[@pY@@?@\@8\@9\@:\@;\@<\@=@@@D[@`o@@U@4 \@(\@)\@*\@+\@,\@-@@@4[@B@@k@J"\@ \@ '\@ *\@ -\@0\@@@@[@2@@@`8\@2\@=\@@\@C\@F\@@@@[@@@@vN\@ܠH\@ݠS\@ޠV\@ߠY\@\\@@@@[@@@@Ҍd\@̠^\@͠i\@Πl\@Ϡo\@Рr\@@@@[@@@@Ңz\@t\@\@\@\@\@@@@[@@@@Ҹ\@\@\@\@\@\@@@@[@ @@@Π\@\@\@\@\@\@@@@[@@@@\@p\@q\@r\@s\@t\@u@@@|[@5@@@\@R\@S\@T\@U\@V\@W@@@^[@zK@@1@\@B\@C\@D\@E\@F\@G@@@N[@\a@@G@&\@$\@%\@&\@' \@( \@)@@@0[@Lw@@]@<\@\@\@\@\@"\@@@@ [@.@@s@R*\@$\@/\@2\@5\@8\@@@@[@@@@h@\@:\@E\@H\@K\@N\@@@@[@@@@~V\@ȠP\@ɠ[\@ʠ^\@ˠa\@̠d\@@@@[@@@@Ӕl\@f\@q\@t\@w\@z\@@@@[@@@@Ӫ\@|\@\@\@\@\@@@@[@@@@\@\@\@\@\@\@@@@[@@@@֠\@l\@m\@n\@o\@p\@q@@@x[@'@@ @\@\\@]\@^\@_\@`\@a@@@h[@v=@@#@\@>\@?\@@\@A\@B\@C@@@J[@fS@@9@\@.\@/\@0\@1\@2\@3@@@:[@Hi@@O@.\@\@ \@\@\@\@@@@[@8@@e@D\@\@!\@$\@'\@*\@@@@ [@@@{@Z2\@,\@7\@:\@=\@@\@@@@[@ @@@pH\@ҠB\@ӠM\@ԠP\@ՠS\@֠V\@@@@[@@@@Ԇ^Z@TZ@^Z@b\@d\@f\@@@@[@@@@ԗ\@fopqr@@@[@@ L%a:@ this@ constructor@ application@ may@ be@ TMC-transformed@ in@ several@ different@ ways.@ Only@ one@ of@ the@ arguments@ may@ become@ a@ TMC@ call,@ but@ several@ arguments@ contain@ calls@ that@ are@ explicitly@ marked@ as@ tail-recursive.@ Please@ fix@ the@ conflict@ by@ reviewing@ and@ fixing@ the@ conflicting@ annotations.@@ԟ@@@[@v[@u@@@@,ˠ|@@@d[@@@డ.(+inline_code%Style@ @@;@@% @@0[@tail_mod_cons]@@a@@0[@@@Td@@&@neA@Y@l@A@i@@ఠ&submgs5@A@@@@@@@@Y@3@@@@@@@ఠ#sub6@A@@@:@@@Z@@@@@@Z@@@Z@"@࣠@$info8A@A@г4tmc_call_information@@#@@@3@@7\@@@  @@@@@0 @@@@@ఠ#loc9$'@(A@@mn@@@\@3@ :H@@@@4@5@@@డ/Scoped_location+to_location)Debuginfo5*63@ 94:C@@>D?O@ @m @@@m@@@@@m@@@@@.@@ఐn$infoXPYT@:@@h0@@@@B@#locdUeX@h:@@@@@L@@6@@PM@A@l @@డu#msg(Locationz\j{\r@ ~\s\v@@@@ߠn<@@@@@@@@@ޠ[@@@@à@@@Ġ@@@@@@@@@@@@3@@@@@@ภ}dఐ#loc\x\{@@@no@@@\@\@@@@ @@@ @@ภ1霠0靰\|A.ภ;馠  "This call is explicitly annotated.@@@@@&\@)\@(@@ภO麠Ԭԫ@@#`[@[@%]@:@@@\@\@#9@@@\@\@$ @@@'\@4f@@<@A]@ @@@\@"r@>L@L@G@@@\@8\@7}@@S@@p-&J@@@\@@@'@@@(@@@&)A@\Z@H0@A@-@డ$List#map>Tc?Tg@ BThCTk@@9@@@@w@@@[@b@@e|@@@[@_@@d@@c@;@@@a@@`:@@@^@@]@@\3_^^_____@@@@@@@ఐ#subqTlrTo@ @@@@@@@@@@@@@@@A @@@b8@@@t@@sa7@@@r@@q'@@డ$List&filter@ @@@@@@@@@\@@@@@@@@@@@@@@@@ @@@@@@@^@@࣠@$info:A&*@A@г(4tmc_call_information,@@@0@@@3@~@@@@%A@@@8@@@@ఐ%$infoEI@F@@@@%@&@@i@@@@3@7 @@@(explicitJR@i԰@@A@@@^@@  S@@@j@@O@@@@@]@]@8@@~ @@@Mu@@@@@y@@@@@E@@డ$List'flatten78@ ;<@@E@@@EDz@@@Z@^[@[@\[@Q[@@@@@@@@@L@@@@@z@@డ$List#mapno@ rs@@i@@@@c@@@@^@#@@&郠@@@?@@@>^@ @@%@@$@o@@@"@@!n@@@@@@@@@࣠@!t;A@A@@,3@F@@@@@@ఐ!t@;@@@@<3@W@@@)tmc_calls@cJ @@> @@@@P@@8K@@7_@D_@B$@@a @@@X@@@5@@4W@@@3@@21@@ఐ)arguments@@@ˠcv@@@T@@@S]@W]@UI@@/@@@@@ @@@\@Y]@OV@@@@3@@@[@[\@_@@%@@@@@Z@][@h@@.@@Zi@@@[T@A@@@ภ$Some!}!}@ՠడ'&errorf(Location,!}-!}@ 0!}1!}@@6@@6p@@@|@@@{@@z42p@@@y@@@x@@@w@@v/-@@@u@@@t@@s@+@@2@@@X@@@0@@@X@@@X@@@1@@@eX@!X@@@X@mC@@@p@@@@q1@@@r@@@o@@n+@@l@@k@@j@@i3@@@@@@ภeLఐࠐ#loc!}!}@s@@qW@@@Y@Y@@@@ @@@ @ภiఐ&submgs!}!}@/@@@@@@@@Y@Y@=@@ @@@@A@ภ@@.@@@@@@@@Q@@ภJ쵠I춰!}!}AHภU ภ]Ƞ׺׹@@1X@X@X@X@X@Z@Z@@@@Y@ @@)@GZ@ǠX@@@@Y@@"%t<@<@P@@@Y@Y@ @@CB@@Ϡ .@@@Y@@@ఐ*)print_msg=!}>!}@}@@X@@@C!}D!}@@@@*@@ߠ@@@d@6@@@ @@#@@P"Q"@@2@@@22p@@@ภ$None[#\#@چ@@@2y@@AT`@@@bc$@@@2@@@@@22@@@@@@@@V@V@2@@2@@F@@@V@2@A@}jj@@@2@A@A@ICA@A@B@\3A@AB@v@@n@U@@1@Ί@@΄@L~@@@@@A@|4B@ @D@%@b @@@@@ZX@64@@@4.3<@3^A3B@3>3X@@@3@3+@@@4.#TmcB@@ 5@>I@2}@˛@Ƞ@Ą@I@;@M@1X@Й@ՠ@@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ J Frédéric Bour E44E4@ H Gabriel Scherer, projet Partout, INRIA Saclay FF@ I Basile Clément, projet Cambium, INRIA Paris GG@ H  H Hj@ H Copyright 2020 Institut National de Recherche en Informatique et IkkIk@ H en Automatique. JJ@ H KKQ@ H All rights reserved. This file is distributed under the terms of $LRR%LR@ H the GNU Lesser General Public License version 2.1, with the *M+M@ H special exception on linking described in the file LICENSE. 0N1N8@ H 6O997O9@ H************************************************************************ v) unit], but we prefer to have the code explicit about using [unit], in particular as it ignores the destination argument. ~AABBN@ * The [find_*] machinery is used to locate a single subterm to optimize among a list of subterms. If there are several possible choices, we require that exactly one of them be annotated with [@tailcall], or we report an ambiguity.  here is how we will compute the result once we know that there is an unambiguously-determined tmc call, and whether an explicit request was necessary to disambiguate FFG6Gs@ & we know there is at least one choice GGGG@ [choice_prim] handles most primitives, but the important case of construction [Lprim(Pmakeblock(...), ...)] is handled by [choice_makeblock] EP PGPP@ o [choice_apply] handles applications, in particular tail-calls which generate Set choices at the leaves KQQ LQRQ~@ other cases use the [lift] helper that takes the sub-terms in tail position and the context around them, and generates a choice for the whole term from choices for the tail subterms. OQQQRLR@ * mutable bindings are not TMC-specialized [SS[ST @+ decompose hUVhUV@+ transform kVVkVV@) rebuild pWWpWW@+ decompose vXXvXX@+ transform xYYxYY@) rebuild |YY|YY@ in [try l1 with id -> l2], the term [l1] is not in tail-call position (after it returns we need to remove the exception handler) ZZ['[]@ [ In [static-catch l1 with ids -> l2], the term [l1] is in fact in tail-position [[\%\\@ o Support of tupled functions: the [function_kind] of the direct-style function is identical to the one of the input function, which may be Tupled, but the dps function is always Curried. [find_exact_application] is in charge of recovering the "real" argument list of a possibly-tupled call. `C`Oaa@ If we are calling a tmc-specializable function in tail context, then both the direct-style and dps-style calls must be tailcalls. bbcYc}@ [@tailcall false] is interpreted as a bailout annotation: "we are (knowingly) leaving the dps calling convention". It only has sense in the DPS version of the generated code, not in direct style. ffgrg@ * An ambiguous term should not lead to an error if it not used in TMC position. Consider for example: {[ type t = ... | K of t * (t * t) let[@tail_mod_cons] rec map f = function | [...] | K (t, (u, v)) -> K ((map[@tailcall]) f t, (map f u, map f v)) ]} Calling [choice_makeblock] on the K constructor, we need to determine whether its two arguments are ambiguous, which is done by calling [choice] on each argument to see if they would be TMC-able and if they are explicitly annotated. These calls give the following results: - there is an explicitly-requested tailcall in the first argument - the second argument is a nested pair whose arguments themselves are ambiguous -- with no explicit annotation. This determines that the arguments of K are not ambiguous, as only one of them is annotated. But note that the nested pair, in isolation, is ambiguous. This inner ambiguity is innocuous and should not result in an error, as we never use this inner pair in TMC position, only in direct style. This example shows that it would be incorrect to fail with an error whenever [choice] finds an ambiguity. Instead we only error when generating the [dps] version of the corresponding code; requesting the [direct] version is accepted and produces the expected direct code. j<jDphpr@ Whether or not the caller provides a destination, we can always provide a destination to our settable subterm, so the number of TMC sub-calls is identical in the [direct] and [dps] versions. -uu0vrv@ - The important case is the construction case ;ww;wx@ 1 Some primitives have arguments in tail-position ?xlxp?xlx@ in common cases we just return GyoysGyoy@ * we don't handle effect or DLS primitives  `|| `|}@ # we don't handle atomic primitives c}S}Wc}S}~@ 3 we don't handle array indices as destinations yet f}}f}}@ : we don't handle { foo with x = ...; y = recursive-call } i}}i}~5@ T operations returning boxed values could be considered constructions someday #l~J~N$m~~@ c Lazy blocks should never contain a recursive call directly: either it's a closure (Lazy_tag), or a variable (Forward_tag). The case 'let foo = recursive_call in lazy foo' could be translated to use tmc in the cases where 'foo' might be of type lazy or float, but given the fragility of such a transformation we choose not to. )u*y@6 more common cases... /|0|6@ 1 Support of Tupled function: see [choice_apply]. 5x6x@@*./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&lambda"-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"-cst ?/home/ci/builds/workspace/main/flambda/false/label/ocaml-alpine ?>3210/.-,+*)('&%$#"! @@0i9ߕ)S fŜe3@@@(Asttypes0eT$BbRM dc5Build_path_prefix_map0DGl}%Y5Lhi8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Cmi_format0`M{?w}@*Data_types0v\3,Svh)Debuginfo0_ |PooGq#Env0S B2*Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N ΐ0H~ށpFE#㠠)Load_path0,j " nn7ݠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0Bpg]?[q+Outcometree0BuG^)= 9c )Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0dU=\I/}%Shape0 M``ll&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain06wI62J{V.Stdlib__Either0HD ?|>.Stdlib__Format0b HvkR/Stdlib__Hashtbl0(L%bԠ,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e,Stdlib__List0oYӀ7tG[w\+Stdlib__Map0*4ɇ2ɠ%Subst0=aqT/!p+q0"Q&d5x:.Type_immediacy00$ jbv\"k&%Types0"|Vȷ`X )Unit_info0'T Χ@aR(Warnings0Ef{&@@A@CuC@Tu@Єt@˰Ε@@@nxr|@ϕҒ@ƒ@,@l@)@5?@QKQUϒٻ@x΂@m@@5[5e7հHVH`'@hh8@|@@@@j/j9@aP:@+5@@ @@=>턒@@=͑װMW綕8@@Iޒ'@7P7ZG<GF@ܕ@@nۑn\fIS@JߑKN@1t@@Ѥ@P8LV+@@FFڑx@&0@LLrߑr)@@Ӱ$@7R7\xx@vv@J@@@ Q[@>HSK)7@4>TӦ@@tݑt@>e_t@@ԁO@L-Ԙo@~@@BBJ@ttisPk@~~@7A@HHt3=@ܐ @Mmؒ~孑@SIq@!+0@REOW@3=@ʑ԰O@7(72>@b@`J`TN4/Ԓe@"e"off5@U_@LH?P@+@Ε2$.@ӑAc\@@LLϕp@m@ y@ҟҩ@ N@Q@@@}@A =G趕C@memo2<@@;E@@xy@(&@@@P2@8@8@@@A@@